psecio / parse
PHP 安全扫描器
Requires
- php: >=5.4
- nikic/php-parser: ^2.0
- symfony/console: 2.5 - 3.2
- symfony/event-dispatcher: 2.4 - 3.4
Requires (Dev)
- akamon/mockery-callable-mock: ^1.0
- codeclimate/php-test-reporter: dev-master
- mockery/mockery: ^0.9
- phpunit/phpunit: ^4.2
This package is auto-updated.
Last update: 2024-09-15 10:08:21 UTC
README
请注意:此工具仍处于非常初级的阶段。工作仍在继续...
Parse 扫描器是一个静态扫描工具,用于审查您的 PHP 代码中的潜在安全相关问题。静态扫描器意味着代码没有通过 Web 界面(那是动态测试)执行和测试。相反,扫描器会遍历您的代码,并检查某些标记,并在发现任何标记时通知您。
例如,如果可能的话,您绝对不应该在代码的任何地方使用 eval。当扫描器运行时,它将解析每个文件并查找任何 eval()
调用。如果找到任何,它将把匹配项添加到文件中,并在结果中报告。
安装
使用 composer 在您的项目中安装作为开发依赖项
composer require --dev psecio/parse
安装的可执行文件路径可能会根据您的 bin-dir 设置而有所不同。默认情况下,parse 位于 vendor/bin/psecio-parse
。
对于系统范围内的安装,请使用
composer global require psecio/parse
确保您的路径中包含 ~/.composer/vendor/bin/
。
使用方法
注意:在版本 0.6 中,可执行文件被重命名为 psecio-parse。在早期版本中,工具简单地命名为 parse。
注意:在版本 0.4 及之前,使用
--target
选项指定项目路径,这不再受支持。请使用以下语法。
要使用扫描器,请在命令行中执行它
psecio-parse scan /path/to/my/project
有关更多信息,请参阅 help
和 list
命令。
psecio-parse help scan
输出格式
目前支持控制台(点)、xml 和 json 输出格式。使用 --format
选项设置格式。
psecio-parse scan --format=xml /path/to/my/project
psecio-parse scan --format=dots /path/to/my/project
psecio-parse scan --format=json /path/to/my/project
控制台格式支持使用 -v
或 -vv
开关设置详细程度。
psecio-parse scan -vv /path/to/my/project
如果您的平台不支持 ANSI 代码,或者您想将控制台输出重定向到文件,请使用 --no-ansi
选项。
psecio-parse scan --no-ansi /path/to/my/project > filename
列出检查
您还可以使用 rules
命令获取当前正在进行的检查的列表
psecio-parse rules
管理要运行的规则
有几种方法可以控制要运行的规则。您可以使用 --include-rules
选项特别包含规则,使用 --exclude-rules
特别排除它们,根据具体情况使用注释打开和关闭规则,并使用 --disable-annotations
禁用注释。
排除和包含规则
默认情况下,psecio-parse scan
在扫描中包含所有可用的规则。通过使用 --exclude-rules
和 --include-rules
,可以减少包含的规则。
使用 --exclude-rules
指定的任何规则都会被明确排除在扫描之外,无论选择了哪些其他选项。这些规则无法添加回扫描,除非重新运行扫描并使用不同的选项。无效的规则会被静默忽略。
如果提供了 --include-rules
,则只能使用指定的规则。不会检查其他规则。请注意,不可用的规则(无论它们是否存在或是否使用 --excluded-rules
排除)无法包含。无效的规则会被静默忽略。
注释
可以使用DocBlock注释来启用和禁用规则。这些注释是在被扫描的代码中的注释,告诉Parse特别为DocBlock应用的代码块启用或禁用规则。
@psecio\parse\disable <rule>
:告诉Parse在DocBlock的作用域内忽略给定的规则。@psecio\parse\enable <rule>
:告诉Parse在DocBlock的作用域内启用给定的规则。这可以在将@psecio\parse\disable
应用于包含的作用域后重新启用特定的规则。
请注意,注释不能启用通过命令行选项省略的测试。如果命令行禁用了测试,则在整个扫描过程中都会禁用,无论任何注释。
可以在双斜杠(//
)注释分隔符后添加注释,紧跟在<rule>
之后。建议使用注释来表明规则为何被禁用或启用。
要禁用注释的使用,请使用--disable-annotations
选项。
请参阅examples
目录中Parse注释使用的一些示例。
检查项
以下是当前检查列表
- 当提交敏感值时警告(由如"username"设置为字符串的变量定义)
- 当手动启用
display_errors
时警告 - 避免使用
eval()
- 避免使用
exit
或die()
- 避免使用逻辑运算符(例如使用
and
代替&&
) - 避免使用
ereg*
函数(现已弃用) - 确保
extract
的第二个参数设置为不覆盖(not EXTR_OVERWRITE) - 检查使用变量选项的输出方法(
echo
、print
、printf
、print_r
、vprintf
、sprintf
) - 确保不要将
echo
与file_get_contents
一起使用 - 测试系统执行函数和shell执行(反引号)
- 使用
readfile
、readlink
和readgzfile
- 使用
parse_str
或mb_parse_str
(将值写入局部作用域) - 如果找到
.phps
文件则警告 - 使用
session_regenerate_id
时,要么不带参数,要么使用false - 避免使用
$_REQUEST
(知道你的数据来自哪里) - 不要使用
mysql_real_escape_string
- 避免使用
import_request_variables
- 避免使用
$GLOBALS
- 确保使用类型检查,针对布尔值进行验证(
===
) - 确保正则表达式中不使用
/e
修饰符(执行) - 在
header()
调用中使用连接 - 避免使用$http_raw_post_data
更多内容即将到来...(是的,@todo
)
待办事项
请参阅当前问题列表中的@todo
项...
Parse受MIT许可协议保护。
@author Chris Cornutt (ccornutt@phpdeveloper.org)