Apache-2.2
可以依賴 Apache 清理 URL 嗎?
我在預設安裝中設置了 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 通常可以做的任何事情都更容易正確。