Actualmente estoy trabajando en una aplicación que requiere autenticación para algunas páginas. Para ser amables con nuestros usuarios, ofrecemos la posibilidad de especificar una url de redireccionamiento a la que se devuelve el usuario después de iniciar sesión.
Para evitar la vulnerabilidad de redireccionamiento abierta , queremos asegurarnos de que esta URL sea interna.
Ahora mismo hacemos lo siguiente:
- No permitir cadenas con caracteres que no sean
a-z0-9/=._-
- Antes de completar el contenido proporcionado por el usuario, antes de que el usuario proporcione el contenido, complete antes nuestra URL base completa (
https://www.example.com/
). Entonces, incluso si el usuario nos envíahttps://www.evil.com
y el paso 1 ya no lo bloquearía, terminará comoLocation: https://www.example.com/https://www.evil.com
.
Sin embargo, debido a la funcionalidad de interfaz requerida, también nos gustaría incluir #
como un carácter en la lista blanca en el paso 1.
Un ejemplo sería:
Location: https://www.example.com/totally-relative-url#magic-that-leads-to-external-redirect
.
¿Esto abre posibilidades para redireccionamientos abiertos?