php 漏洞与代码审计
在甲方公司做代码审计一般还是以白盒为主,漏洞无非这么几类,XSS、sql 注入、命
令执行、上传漏洞、本地包含、远程包含、权限绕过、信息泄露等。
1.xss + sql 注入
其中占大头的自然是 XSS 与 SQL 注入,对于框架类型或者有公共文件的,建议在公
共文件中统一做一次 XSS 和 SQL 注入的过滤。写个过滤函数,可由如下所示:
$_REQUEST = filter_xss($_REQUEST);
$_GET = filter_xss($_GET);
$_POST = filter_xss($_POST);
$_COOKIE = filter_xss($_COOKIE);
$_POST = filter_sql($_POST);
$_GET = filter_sql($_GET);
$_COOKIE = filter_sql($_COOKIE);
$_REQUEST = filter_sql($_REQUEST);
这里有一点需要说明,$_REQUEST 虽然等于$_GET+$_POST,但他们是独立的数
组,也就是说假设改变了$_GET 的值,但$_REQUEST 的值还是原来的值,所以过滤时
都不能落下,至于其他的如$_FILE 之类的就可忽略了。
最简单的 filter_xss 函数是 htmlspecialchars()
最简单的 filter_sql 函数是 mysql_real_escape_string()
当然,谁都知道这种过滤 filter_sql 只能过滤字符型和搜索型的注入,对于数字型是
没有办法的,但也说明做了这层过滤后,只需在后面注意数字型的 SQL 语句就可以了,
遇到了加 intval 过滤就可以了,这就变得容易多了。
2. 命令执行
对于命令执行,可以从关键字入手,总共可分为 3 类
(1) php
代码执行 :eval 等
(2)shell 命令执行:exec、passthru、system、shell_exec 等
(3) 文件处理:fwrite、fopen、mkdir 等
对于这几类需要注意其参数是否用户可控。
3.上传漏洞
对于上传漏洞,也是重点关注的地方,要仔细分析它的处理流程,针对上传的绕过
方式是很多的,最保险的方式:在保存文件是采用文件名随机命名和后缀白名单方式。其