Mi página de inicio de sesión acepta el parámetro "retorno", que debe contener un URI para redirigir al usuario si no inició sesión y trató de acceder a la página a la que no pueden acceder usuarios no autenticados. Podría ser cualquier cosa de mi sitio.
¿Cómo verifico correctamente ese parámetro en el código de mi servidor, antes de devolver el estado HTTP 302 con ese URI al usuario después de que se haya autenticado correctamente en la página de inicio de sesión?
¿Es suficiente comprobar que uri[0] == '/' && uri[1] != '/'
(por lo que un usuario malintencionado no envía una solicitud como /login?return=http://google.com
)?
¿Puede un usuario malintencionado construir un uri complicado que enviará al usuario víctima a problemas? Por supuesto, asumo que otras páginas no contienen vulnerabilidades de XSS, la solicitud GET no cambia nada en la base de datos, etc.
Si un usuario malintencionado puede engañar a la víctima para que haga clic en su enlace y el usuario víctima ya haya iniciado sesión, ocurrirán cosas de todos modos y no puedo hacer nada para evitar eso, excepto implementar medidas de seguridad conocidas, como la protección CSRF, etc. .