Tamaño mínimo del cuadro de texto de entrada requerido para los ataques XSS

2

Tengo el siguiente código para aceptar el ID de inicio de sesión del usuario como entrada del usuario.

<input name="userName" type="text" id="userID" maxlength="8"/></td>

El número máximo de caracteres que puede ingresar un usuario final es 8 aquí. Si uno tiene que llevar a cabo un ataque XSS como este, ingrese el código a continuación en el cuadro de entrada,

<script type="javascript>hello</script> ,

que no se puede ingresar debido a la restricción maxlength , ¿puedo estar seguro de que no se puede realizar el ataque XSS de esta categoría?

En general, si la entrada está restringida por maxlength , ¿cuál es el mínimo maxlength que debe dar una vez para restringir el ataque XSS?

    
pregunta Vikas V 07.02.2013 - 07:43
fuente

2 respuestas

9

Su solución no previene ningún ataque XSS. El atributo de etiqueta de entrada HTML maxlength es una instrucción para el navegador web, que un atacante malintencionado puede cambiar de forma trivial en cualquier navegador moderno mediante la modificación dinámica del DOM.

<input name="userName" type="text" id="userID" maxlength="8"/>

Sus rutinas de saneamiento deben realizarse con el código del lado del servidor. Ese es el tipo de saneamiento que se podría hacer si trunca cualquier entrada que tenga más de ~ 8 caracteres cuando está en el código del lado del servidor (no en el atributo HTML que un cliente puede modificar fácilmente). Ten en cuenta que html / js es bastante tolerante (y tendrías que probar todos los navegadores), así que una vez que llegues a longitudes superiores a len ( <script> ) ~ 8, creo que este mecanismo podría fallar para un uso inteligente con Algunos navegadores malos.

Sin embargo, esto sigue siendo una ruta inane para prevenir XSS (a menos que los únicos datos que su aplicación tomará y posiblemente le muestre a cualquier usuario sean 8 caracteres y el código del lado del servidor trunca esta entrada del usuario en ~ 8 caracteres). Realmente necesitas:

  • Ejecute un conocido desinfectante / purificador de HTML que no escribió por sí mismo o

  • Primero evite todos los caracteres html especiales en la entrada del usuario ( "&'<> a sus versiones escapadas de HTML: &quot;&amp;&apos;&lt;&gt; ) y luego aplique las reglas de un lenguaje de marcado ligero seguro (como reddit markdown) para permitir solo cosas seguras como enlaces [links](http://example.com) (la verificación del protocolo está en su lista blanca segura, por ejemplo, http / https / ftp ) o en cursiva ( *italicized* ) o en negrita ( **bold** ) texto.

respondido por el dr jimbob 07.02.2013 - 08:27
fuente
4

Esto no es protección contra XSS. Esto se debe a que maxlength está restringido en el lado del cliente, que se puede cambiar.

Por ejemplo, si utilizo las herramientas de desarrollo de un navegador y cambio el maxlength sobre la marcha, puedo ingresar y enviar cadenas más largas al servidor.

Así que no uses tales atributos como protección.

Si alguien quiere inyectar un XSS, elegirá una manera de eludir todas las medidas de protección del lado del cliente.

    
respondido por el Uwe Plonus 07.02.2013 - 08:27
fuente

Lea otras preguntas en las etiquetas