1)request.getServletPath()
可以返回/testfolder/../testfolder/file.txt
之类的任何路径,或者此路径是否保证为规范化,从而转换为类似/testfolder/file.txt
的内容?
我问的原因是因为我想知道这条路径是否可以轻松用于访问控制。例如,当普通用户无法访问以/admin/
开头的路径时,可以使用某些相对路径(如/images/../admin/secretinfo.txt
)来规避此控制。
请注意:在联系服务器之前,浏览器会将任何路径转换为绝对规范化路径,但假设发送相对路径的其他恶意客户端可能会用于攻击。
2)此外,在执行此类简单的字符串验证访问控制时,是否还应考虑其他与Servlet Path相关的安全问题?
答案 0 :(得分:4)
Servlet规范尚不清楚。针对Servlet规范有一个open issue。
规范强烈建议将其规范化,但对于与安全相关的应用程序,我不会依赖于此并且将通过规范化过程运行它以确保安全。关于这个话题,我建议不要自己动手,建议你重复使用Tomcat's normalization code之类的。
答案 1 :(得分:3)
从技术上讲,这不是servletcontainer的关注点。这是网络服务器的关注点。一个体面的网络服务器会在命中servlet容器之前将其规范化。它有,以便找到合适的资源。
Servlet API无法保证这一点。这一切都取决于网络服务器。但是,如果这样的网络服务器存在,那将意味着主要的安全漏洞(想想安全约束URL模式匹配等等,否则很容易被这种方式规避)。