Pregunta

Estoy desarrollando una aplicación, y las direcciones Url en el formato www.example.com/some_url/some_parameter/some_keyword.Sé que por el diseño que hay una longitud máxima de que estas URLs tendrá (y sigue siendo válido).Debo validar la longitud de la dirección URL con cada pedido, con el fin de proteger contra desbordamiento de búfer/ataques de inyección?Creo que esto no es obvio que sí, pero yo no soy un experto en seguridad, así que quizás me falta algo.

¿Fue útil?

Solución

Si usted no está esperando que de entrada, la rechazan.

Siempre debe validar sus entradas, y sin duda descartar nada fuera del rango esperado.Si usted ya sabe que su URL honestamente no será más allá de una cierta longitud, a continuación, rechazarlo, antes de que llegue a la aplicación parece sabio.

Otros consejos

La defensa en profundidad es un buen principio.Pero las falsas medidas de seguridad son un mal principio.La diferencia depende de un montón de detalles.

Si estás realmente seguro de que cualquier URL de más de N no es válido, entonces usted puede rechazar.Pero si es cierto, y si el resto de su entrada de validación es correcta, entonces será rechazada más tarde de todos modos.Así que todo esta comprobación no es, potencialmente, tal vez, mitigar el daño causado por algún que otro error en el código.Lo mejor para pasar el tiempo pensando en cómo evitar esos errores, que pensar acerca de lo que N puede ser.

Si usted no comprobar la longitud, entonces es mejor no depender de este límite de longitud en el resto del código.Haciendo que las parejas de los diferentes controles más estrechamente juntos, y hace que sea más difícil para cambiar el límite en la próxima versión, si cambia la especificación y la necesidad de aceptar más de una dirección Url.Por ejemplo, si el límite de longitud se convierte en una excusa para poner la Url en la pila sin el debido cuidado y atención, entonces puede ser que usted ajuste a alguien de una caída.

¿cómo estás tan seguro de que todos URL de más de N no es válido?Si usted puede estar seguro, entonces no debería afectar a limitar simplemente como una comprobación de validez, pero no dejes que esto te engañe en el pensamiento de que ha impedido una clase de explotar.

La única cosa que puedo ver que podría causar problemas es que aunque hoy en día su URL nunca superará N, usted no puede garantizar que eso no será siempre el caso.Y en un año, cuando vuelva a hacer una edición para permitir una url a N+y en la longitud, usted puede olvidarse de modificar la url de código de rechazo.

Siempre vas a ser mejor que la verificación de los parámetros de URL antes de usarlos.

Safari, Internet Explorer, Firefox y todos tienen diferentes max longitudes de que acepta.

Mi voto es para ir a por el más corto de los tres.

http://www.boutell.com/newfaq/misc/urllength.html

Sacó de enlace -

"Microsoft Internet Explorer (El Navegador) - 2083 caracteres

Firefox (Navegador) - Después de 65.536 caracteres, la ubicación de la barra ya no muestra la dirección URL en Windows Firefox 1.5.x.Sin embargo, ya la Url trabajo.Dejé de pruebas después de 100.000 caracteres.

Safari (Navegador) - Al menos 80.000 caracteres va a funcionar."

Creo que esto puede dar un mínimo de seguridad y puede ahorrar un poco de ancho de banda si la gente no los envíe loco direcciones Url largas, pero en gran medida sólo debe validar sus datos en la aplicación.Múltiples niveles de seguridad son por lo general mejor, pero no cometa el error de pensar que porque usted tiene un (débil) de salvaguardia en el principio de que no tendrá problemas con el resto.

Yo diría que no.Es sólo una falsa seguridad.Sólo programa y comprobar sus peticiones de cosas malas.Debería ser suficiente.

Además, no es a prueba de futuro.

Sí.Si es demasiado largo y está seguro de que al rechazar tan pronto como sea posible.Si usted puede, a rechazar antes de que llegue a su aplicación (por ejemplo IISLockdown va a hacer esto).

Recuerde tener en cuenta para la codificación de caracteres, aunque.

Mejor que la comprobación de longitud, creo que se debe comprobar el contenido.Nunca se sabe cómo va a utilizar su esquema de URL en el futuro, pero siempre se puede desinfectar sus entradas.Poner una muy complejo cosa muy simple:No confíe en datos proporcionados por el usuario.No la pongas directamente en la bd consultas, no eval (), no dar nada por sentado.

Si usted sabe válido de direcciones Url no puede ser más N bytes, a continuación, suena como una buena forma rápida de rechazar cross-site-scripting intentos sin demasiado esfuerzo.

