psecio/parse

PHP 安全扫描器

0.8 2018-08-01 18:12 UTC

This package is auto-updated.

Last update: 2024-09-15 10:08:21 UTC


README

Packagist Version Build Status

请注意:此工具仍处于非常初级的阶段。工作仍在继续...

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

有关更多信息,请参阅 helplist 命令。

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()
  • 避免使用exitdie()
  • 避免使用逻辑运算符(例如使用and代替&&
  • 避免使用ereg*函数(现已弃用)
  • 确保extract的第二个参数设置为不覆盖(not EXTR_OVERWRITE)
  • 检查使用变量选项的输出方法(echoprintprintfprint_rvprintfsprintf
  • 确保不要将echofile_get_contents一起使用
  • 测试系统执行函数和shell执行(反引号)
  • 使用readfilereadlinkreadgzfile
  • 使用parse_strmb_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)