可以依赖 Apache 清理 URL 吗?

可以依赖 Apache 清理 URL 吗?

mod_wsgi我使用默认安装来设置 Apache ,并安装了一个非常简单的测试应用程序test.wsgi,如下所示:

def application(environ, start_response):
    status = '200 OK'
    output = 'Path: %s' % environ['PATH_INFO']
    response_headers = [('Content-type', 'text/plain'),
                        ('Content-Length', str(len(output)))]
    start_response(status, response_headers)
    return [output]

Apache 本身基本上是这样配置的:

WSGIScriptAlias / /home/user/wsgi_test/test.wsgi

现在,如果我访问该服务器上的 URL,我会得到以下输出:

  • GET /test/../test/./test=>Path: /test/test
  • GET /test/%2E%2E/abc=>Path: /abc
  • GET /test%2fabc=> 404 Not found(我猜是因为AllowEncodedSlashes off

因此在我看来,Apache 在将这些 URL 传递给应用程序之前会解析/预处理它们,这很好,因为它可以防止大量本地文件包含和目录遍历攻击,其中文件路径不是查询字符串的一部分。

我们可以依赖这种行为吗?或者是否存在一些卑鄙的方法可以欺骗 Apache 实际将 URL 传递/test/foo/../bar给应用程序?如果可能的话,这会是 Apache 错误吗?

答案1

安全指南“纵深防御”建议您应配置 Apache 来预处理路径,但您自己也应该防范危险路径。

由于您可能对有效路径的样子有更多了解,所以您应该能够提出更严格的测试,而且比 Apache 通常可以做的任何事情都更容易正确完成。

相关内容