psecio / iniscan
评估 php.ini 安全性的扫描器
Requires
- php: >=5.5.9
- symfony/console: ~3.0.2
Requires (Dev)
- phpunit/phpunit: 4.2.*
README
Iniscan 是一个用于扫描给定 php.ini 文件以检查常见安全实践并返回结果的工具。目前,它只能用于命令行,并将每个测试的通过和失败结果报告回显示。
安装
使用 Composer
composer require psecio/iniscan
当前唯一的依赖项是 Symfony 控制台。
全局 Composer 安装
此外,您还可以使用 Composer 提供的 global
功能在项目外部安装它。从任何目录都可以使用
$ ./composer.phar global require psecio/iniscan
$ ~/.composer/vendor/bin/iniscan
使用单个 Phar 文件
首先确保您运行了 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
命令将根据结果返回一个退出码
- 0:没有错误
- 1:找到失败
扫描级别阈值
您可以请求仅扫描高于或等于阈值的规则
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
the 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
在这种情况下,我们已告知它我们正在运行开发环境,因此不会执行任何特别提及“生产”的内容。
已弃用的报告
当扫描器运行时,它会将配置键与已弃用项目的列表进行比较。如果版本号等于或高于规则中定义的版本,输出中将显示错误。例如,在控制台中,你会看到
WARNING: deprecated configuration items found:
-> register_globals
It's recommended that these settings be removed as they will be removed from future PHP versions.
这是默认行为,无需启用。
@作者 Chris Cornutt ccornutt@phpdeveloper.org