zomato/parse

适用于Zomato的PHP安全扫描器

1.0 2017-07-07 05:38 UTC

This package is not auto-updated.

Last update: 2024-09-29 03:36:27 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输出格式。使用--format选项设置格式。

psecio-parse scan --format=xml /path/to/my/project
psecio-parse scan --format=dots /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的第二个参数设置为不覆盖(是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

请参阅当前问题列表中的@todo项...

Parse遵循MIT许可协议。

@author Chris Cornutt (ccornutt@phpdeveloper.org)