Es mejor para validar lo que es en la solicitud de validar la longitud de la dirección URL.

Sus necesidades pueden cambiar en el futuro, momento en el que tendrás que eliminar o cambiar la longitud de la dirección URL de validación, la posibilidad de introducir errores.

Si termina como una probada de vulnerabilidad de seguridad, entonces usted puede implementarla.

Ok, supongamos que un N existe.Como onebyone señalado, una dirección URL con formato incorrecto que es más de N caracteres serán rechazados por otros validación de entrada de todos modos.Sin embargo, en mis ojos, esto abre todo un nuevo cosa que pensar:

El uso de esta constante, puede validar su otra validación.Si el otro validaciones han sido incapaces de detectar una cierta dirección URL no válida, sin embargo, la URL tiene más de N caracteres, entonces este URL provoca un error y debe ser registrado (y tal vez de toda la aplicación debe cerrarse, ya que podrían crear una dirección URL no válida que es lo suficientemente corto).

Oh mi, un montón de respuestas, un montón de buenos puntos, muy extendida, aunque, así que permítanme intento de consolidar todo esto. tl;dr omi, este es el nivel demasiado bajo de una preocupación por la capa de aplicación del código.

Sí, la URL podría ser de cualquier de longitud, pero en la práctica los navegadores tienen un límite.Por supuesto, sin embargo, que sólo te protege de los ataques basados en navegador de personas dispuestas a limitar a ellos mismos, a los vectores, por lo que usted necesita alguna forma de manejo de los activos intentos de ataques.

Ok, se puede proteger contra desbordamientos de búfer.Bueno, sólo si está trabajando en un nivel bajo y no pensar en tales preocupaciones.La mayoría de los idiomas en estos días de apoyo a las cadenas bastante bien y no va a dejar que acaba de desbordamiento.Si se tratara de algunos muy bajo nivel de sistema, en realidad la lectura de los datos como el número de bytes y ponerlo en una 'cadena' de tipo, entonces seguro, usted debe tener alguna forma de detectar y manejar esto, pero no es difícil asignar memoria, y la transferencia de cantidades conocidas en un momento, realizar un seguimiento de la cantidad de memoria que dejar de lado.Francamente, si usted está tratando con que baja el nivel, usted realmente debe utilizar algo más.

Ok bien, ¿qué acaba de rechazar basado en la longitud de la cadena?La mayor atracción de regreso a esto es la posibilidad de un falso sentido de seguridad.Es decir, algunos aspectos del código que podría conseguir que 'descuidado' y ser más vulnerables a la muy explota usted está tratando de evitar.Claramente tiene que tener cuidado para asegurarse de que este 'global' límite en realidad es suficiente, pero teniendo en cuenta su formato de URI, usted podría ser capaz de tener esas "partes" se informe cuál es su longitud máxima es central y la comprobación de la longitud (para toda la cadena, y los componentes de la misma);al menos de esta manera, si una parte de las necesidades para permitir una cadena más larga, es más fácil de manejar el cambio.

Este es, por supuesto, tiene algunas ventajas, por un lado, es muy rápido para ser capaz de comparar la longitud de una cadena y rechazar la solicitud de inmediato...pero no te olvides de ser un "bien comportado" sitio usted debe enviar una respuesta adecuada que explique por qué el servidor es el rechazo de este.En la práctica, aunque, ¿de verdad crees que van a tener que manejar que muchos de estos tipos de "equivocado" de la URL, seguramente estarían equivocados en muchas otras formas.

Por alguna razón, se sentía como diciendo ¿qué idioma que está utilizando.Lenguajes de alto nivel como Java o Python tiene algunas muy buenas bibliotecas para tratar con la web de cosas".Java le permite especificar los patrones de la URI, incluyendo el uso de expresiones regulares para que el patrón, así que si quería un nombre en la URL, usted podría tener algo como @Path("/person/(.{0..100}") para limitar el parámetro a 100 caracteres.Me sorprendería si la talla de Ruby o Python no tiene equivalente, les gusta promover a sí mismos como niza "webby' idiomas.

Por último, independientemente de la duración, hay muchos cosas que necesitará validar, no solo de la longitud.Tener que preocuparse de la longitud de la URI de causar un desbordamiento de búfer que es un nivel muy bajo de la cosa, y que tendría que ser muy genérico, es decir, la necesidad de manejar cualquier solicitud, incluso uno con un 1GB de URI potencialmente;nota me dijo 'mango' no 'aceptar un pase a la capa de aplicación', podría rechazarlo en ese bajo nivel, también el desencadenamiento de los eventos del sistema tal vez.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top