¿Se debe validar la entrada del usuario por su longitud?

4

Es malo no validar la longitud de la entrada del usuario al campo de texto en el lado del servidor. ¿Puede conducir a vulnerabilidades tales como desbordamientos de búfer y otros?

Creo que depende del lenguaje de programación de la aplicación. Entonces, descríbalo para PHP, Java, .NET, Ruby, etc.

    
pregunta Andrei Botalov 16.12.2011 - 19:01
fuente

3 respuestas

7

Depende del lenguaje de programación utilizado. Tenga en cuenta que si hay un desbordamiento de búfer para un lenguaje que administra cadenas, ese desbordamiento generalmente ocurrirá en niveles que no puede alcanzar. Creo que podría estar más preocupado por las situaciones en las que va a pasar la cadena a otro dominio (como una base de datos, un módulo basado en C, etc.) En este punto, sería prudente asegurar la longitud y otros datos. Las características de tipo son apropiadas para el destino.

Recuerdo haber leído en la especificación original para HTTP (creo que estaba allí) que un buen servidor debería ser flexible en lo que acepta, pero ser estricto en lo que devuelve. Lo mismo se puede aplicar aquí: sea lo más flexible que pueda sobre la información que reciba del usuario, pero asegúrese de que sea lo más seguro posible antes de moverlo a otro dominio.

    
respondido por el logicalscope 16.12.2011 - 19:31
fuente
3

Si bien es cierto que lo que sucede durante un desbordamiento del búfer tiene mucho que ver con el contexto de desarrollo en el que se produce el desbordamiento (es decir, qué idioma, qué sistema operativo e incluso qué tipo de hardware), también es un bien general. practicar para comprobar el tamaño y la sintaxis.

Me impresionaría si alguien tuviera tiempo para escribir cada uno de los idiomas que mencionas ... Conozco los caprichos de algunos de estos idiomas, pero no todos, para realmente golpearlos adecuadamente. de ellos en una sola respuesta sería un nivel impresionante de experiencia.

Puedo decir que para un lenguaje administrado, como Java y (creo que --- no es mi fuerte) .Net - estás viendo (generalmente) ramificaciones menos aterradoras que en un lenguaje más cercano al simple metal (C, C ++ ). Un desbordamiento de búfer en un lenguaje con memoria administrada debe permitir que el programa asigne la memoria a medida que la información llega y la maneja de una manera un tanto elocuente (¡hasta cierto punto!). El desbordamiento verdaderamente clásico es aquel en el que el programador no ha asignado su matriz de caracteres correctamente y los datos del desbordamiento se han filtrado a otro segmento del programa.

Dicho esto, incluso en Java un desbordamiento de búfer puede causar respuestas no deseadas. En un lenguaje administrado, podría suceder que se agote el proceso de la memoria asignada, lo que provocará ralentizaciones. Podría hacer que la máquina "no se abra" si no se ha configurado correctamente, podría producir resultados inesperados en cualquier mecanismo de persistencia de datos que esté usando el programa. Todo esto es cierto independientemente del idioma.

Una comprobación de tamaño general en las líneas del frente es simplemente una buena práctica de programación. ¿Por qué no rebotar datos erróneos antes de trabajar más duro en ello? Está ahorrando ciclos de CPU, tiempo de ejecución y memoria persistente, y está protegiendo el back-end. La seguridad en capas es solo un buen camino por recorrer.

    
respondido por el bethlakshmi 16.12.2011 - 22:50
fuente
1

Siempre validé todo simplemente porque detecté una entrada no válida y mostré un error agradable que intentar soltar la guerra y la paz en una varchar (200) y ver cómo las cosas se vuelven difíciles para el usuario final.

En cuanto a agujeros de seguridad? Por lo general, no, porque como se dijo, eso está fuera del ámbito de las secuencias de comandos (construcciones de lenguaje de bajo nivel), sin embargo, apuesto a que existen circunstancias en las que podría obtener una aplicación para recortar datos, romper el DOM y permitir una posible inyección (completamente desactivada la parte superior de mi cabeza, sin embargo) y muchas otras formas difíciles de utilizar la falta de restricciones de longitud para su beneficio.

    
respondido por el StrangeWill 16.12.2011 - 19:34
fuente

Lea otras preguntas en las etiquetas