Hace aproximadamente un mes estaba en medio de una de mis clases de "Aplicaciones distribuidas" y el profesor nos estaba explicando cómo "" "" "" "" autentificar correctamente a los usuarios en un servidor.
Para demostrar cómo evitar que los usuarios accedan a todos los archivos en un directorio determinado (es decir, con el nombre "privado"), el profesor nos mostró un código JSP que era similar al siguiente pseudocódigo:
String URI = uri.getRequest();
if (URI.contains("/private/") {
if (userIsAuthenticated()) grantAccess();
else redirectToLogInPage();
}
Por supuesto, me di cuenta de lo que estaba mal allí y de lo que podría ser una falla de seguridad. Si un usuario solicita una URL como mysite.com/private%2Fmypage
, el URI no contendría la cadena literal "/ private /" para que se le otorgue acceso al usuario.
Ayer recordé esa clase, así que, como tenía curiosidad, me di cuenta de que no solo todos mis proyectos web anteriores en Uni tenían esta vulnerabilidad, sino que incluso algunos sitios web de empresas serias también tienen este problema. Puede acceder a una gran cantidad de páginas donde no debería poder hacerlo (básicamente, páginas de perfil de usuario cuando no ha iniciado sesión), solo con el porcentaje de codificación de algún carácter en la URL.
Entonces, cuando me di cuenta de que hay muchas personas que no se preocupan demasiado por este tema, estoy un poco confundido. ¿No es un gran defecto? ¿Qué podrían ser algunos ataques que podrían hacerse aprovechando este problema? Simplemente me gustaría saber, desde un punto de vista teórico, si es posible, qué tan grave podría ser este problema para un sitio que no administra la codificación url correctamente.
P.S: Sé que una solución plausible podría ser también verificar si la URL solicitada está codificada en porcentaje y negarle el acceso. O incluso si quisiéramos ir más allá e implementar una solución más segura, podríamos usar un Centro de distribución de claves como Kerberos. Sin embargo, no entiendo por qué puedes encontrar sitios web serios con este defecto y no les parece un gran problema.