Supongamos que tiene un sitio web y está utilizando algún parámetro returnUrl
URL para redirigir al usuario a la página donde estaba después de iniciar sesión o editar algunos registros en el área de usuario. ¿Hay alguna forma estándar de verificar si el returnUrl
está ubicado en el mismo servidor que la aplicación web?
Hasta ahora me he dado cuenta de que hay dos maneras en que Atacker puede redirigir al usuario a otra parte y se pueden realizar las siguientes acciones para prevenir estos ataques:
- Attacker suministra la URL completa en el parámetro (http://evil.com/): aquí es posible verificar si el parámetro contiene
http(s)://
oftp://
- El navegador agrega automáticamente el protocolo si falta, por lo que el atacante puede proporcionar algo como
//evil.com
o//numeric_ip_address
y también redirigirá al usuario fuera del servidor.
¿Hay otras formas de codificar la dirección URL? ¿Puedo estar seguro de que el parámetro no se puede usar mal si reviso solo los dos casos anteriores?