Apache-2.2

可以依賴 Apache 清理 URL 嗎?

  • February 20, 2012

我在預設安裝中設置了 Apache mod_wsgi,使用了一個非常簡單的測試應用程序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 錯誤嗎?

安全指南“深度防禦”建議您應該將 Apache 配置為預處理路徑,但您也應該自己防範危險路徑。

由於您可能對有效路徑的外觀有更多了解,因此您應該能夠提出更多限制性測試,這也比 Apache 通常可以做的任何事情都更容易正確。

引用自:https://serverfault.com/questions/361704