Iniscan 是一個工具,旨在掃描給定的 php.ini 檔案以了解常見的安全實踐並報告結果。目前,它僅適用於命令行,並將每次測試的通過和失敗結果報告回顯示器。
composer require psecio/iniscan
目前唯一的相依性是 Symfony 控制台。
此外,您還可以使用 Composer 提供的global
功能將其安裝在專案之外。您可以從任何目錄使用:
$ ./composer.phar global require psecio/iniscan
$ ~/.composer/vendor/bin/iniscan
首先確保運行composer.phar install
curl -LSs https://box-project.github.io/box2/installer.php | php
php box.phar build
這應該會導致在根資料夾中建立 iniscan.phar 檔案。在範例中不要使用vendor/bin/iniscan
而是使用./iniscan.phar
。
vendor/bin/iniscan scan --path=/path/to/php.ini
Results for /private/etc/php.ini:
============
Status | Severity | PHP Version | Key | Description
----------------------------------------------------------------------
PASS | ERROR | | session.use_cookies | Accepts cookies to manage sessions
PASS | ERROR | 4.3.0 | session.use_only_cookies | Must use cookies to manage sessions, don't accept session-ids in a link
1 passing
2 failure(s)
注意:當掃描運行時,如果在給定的
php.ini
中找不到設置,它將使用 ini_get 提取當前設定(可能是預設)。
Iniscan提供了一些指令來檢查和顯示 php.ini 的內容。
scan
命令將是最常用的 - 它針對給定的 ini 檔案執行規則檢查並報告結果。例如:
vendor/bin/iniscan scan --path=/path/to/php.ini
如果省略路徑, iniscan將嘗試根據目前配置(“php -i”呼叫)找到它。預設情況下,這會報告檢查的通過和失敗結果。如果您只想返回失敗,可以使用fail-only
參數:
vendor/bin/iniscan scan --path=/path/to/php.ini --fail-only
scan
命令將根據結果返回退出代碼:
您可以請求對等於或高於閾值的規則進行唯一掃描:
vendor/bin/iniscan scan --path=/path/to/php.ini --threshold=ERROR
您可以使用 3 個等級:
show
指令列出了php.ini
檔案的內容,並帶有一些額外的格式。
vendor/bin/iniscan show --path=/path/to/php.ini
list-tests
指令顯示目前正在檢查的規則及其相關 php.ini 金鑰的清單。
vendor/bin/iniscan list-tests
預設情況下, iniscan將以人類可讀的結果直接將資訊輸出到控制台。您也可以指定其他更容易以程式方式解析的輸出格式(例如 JSON)。使用--format
選項更改輸出:
vendor/bin/iniscan show --path=/path/to/php.ini --format=json
list-tests
指令也支援 JSON 輸出:
vendor/bin/iniscan list-tests --path=/path/to/php.ini --format=json
注意:目前,只有scan
指令支援備用輸出格式 - 控制台、JSON、XML 和 HTML。
HTML 輸出選項需要目錄的--output
選項來寫入檔案:
vendor/bin/iniscan scan --format=html --output=/var/www/output
結果將寫入一個名為iniscan-output-20131212.html
的文件
掃描器還支援「上下文」的概念display_errors
您可能在其中執行掃描器的環境。然而,在生產中,這是一個壞主意。掃描器的預設值假設您在產品中使用它,因此它會使用最嚴格的檢查,除非您另有說明。為此,請使用context
命令列選項:
vendor/bin/iniscan show --path=/path/to/php.ini --context=dev
在這種情況下,我們已經告訴它我們正在開發中運行,因此任何特別提到“prod”的內容都不會被執行。
當掃描程式運行時,它會將配置金鑰與已棄用項目的清單進行比較。如果版本等於或晚於規則中定義的版本,則輸出中將顯示錯誤。例如,在控制台中,您會看到:
WARNING: deprecated configuration items found:
-> register_globals
It's recommended that these settings be removed as they will be removed from future PHP versions.
這是預設行為,不需要啟用。
@作者克里斯·科納特 [email protected]