pdrakeweb/phpcs-security-audit

phpcs-security-audit 是一组 PHP_CodeSniffer 规则,用于检测 PHP 及其流行的 CMS 或框架中的安全漏洞或弱点。

1.0 2014-06-02 21:55 UTC

This package is not auto-updated.

Last update: 2024-09-14 16:13:35 UTC


README

phpcs-security-audit 是一组 PHP_CodeSniffer 规则,用于检测 PHP 及其流行的 CMS 或框架中的安全漏洞或弱点。

它目前包含核心 PHP 规则以及 Drupal 7 特定规则。下一个计划的 CMS 框架是 Symfony 2。

作为额外的规则集,该工具还检查与 CMS 框架相关的 CVE 问题和安全警告。您可以在静态代码分析期间使用它来跟踪组件的版本。

该项目作为 PHP_CodeSniffer 的扩展的主要原因是易于集成到持续集成系统中,并能够发现用面向对象分析(如在 RIPSPHPMD)中)无法检测到的安全漏洞。

phpcs-security-audit 由 Phéromone 支持,并由 Jonathan Marcil 编写。

Phéromone, agence d'interactions

用法

您需要先安装 http://pear.php.net/package/PHP_CodeSniffer/,且 PHP 5.4 或更高版本已安装。

由于 PHP CodeSniffer 的工作方式,您需要将 phpcs-security-audit 中的 Security/ 文件夹放在 /usr/share/php/PHP/CodeSniffer/Standards 中或创建一个符号链接。

然后,您只需配置或使用 XML 规则文件,然后在代码上运行它即可

phpcs --extensions=php,inc,lib,module,info --standard=example_base_ruleset.xml /your/php/files/

指定扩展名很重要,例如,PHP 代码在 Drupal 中的 .module 文件中。

如果您想将其与 Jenkins 集成,请参阅 http://jenkins-php.org/ 以获取详细帮助。

要查看输出示例,可以使用提供的 tests.php 文件

$ phpcs --extensions=php,inc,lib,module,info --standard=example_base_ruleset.xml tests.php

FILE: tests.php
--------------------------------------------------------------------------------
FOUND 16 ERROR(S) AND 15 WARNING(S) AFFECTING 22 LINE(S)
--------------------------------------------------------------------------------
  6 | WARNING | Possible XSS detected with . on echo
  6 | ERROR   | Easy XSS detected because of direct user input with $_POST on
    |         | echo
  8 | WARNING | db_query() is deprecated except when doing a static query
  8 | ERROR   | Potential SQL injection found in db_query()
  9 | WARNING | Usage of preg_replace with /e modifier is not recommended.
 10 | WARNING | Usage of preg_replace with /e modifier is not recommended.

Drupal 详细信息

对于 Drupal AdvisoriesContrib,您需要将 /etc/php5/cli/php.ini 中的内容更改为

short_open_tag = On

以消除 "在此文件中未找到 PHP 代码" 的警告。

请注意,仅支持从 drupal.org 下载的 Drupal 模块。如果您使用的是来自其他来源的 contrib 模块,版本检查可能无法正常工作,并会生成警告。

自定义

与正常的 PHP CodeSniffer 规则一样,自定义是通过项目顶层文件夹中的 XML 文件提供的。

example_subset_ruleset.xml 文件将提供所有可能的选项,并允许您自定义或删除不喜欢的选项。

以下参数在许多规则中都很常见(这是 PHP CodeSniffer 的限制,对此表示歉意)

  • ParanoiaMode:设置为 1 以添加更多检查。0 为更少。
  • CmsFramework:设置为包含规则和 Utils.php 的文件夹的名称(例如 Drupal7,Symfony2)。

专业化

如果您想分支并帮助或只是进行自己的嗅探,可以使用 phpcs-security-audit 规则中提供的工具来简化流程。

假设您有一个自定义 CMS 函数,当调用 get_param() 函数时,会从 $_GET 获取用户输入。

您需要在Sniffs/中创建一个新的文件夹,该文件夹将作为您框架的名称。然后,您需要创建一个名为Utils.php的文件,该文件实际上是专门化通用sniffs的函数。为了指导您,只需从如Drupal7/之类的文件夹复制文件即可。

您想要更改的主要函数是is_direct_user_input,当看到get_param()时,您希望返回TRUE。

	public static function is_direct_user_input($var) {
		if (parent::is_direct_user_input($var)) {
			return TRUE;
		} else {
			if ($var == 'get_param') {
				return TRUE;
			}
		}
		return FALSE;
	}

不要忘记在您的XML基础配置中设置param "CmsFramework"的出现次数,以便选择您新添加的实用程序。

修改对您有用,因为您指定了其他规则的用户输入,但不一定需要自己编写sniffs,您可以使用新创建的目录来这样做。

如果您实施了任何公共cms/framework定制,请提交pull request以帮助项目发展。

烦恼

像任何安全工具一样,这个工具也有其烦恼。最初将专注于查找漏洞,但后来计划有一个阶段,将努力减少烦恼,特别是减少误报的数量。

  • 它是误报的生成器。这实际上可以帮助您学习PHP中的哪些函数较弱。当设置为0时,偏执模式将通过大量减少警告来修复。
  • 它很慢。在大型Drupal模块和核心中,运行它可能需要很长时间(以及RAM,如果需要,重新配置cli/php.ini以使用512M)来运行。不清楚这是否是由于PHPCS中的错误或这组规则引起的,但将在最后进行调查。同时,您可以配置PHPCS忽略大型贡献模块(并为它们运行另一个PHPCS实例仅用于.info解析)。例如,og可能需要数小时,通常一切都在1-2分钟内完成,有时在5分钟左右。您只能使用一个核心在PHP中,因为没有多线程。可能的解决方案是使用phpcs --ignore=folder来跳过扫描这些部分。
  • 对于Drupal警告检查:如果一个模块有多个版本,如果存在较低版本的修复版本,那么您仍然会得到错误或警告,该模块可能是安全的。请按照Drupal网站上推荐的方式,将所有内容更新到最新版本。