¿Es seguro colocar cadenas controladas por el usuario en un encabezado de ubicación HTTP?

3

Estoy pensando en agregar acortamiento de URL a mi sitio.

Digamos que mi base de datos ya ha almacenado url como una cadena simple, esta información fue proporcionada por el usuario y es arbitraria.

Por lo tanto, una implementación ingenua en PHP podría verse un poco como esta

$url = lookup_url ($_POST['url_id']);
if (null !== $url)
{
     header ("Location: ".encode_url($url));
     exit ();
}

con un encode_url adecuado para garantizar los datos proporcionados por el usuario se limitan al encabezado Location y no se filtran en el resto de la respuesta HTTP ni se insertan en la base de datos o lo que sea.

¿Existe alguna vulnerabilidad de seguridad al redireccionar a una URL arbitraria suministrada por el usuario?

EDIT para aclarar, en respuesta a la observación sensata de @ UTF-8: asuma que el usuario no interactúa directamente con la página a la que está redirigido. ¿Puede un atacante romper mi seguridad si el usuario sigue el enlace y no hace nada más?

    
pregunta spraff 15.10.2016 - 16:48
fuente

1 respuesta

2

No, esto no es seguro. Es peligroso.

Un phisher puede enviar un correo electrónico a sus usuarios y hacer que hagan clic en un enlace que lleva a https://yourwebsite.com/something/something/script.php?someVariable=doesntMatterBecaucseItWontBeRead&someOtherVariable=onlyDesignedToMakeTheUrlLonger&url=https%3A%2F%2Fyourwebsitec.om%2Fsomethinng%2Fsomething%2Fi%2Fdont%2Fcare

Los usuarios no leerán ni entenderán esa URL. Solo lo examinarán rápidamente, en el mejor de los casos, y verán que lleva a https://yourwebsite.com , por lo que todo es bueno en sus opiniones. Entonces, hay un montón de relleno que a nadie le importa. Al final, se define la variable de obtención url , comenzando con https%3A%2F%2Fyourwebsitec.om que está codificado en url y cuando se decodifica es https://yourwebsitec.om . Observe que la terminación de TLD es .om , no .com . .om es el TLD que termina en Omán y se usa mucho para phishing (o al menos esa es mi impresión personal).

El phisher puede simplemente hacer que el sitio web al que se redirige al usuario se vea como el suyo y luego obtener su información de inicio de sesión u otros datos personales.

    
respondido por el UTF-8 15.10.2016 - 23:22
fuente

Lea otras preguntas en las etiquetas