【问题标题】:Preventing access to WEB-INF from JSP防止从 JSP 访问 WEB-INF
【发布时间】: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


【解决方案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 页面的编写者/维护者有责任确保仅访问有效路径。

【讨论】:

  • 这正是我正在寻找的答案。在我告诉开发人员“修复你该死的代码!”之前,我想确定这一点。 :) 谢谢!
猜你喜欢
  • 1970-01-01
  • 2014-06-05
  • 1970-01-01
  • 2014-08-17
  • 2015-01-23
  • 2014-12-15
  • 2012-03-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多