[PHP 安全] pcc —— PHP 安全配置检测工具
背景
在 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下载第一个完整的开发版: https://github.com/sektioneins/pcc
如果有好的建议或者遇到bug请给我们提issue:
截图
HTML输出的列表是根据问题严重性排序的,通过颜色代码的形式列出了所有建议。列表顶部的状态行会显示问题的数量。