Apache 安全 - 列出所有可能的處理程序/操作
為了確保不存在可以通過 .htaccess 被利用的安全漏洞,我們如何才能看到 Apache 可以通過 和 等指令使用的所有可能的處理
SetHanlder
程序AddHandler
。我知道我可以通過查看 mod_info 的輸出或通過 conf 文件 grepping 找到一些(這是我在嘗試找到此問題的答案時發現的一種方法),但這並不意味著沒有可用的處理程序不是這樣列出的。我想我可以下載並蒐索 Apache 的所有原始碼以及載入的每個模組並查看它們正在註冊的內容,但是有更好的方法嗎?
一個快速的解決方法是在 .htaccess 中不允許 AddHandler 和 SetHandler,但這有其缺點。例如,Drupal 有一個有效的 SetHandler 指令案例,因為它使用它作為深度防禦的一部分,以防止 PHP 腳本執行,如果有人設法通過文件上傳器將它們上傳到站點。
以下是我所指的一些範例:
AddHandler server-parsed .shtml SetHandler server-info AddHandler application/x-httpd-php5 .php
如果有人感興趣,這裡是來自 sites/default/files/.htaccess 的 Drupal 案例:
# Set the catch-all handler to prevent scripts from being executed. SetHandler Drupal_Security_Do_Not_Remove_See_SA_2006_006 <Files *> # Override the handler again if we're run later in the evaluation list. SetHandler Drupal_Security_Do_Not_Remove_See_SA_2013_003 </Files>
編輯 2015 年 7 月 30 日:這不是一個詳盡的答案,但如果它對任何人都有幫助,我發現一些處理程序列在http://httpd.apache.org/docs/2.4/handler.html的頂部並且還閱讀了可以通過 Action 指令創建自定義處理程序(請參閱http://httpd.apache.org/docs/2.4/mod/mod_actions.html#action)。
編輯 2015 年 9 月 1 日:我想知道是否有某種方法可以轉儲 httpd 程序的記憶體並在其中找到處理程序名稱。我使用 gcore 進行了嘗試,但沒有成功(儘管我以前從未使用過它並且在執行此操作時收到警告,所以我不確定我是否做錯了什麼)。
不可能,對不起。根據我在The Apache Modules Guide上的聲明:
因此,伺服器本身並不假定知道哪個模組負責處理特定請求,而是會詢問每個模組是否對給定請求感興趣。然後由每個模組決定是否溫和地拒絕服務請求、接受服務或完全拒絕服務請求,就像身份驗證/授權模組所做的那樣
根據設計,這一切都是在請求時處理的,因此您無法遍歷模組或以其他方式解決此問題。您必須閱讀每個模組的原始碼以了解它們的處理程序名稱。
最好的辦法是自己製作一個模組,根據一組接受的處理程序名稱檢查目前為請求設置的處理程序,如果列表中不存在,則將其更改為預設值。