Protección contra vulnerabilidades
De vez en cuando se anuncia, o incluso se explota, un fallo de seguridad grave en otra web importante. Es desagradable. Si le importa la seguridad de sus aplicaciones web, Nette Framework es sin duda la mejor elección.
Cross-Site Scripting (XSS)
Cross-Site Scripting es un método para atacar sitios web aprovechando salidas sin escapar. Un atacante puede así inyectar su propio código en la página, y con ello modificarla o incluso obtener datos sensibles de los visitantes. La protección contra XSS exige escapar de forma consistente y correcta todas las cadenas de salida. Si su desarrollador se olvida una sola vez, toda la web puede quedar comprometida.
Un ejemplo de ataque puede ser proporcionar al usuario una URL modificada que inyecte código en la página. Si la aplicación no escapa correctamente las salidas, el script se ejecuta en el navegador del usuario. Así se le puede robar, por ejemplo, su identidad.
https://example.com/?search=<script>alert('Ataque XSS exitoso.');</script>
Nette Framework trae la revolucionaria tecnología Context-Aware Escaping, que elimina definitivamente el riesgo de Cross-Site Scripting. Escapa automáticamente todas las salidas según el contexto, así que el desarrollador no puede olvidarse de nada por descuido. ¿Un ejemplo? El desarrollador crea esta plantilla:
<p onclick="alert({$message})">{$message}</p>
<script>
document.title = {$message};
</script>
La notación {$message} significa imprimir una variable. En otros frameworks hay que escapar explícitamente cada
salida, y además de forma distinta en cada sitio. En Nette Framework no hay que escapar nada, todo se hace automáticamente,
correctamente y de forma consistente. Si establecemos la variable $message = 'Ancho 1/2"', el framework genera el
siguiente código HTML:
<p onclick="alert("Ancho 1\/2\"")">Ancho 1/2"</p>
<script>
document.title = "Ancho 1\/2\"";
</script>
Cross-Site Request Forgery (CSRF)
En un ataque de Cross-Site Request Forgery, el atacante atrae a la víctima a una página que, de forma discreta, ejecuta en el navegador de la víctima una petición a un servidor donde esta tiene la sesión iniciada. El servidor cree que la petición la hizo la víctima por voluntad propia. Así, bajo la identidad de la víctima, realiza una acción sin que ella lo sepa. Puede tratarse de modificar o borrar datos, enviar un mensaje, etc.
Nette Framework protege automáticamente los formularios y las señales de los presenters contra este tipo de ataque, impidiendo que se envíen o se disparen desde otro dominio. Si quiere desactivar la protección, en los formularios use:
$form->allowCrossOrigin();
o, en el caso de una señal, añada el atributo:
use Nette\Application\Attributes\Requires;
#[Requires(sameOrigin: false)]
public function handleXyz()
{
}
Esta protección se apoya en la cabecera Sec-Fetch-Site (Fetch Metadata), que el navegador envía automáticamente
y que no se puede falsificar ni con una vulnerabilidad XSS en el servidor. El artículo El navegador por fin resuelve el CSRF lo describe en detalle.
Ataque por URL, códigos de control, UTF-8 inválido
Distintos términos relacionados con el intento de un atacante de inyectar entradas maliciosas en su aplicación web. Las consecuencias pueden ser muy variadas, desde dañar las salidas XML (p. ej. canales RSS que dejan de funcionar) hasta obtener información sensible de la base de datos o contraseñas. La defensa consiste en validar de forma consistente todas las entradas a nivel de bytes. Y, seamos sinceros, ¿cuántos de ustedes lo hacen de verdad?
Nette Framework lo hace por usted, automáticamente. No necesita configurar nada y todas las entradas quedarán saneadas.
Session Hijacking, Session Stealing, Session Fixation
Con la gestión de sesiones se relacionan varios tipos de ataque. El atacante roba el ID de sesión o se lo planta al usuario, y con ello obtiene acceso a la aplicación web sin conocer su contraseña. Después puede realizar cualquier acción dentro de la aplicación sin que el usuario lo sepa. La defensa está en configurar correctamente el servidor y PHP.
Nette Framework configura PHP automáticamente. Así el programador no tiene que pensar en cómo asegurar bien la sesión y
puede concentrarse plenamente en desarrollar la aplicación. Eso sí, requiere tener habilitada la función
ini_set().
Cookie SameSite
Las cookies SameSite proporcionan un mecanismo para reconocer qué llevó a cargar la página, lo cual es clave para la seguridad.
El indicador SameSite puede tener tres valores: Lax, Strict y None (este último
requiere HTTPS). Si la petición de la página llega directamente desde la propia web, o el usuario abre la página
escribiéndola directamente en la barra de direcciones o pulsando un marcador, el navegador envía al servidor todas las cookies
(es decir, con los indicadores Lax, Strict y None). Si el usuario llega a la web mediante
un enlace desde otra web, al servidor se le pasan las cookies con los indicadores Lax y None. Si la
petición se origina de otra manera, como enviar un formulario POST desde otro origen, cargarla dentro de un iframe, mediante
JavaScript, etc., solo se envían las cookies con el indicador None.
Nette envía de forma predeterminada todas las cookies con el indicador Lax.