PHPCheckstyle代码审计与Subversion钩子脚本
来源:互联网 发布:精易编程助手怎么用 编辑:程序博客网 时间:2024/06/06 21:43
作者:老王
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项目,有点意思,可以看看。
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项目,有点意思,可以看看。
- PHPCheckstyle代码审计与Subversion钩子脚本
- Subversion的钩子脚本
- Subversion使用钩子脚本实现自动更新
- php代码审计辅助脚本
- Windows下subversion强制写日志钩子脚本
- 使用phpcheckstyle检查自己的代码
- php漏洞与代码审计
- php漏洞与代码审计
- php漏洞与代码审计
- PHP 漏洞与代码审计
- 代码审计方法与准备
- subversion钩子svn hook
- Python安全编码与代码审计
- Python安全编码与代码审计
- 代码审计
- Subversion reported an error 提交被pre-commit钩子阻塞(退出代码1)
- Linux 系统 审计 脚本
- android静态审计脚本
- YUV RGB 常见视频格式解析
- Wireshark图解教程(简介、抓包、过滤器)
- LCA问题(最近公共祖先问题)+ RMQ问题
- EM算法推导
- Oracle命令--查询语句
- PHPCheckstyle代码审计与Subversion钩子脚本
- sort
- select标签的回显
- AS3主流游戏引擎
- 程序员技术练级攻略
- C++ 标准IO库 - 文件流操作【ifstream ofstream fstream】
- stl文件格式
- /usr/lib/libreadline.so.5: undefined symbol: PC 错误的处理方法
- HTM页面获得本机时间