psecio/iniscan

评估 php.ini 安全性的扫描器

3.6.5 2017-02-20 15:34 UTC

This package is auto-updated.

Last update: 2024-09-15 10:56:01 UTC


README

Build Status Total Downloads

SensioLabsInsight

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

Bitdeli Badge