【发布时间】:2016-07-03 01:17:27
【问题描述】:
我正在我们的一台服务器上处理一些安全警报,据此“文件下载”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 文件本身访问它的信息。
谢谢,
汤姆...
【问题讨论】:
-
消毒不是正确的方法,IMO。主要问题是您不应该让用户指定文件名,更不用说文件路径。让他们只选择存储在数据库行中的某个 ID,例如包含文件的实际路径。或者至少,只让他们指定一个文件名,然后在服务器上定义明确的基目录中查找该文件。
-
这是旧代码,他们不会重新设计新的解决方案来解决此问题,因为该网站将在某个时候消失。但是他们需要在现有代码中减轻这个错误。我同意他们不应该让用户指定文件。它不是为用户输入而设计的,但我相信它是用来生成下载链接的,尽管效果非常糟糕......
标签: java jsp servlets web-inf directory-traversal