2011-06-08 20 views
5

Tengo un área de miembros en mi sitio donde si un usuario no inicia sesión, se redirigen a la URL de inicio de sesión con? Redirect = [CURRENT_URL] y se les redirige a [CURRENT_URL] una vez que inician sesión correctamente.¿Cuáles son las preocupaciones de seguridad con la redirección de un usuario después de iniciar sesión en una url proporcionada en el formulario de inicio de sesión?

¿Cuáles son los posibles problemas de seguridad con este enfoque, cómo prevenirlos y cuáles son las alternativas?

p. Ej. un usuario malintencionado puede vincular mi sitio con un enlace de redireccionamiento a otro sitio, ¿ese otro sitio podría robar la cookie de inicio de sesión de mi usuario? ¿Es posible ejecutar javascript arbitrario en mi sitio con este enfoque?

Respuesta

2

Si url actual no está elaborada, puede estar sujeto a

  • XSS (galletas que roban, inyectando guiones)
  • encabezado de respuesta Dividir

etc

Si saber que la URL actual es una constante y NO tiene parámetros, no es tan arriesgada. Tan pronto como agregue parámetros o cree la url según la entrada del usuario, se producirán problemas.

Un ejemplo trivial de XSS:

Digamos que su URL puede tener una cadena de consulta se inyecta a través de la entrada del usuario. Entonces lo que les impide decir

redirectUrl = "yoursite.jsp somevariable =?" Alerta ('malware') "); o redirectUrl ="? Yoursite.jsp somevariable = "alerta (document.cookies)");

Y robando las cookies o ejecutando otras secuencias de comandos malvadas de java.

La división de la respuesta es más complicada. Básicamente, si puedes inyectar un CRLF, puedes hacer cosas muy locas.

Wikipedia tiene una explicación decente de esta vulnerabilidad; hay otras que puede encontrar buscando en Google para la división de respuestas http.

He omitido el ataque más obvio que es si el usuario puede controlar la url que puede ir a un sitio que PARECE como el suyo y convencer al usuario de ingresar tarjetas de crédito, credenciales etc. Por ejemplo, si usted es un banco y alguien puede inyectar

redirectUrl = "http://myfakebank.com"

y copias de su página, Gosh, el usuario estará feliz de decir "Claro, voy a reeenter mis credenciales"

+0

Gracias , MJB. ¿Podrías ser un poco más específico? y ¿cuáles son las cosas que puedo hacer para evitar este tipo de ataques XSS o división de encabezados? –

+0

La mejor cura es, por supuesto, no permitir la entrada proporcionada por el usuario. En su defecto, la validación de entrada y salida es muy importante. No permita cosas como & =% # < > '". En general, prefiera una estrategia WHITELIST: solo se deben permitir los caracteres que DEBEN ser permitidos. Sin embargo, esto es difícil de aplicar en un real - situación mundial con las URL, debido a que algunos de estos caracteres deben aplicarse. En este caso, las bibliotecas de verificación y canonización de URL son útiles. Se recomienda especialmente leer la información de http://www.owasp.org sobre división de respuestas, XSS y CSRF – MJB

Cuestiones relacionadas