PHPCheckstyle代码审计与Subversion钩子脚本

简介: 作者:老王 PHP代码审计方面的软件越来越多了,PHPCheckstyle算是最近比较活跃的一个。
作者:老王

PHP代码审计方面的软件 越来越多了, PHPCheckstyle算是最近比较活跃的一个。通过SVN钩子脚本的方式来调用PHPCheckstyle,可以强制代码必须符合预先设定的编码标准(比如 PEAR编码标准),有助于在多人合作项目中提高代码整体质量。

PHPCheckstyle的设置:

安装真的没什么可说的,属于接插即用型的,唯一需要设置的就是config目录下的配置文件:缺省使用的是default.cfg.xml,你可以编辑它,按照 官方文档适当的增减规则。不过PHPCheckstyle项目诞生时间短,不够稳定,截至0.8版本为止还有不少问题,使用前最好逐条规则进行测试。

最简单的运行方法如下:

php run.php --src /path/to/file

这样的话会生成相关的html文档,如果你想直接输出的话,请使用:

php run.php --format console --src /path/to/file

更多选项可以自己看帮助(php run.php就可以查看相关帮助)

Subversion钩子脚本:

下面设置钩子脚本,具体点说是前置钩子,也就是:pre-commit,通过钩子检查后才被允许提交到版本库。只有添加或更新的文件是需要检查的,如果是要删除的文件,则没有必要检查;还有一个问题,PHPCheckstyle只能检查具体文件的内容,而在提交之前,我们想要检查的文件还不存在,所以我们得生成一个临时文件,检查完再删除,另外,在生成文件时要注意其唯一性,免得多用户一起提交时发生冲突,注意事项了解的差不多了,可以写钩子脚本了:

代码(at pastebin.com):

01 #!/bin/bash
02
03 REPOS="$1"
04 TXN="$2"
05
06 PHP="/usr/local/php/bin/php"
07 SVNLOOK="/usr/bin/svnlook"
08
09 RUNSCRIPT="/path/to/run/php/script"
10
11 CHANGED=`$SVNLOOK changed -t "$TXN" "$REPOS" | grep '^[U|A]' | awk '{print $2}'`
12
13 for FILE in $CHANGED; do
14     if [[ "$FILE" =~ \.php$ ]]; then
15         TEMPFILE=`mktemp`
16         $SVNLOOK cat -t "$TXN" "$REPOS" "$FILE" > $TEMPFILE
17         MESSAGE=`$PHP $RUNSCRIPT --format console --src $TEMPFILE | head -n -2`
18         if [ ! -z "$MESSAGE" ]; then
19             rm -rf $TEMPFILE
20             echo "$MESSAGE" | sed -e "s|$TEMPFILE|$FILE|" 1>&2
21             exit 1
22         fi
23         rm -rf $TEMPFILE
24     fi
25 done

关于Shell,如果有不清楚的可以自己搜索一下,网上有很多类似的 文章

钩子脚本还可以做很多事情,比如核对PHP脚本语法(php -l),而且通过管道符不用生成临时文件:

MESSAGE=`$SVNLOOK cat -t "$TXN" "$REPOS" "$FILE" | $PHP -l`

运行后,不用判断MESSAGE是否为空,而是根据退出状态来判断脚本是否有语法问题:

if [ $? -ne 0 ]

PHPCheckstyle配置和使用多少还是有点别扭,有机会试试 PHP_CodeSniffer配置钩子脚本更简单

BTW:发现一个 PHP Commit Hooks项目,有点意思,可以看看。
目录
相关文章
|
7月前
|
安全 Java 测试技术
【代码审计篇】 代码审计工具Fortify基本用法详解
本篇文章讲解代码审计工具Fortify的基本用法,感兴趣的小伙伴可以研究学习一下,文中部分地方可能会有遗漏,麻烦各位大佬指正,深表感谢!!!
571 1
|
5月前
|
JavaScript Go iOS开发
使用脚本整合指定文件/文件夹,执行定制化 ESLint 命令
描述了如何通过自定义脚本简化 ESLint 命令的执行。该脚本支持指定文件或文件夹,指定 ESLint 配置文件,附带命令,以及前后置执行命令等功能,极大地提高了代码检查和格式化的效率。
34 1
使用脚本整合指定文件/文件夹,执行定制化 ESLint 命令
|
SQL 安全 JavaScript
渗透测试之分享常用工具、插件和脚本(干货)
渗透测试之分享常用工具、插件和脚本(干货)
渗透测试之分享常用工具、插件和脚本(干货)
|
10月前
|
安全 Java PHP
代码审计——命令执行详解
代码审计——命令执行详解
133 0
|
Web App开发
一些好用的油猴脚本
1、先打开 https://greasyfork.org/zh-CN 再根据你的浏览器版本安装油猴 2、浏览器扩展栏会出现这个图标,左键点击,选择管理面板->实用工具->点击导入文件,选择附件里的TXT文件 再打开管理面板,出现如下图片,就是安装成功了。
5113 0
|
Java 关系型数据库 测试技术