背景
在 PHP 安全測試中最單調乏味的任務之一就是檢查不安全的 PHP 配置項。作為一名 PHP 安全海報的繼承者,我們建立了一個指令碼用來幫助系統管理員如同安全專家一樣儘可能快速且全面地評估 php.ini 和相關主題的狀態。在下文中,該指令碼被稱作“PHP 安全配置項檢查器”,或者 pcc。
概念
- 一個便於分發的單檔案
- 有對每個安全相關的 ini 條目的簡單測試
- 包含一些其他測試 - 但不太複雜
- 相容 PHP >= 5.4, 或者 >= 5.0
- 沒有複雜/過度設計的程式碼,例如沒有類/介面,測試框架,類庫等等。它應該第一眼看上去是顯而易見的-甚至對於新手-這個工具怎麼使用能用來做什麼。
- 沒有(或者少量的)依賴
使用 / 安裝
-
CLI:簡單呼叫
php phpconfigcheck.php
。然後,新增引數-a
以便更好的檢視隱藏結果,-h
以 HTML 格式輸出,-j
以 JSON 格式輸出. -
WEB: 複製這個指令碼檔案到你的伺服器上的任意一個可訪問目錄,比如 root 目錄。參見下面的“防護措施”。
在非 CLI 模式下預設輸出 HTML 格式。可以通過修改設定環境變數
PCC_OUTPUT_TYPE=text
或者PCC_OUTPUT_TYPE=json
改變這個行為。一些測試用例預設是被隱藏的,特別是skipped、ok和 unknown/untested這些。要顯示全部結果,可以用
phpconfigcheck.php?showall=1
,但這並不適用於 JSON 輸出,它預設返回全部結果。 在 WEB 模式下控制輸出格式用phpconfigcheck.php?format=...
,format
的值可以是text
,html
或者json
中的一個,例如:phpconfigcheck.php?format=text
。format
引數優先於 PCC_OUTPUT_TYPE。
保障措施
大多數情況下,最好是自己來關注與安全性相關的問題比如PHP的配置。指令碼已實現下列保障措施:
-
mtime檢查:指令碼在非CLI環境中只能工作兩天。可以通過
touch phpconfigcheck.php
或者將指令碼檔案再次複製到你的伺服器(例如通過SCP)來重新進行mtime檢查。可以通過設定環境量:PCC_DISABLE_MTIME=1
,比如在apache的.htaccess
檔案中設定SetEnv PCC_DISABLE_MTIME 1
來禁用mtime檢查。 -
來源IP檢查:預設情況下,只有localhost (127.0.0.1 和 ::1)才能訪問這個指令碼。其他主機可以通過在
PCC_ALLOW_IP
中新增IP地址或者萬用字元表示式的方式來訪問指令碼,比如在.htaccess
檔案中設定SetEnv PCC_ALLOW_IP 10.0.0.*
。你還可以選擇通過SSH埠轉發訪問您的web伺服器, 比如ssh -D
或者ssh -L
。
下載
可以通過github下載第一個完整的開發版: github.com/sektioneins…
如果有好的建議或者遇到bug請給我們提issue:
截圖
HTML輸出的列表是根據問題嚴重性排序的,通過顏色程式碼的形式列出了所有建議。列表頂部的狀態行會顯示問題的數量。
注意
這個工具只能用來支援你搭建一個安全的PHP環境,做不了其他事。你的設定、軟體或任何相關的配置可能仍然是脆弱的,即使該工具的輸出表明情況並非如此。