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]