阻止从JSP访问WEB-INF

时间:2016-03-16 22:08:38

标签: java jsp servlets web-inf directory-traversal

我正在我们的某个服务器上处理一些安全警报,其中一个文件下载' JSP文件能够让用户下载Web应用程序的WEB-INF内容(位于站点的根文件夹中)。这是一个非常简单的文件,写于2007年,它在未经过消毒的输入上使用java.io.FileInputStream将文件返回给用户。

警报实际上声称这是一个目录遍历问题,它以一种方式,因为以下URI将为用户下载web.xml:

http://domain.com/filedownload.jsp?filename=../../WEB-INF/web.xml&filepath=some/directory/

现在很明显,'目录遍历'部分应该通过用户输入清理来纠正(这个脚本还没有这个)。但是,以下URI也会将web.xml传递给用户,但是对于目录遍历的输入清理在这里没有帮助,除非清理检查' WEB-INF'和其他非法的'目录...

http://domain.com/filedownload.jsp?filename=web.xml&filepath=WEB-INF/

是否有一种标准化的方法可以在常见的servlet容器中阻止这种情况,还是需要由代码开发人员完全管理?我注意到Java' normalize()'函数不会从用户输入中删除此目录。

我试图为此寻找答案,但我能找到的所有信息都是关于阻止“服务”的信息。直接使用WEB-INF,但没有阻止从JSP文件本身访问它。

谢谢,

...汤姆

1 个答案:

答案 0 :(得分:1)

你说JSP页面使用java.io.FileInputStream来读取文件。这是一个标准的Java类,它不知道它在servlet容器中运行的事实。

因此,java.io.FileInputStream将能够访问运行servlet容器(JVM)的用户进程可以访问的任何文件。您无法在servlet容器中配置任何内容来阻止这种情况。

您可能希望确保无法访问与servlet容器完全无关的文件系统其他区域中的文件,例如:喜欢" / etc / passwd"。

假设您在Linux上运行,此URL的作用是什么:

http://domain.com/filedownload.jsp?filename=passwd&filepath=/etc/

如果它确实返回了文件,那么你就会遇到更严重的问题!也许创建警报的安全软件(不确定您正在使用什么?)会阻止下载。如果没有,只要Web服务器不在root或其他特权帐户下运行,操作系统文件权限就会有所帮助,但这只是短期紧急修复。

所以不,在常见的servlet容器中没有标准化的方法来阻止它,是的,它确实需要由代码的开发者完全管理。

使用java.io.FileInputStream时,JSP页面的编写者/维护者有责任确保只访问有效路径。