Protección contra vulnerabilidades
Cada cierto tiempo se informa de una brecha de seguridad en otro sitio web importante o se explota una brecha. Esto es desagradable. Si le importa la seguridad de sus aplicaciones web, Nette Framework es sin duda la mejor opción.
Cross-Site Scripting (XSS)
Cross-Site Scripting es un método de vulneración de sitios web que abusa de salidas no tratadas. El atacante puede entonces inyectar su propio código en la página y así modificarla o incluso obtener datos sensibles sobre los visitantes. La única forma de defenderse contra XSS es tratando de manera consistente y correcta todas las cadenas. Sin embargo, basta con que su codificador lo omita una sola vez, y todo el sitio web puede verse comprometido de inmediato.
Un ejemplo de ataque puede ser inyectar una URL modificada al usuario, mediante la cual inyectamos nuestro código en la página. Si la aplicación no trata adecuadamente las salidas, ejecutará el script en el navegador del usuario. De esta manera, podemos, por ejemplo, robarle su identidad.
https://example.com/?search=<script>alert('Ataque XSS exitoso.');</script>
Nette Framework introduce una tecnología revolucionaria Context-Aware Escaping, que le librará para siempre del riesgo de Cross-Site Scripting. Trata automáticamente todas las salidas, por lo que no puede ocurrir que el codificador olvide algo. ¿Un ejemplo? El codificador 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, es necesario tratar explícitamente
cada impresión e incluso de manera diferente en cada lugar. En Nette Framework no es necesario tratar nada, todo se hace
automáticamente, correctamente y de forma consistente. Si asignamos a la variable $message = 'Ancho 1/2"'
, el
framework generará el 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)
El ataque Cross-Site Request Forgery consiste en que el atacante atrae a la víctima a una página que, discretamente en el navegador de la víctima, realiza una solicitud al servidor en el que la víctima ha iniciado sesión, y el servidor cree que la solicitud fue realizada voluntariamente por la víctima. Así, bajo la identidad de la víctima, realiza una determinada acción sin que ésta lo sepa. Puede tratarse de un cambio o eliminación de datos, envío de un mensaje, etc.
Nette Framework protege automáticamente los formularios y señales en los presenters contra este tipo de ataque. Lo hace impidiendo que se envíen o se invoquen desde otro dominio. Si desea desactivar la protección, use en los formularios:
$form->allowCrossOrigin();
o en el caso de una señal, agregue la anotación @crossOrigin
:
/**
* @crossOrigin
*/
public function handleXyz()
{
}
En Nette Application 3.2 también puede usar atributos:
use Nette\Application\Attributes\Requires;
#[Requires(sameOrigin: false)]
public function handleXyz()
{
}
Ataque de URL, códigos de control, UTF-8 inválido
Varios términos relacionados con el intento de un atacante de inyectar una entrada maliciosa en su aplicación web. Las consecuencias pueden ser muy diversas, desde dañar las salidas XML (por ejemplo, canales RSS no funcionales) hasta obtener información sensible de la base de datos o contraseñas. La defensa consiste en tratar consistentemente todas las entradas a nivel de bytes individuales. Y seamos sinceros, ¿quién de ustedes lo hace?
Nette Framework lo hace por usted y, además, automáticamente. No necesita configurar absolutamente nada y todas las entradas estarán tratadas.
Secuestro de sesión, robo de sesión, fijación de sesión
La gestión de sesiones está asociada a varios tipos de ataques. El atacante roba o inyecta su ID de sesión al usuario y gracias a ello obtiene acceso a la aplicación web sin conocer la contraseña del usuario. Luego puede hacer cualquier cosa en la aplicación sin que el usuario lo sepa. La defensa consiste en una configuración correcta del servidor y de PHP.
Nette Framework configura PHP automáticamente. El programador no tiene que pensar en cómo asegurar correctamente la sesión y
puede concentrarse plenamente en la creación de la aplicación. Sin embargo, requiere que la función ini_set()
esté habilitada.
Cookie SameSite
Las cookies SameSite proporcionan un mecanismo para reconocer qué llevó a la carga de la página. Lo cual es absolutamente crucial por razones de seguridad.
El indicador SameSite puede tener tres valores: Lax
, Strict
y None
(este último
requiere HTTPS). Si la solicitud de la página proviene directamente del sitio web o el usuario abre la página introduciéndola
directamente en la barra de direcciones o haciendo clic en un marcador, el navegador enviará todas las cookies al servidor (es
decir, con los indicadores Lax
, Strict
y None
). Si el usuario llega al sitio web haciendo
clic en un enlace desde otro sitio web, se pasarán al servidor las cookies con los indicadores Lax
y
None
. Si la solicitud se origina de otra manera, como el envío de un formulario POST desde otro sitio web, la carga
dentro de un iframe, mediante JavaScript, etc., solo se enviarán las cookies con el indicador None
.
Nette envía por defecto todas las cookies con el indicador Lax
.