request.getServletPath()返回的Servlet路径是否保证规范化?

时间:2016-05-04 01:56:47

标签: java security servlets

1)request.getServletPath()可以返回/testfolder/../testfolder/file.txt之类的任何路径,或者此路径是否保证为规范化,从而转换为类似/testfolder/file.txt的内容?

我问的原因是因为我想知道这条路径是否可以轻松用于访问控制。例如,当普通用户无法访问以/admin/开头的路径时,可以使用某些相对路径(如/images/../admin/secretinfo.txt)来规避此控制。

请注意:在联系服务器之前,浏览器会将任何路径转换为绝对规范化路径,但假设发送相对路径的其他恶意客户端可能会用于攻击。

2)此外,在执行此类简单的字符串验证访问控制时,是否还应考虑其他与Servlet Path相关的安全问题?

2 个答案:

答案 0 :(得分:4)

Servlet规范尚不清楚。针对Servlet规范有一个open issue

规范强烈建议将其规范化,但对于与安全相关的应用程序,我不会依赖于此并且将通过规范化过程运行它以确保安全。关于这个话题,我建议不要自己动手,建议你重复使用Tomcat's normalization code之类的。

答案 1 :(得分:3)

从技术上讲,这不是servletcontainer的关注点。这是网络服务器的关注点。一个体面的网络服务器会在命中servlet容器之前将其规范化。它,以便找到合适的资源。

Servlet API无法保证这一点。这一切都取决于网络服务器。但是,如果这样的网络服务器存在,那将意味着主要的安全漏洞(想想安全约束URL模式匹配等等,否则很容易被这种方式规避)。