本文目录一览:
如何用grep对PHP进行代码审计
解决楼主的问题的方法就是,分开写代码,即:
$filearr = split(“.”,$filename);
$filetype = end($filearr);
split 函数用来分割字符串的时候,基本等同于函数 preg_grep,分割表达式可以是一个正则表达式,也可以是一个普通字符串,所以本身的执行效率很低,这一点你要记得……
所以,实现你现在的这个需求的话,最好用explode函数,使用普通字符作为分割表达式……
但是也的确如楼上所说,split 函数(PHP里)已经弃用,你可以使用 preg_match、preg_match_all 、preg_grep 等使用正则表达式作为分割的函数来替代。
就整个你的需求而言,你的思路还不很好,当一个文件名是【a.b.c.d.e.f.g.php】的时候,程序要浪费多余的资源来分割其实你不用的a、b、c……,
所以要简单满足你取后缀名的需求的代码应该是:
$filetype=substr(strrchr($filename,’.’),1);
此外还有:$path_info = pathinfo($filename); $filetype = $path_info[‘extension’]; 其实不是很推荐。
下面比较一下它们各自的执行效率:
设文件名是:aaa.bb.php、循环执行10000次;执行10次取平均值:
split + end :0.067644s
explode + end :0.016251s
pathinfo + [‘extension’] :0.018983s
strrchr + substr :0.008611s
【以上文字现场版纯手敲,2012-2-25 10:41,谢谢】
php漏洞与代码审计过程中需要注意的几点
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.上传漏洞
对于上传漏洞,也是重点关注的地方,要仔细分析它的处理流程,针对上传的绕过方式是很多的,最保险的方式:在保存文件是采用文件名随机命名和后缀白名单方式。其次要注意的一点是上传文件的地方可能不止一处,不要有遗漏,可能会碰到这样的情况,突然在某个目录里面包含了一个第三方的编辑器在里面。
文件包含漏洞涉及的函数如include() 、include_once()、require()、require_once()、file_get_contents()等
最常见的还是出在下载文件功能函数,例如download.php?file=///etc/passwd 这种类型中。
4. 权限绕过
权限绕过可分为两类吧
(1)后台文件的未授权访问。后台的文件没有包含对session的验证,就容易出现这样的问题
(2)未作用户隔离,例如mail.php?id=23显示了你的信件,那么换个ID, mail.php?id=24就查看到了别人的信件,编写代码是方便,把信件都存在一个数据表里,id统一编号,前端展现时只需按id取出即可,但未作用户隔离,判定归属,容易造成越权访问。
这样的例子是很常见的,给某银行做评估是就经常发现这种漏洞。
5. 信息泄露
信息泄露算是比较低危的漏洞了,比如列目录这种就属于部署问题,而与代码审计无关了,而像暴路径、暴源码这种是需要防止的。曾经遇到这样的代码
?php if(empty($_GET[‘a’])) {…} ?
表面上似乎没问题,可是当请求变为 xx.php?a[]=1时,即参数变为数组的时候,就会发生错误以致路径泄露,而用isset判断则不会,当然一个个防太麻烦,建议在配置文件中关闭错误提示,或者在公共文件中加入如下代码以关闭错误显示功能:
?php error_reporting(0);?
请问谁知道PHP代码审计怎么学习呢
1、工具什么的没用过,不好回答。
2、跟踪函数?应该是指对一些容易被利用的函数的前后代码流程进行审计吧。这种方式应该是较为常用的,需要你平时多积累危险函数的『字典』,但随着 PHP 应用程序安全性的整体提升,常用的危险函数引起的漏洞越来越少了,也越来越难找了。『安全性敏感』这个,需要自己多学习多积累多思考,多读代码,多分析代码,多看漏洞分析,看不懂别人的漏洞分析,就多利用google搜索、查阅手册等手段努力把分析看明白。然后可以找一些不太知名的小程序来练练手,一点一点积累,循序渐进,慢慢应该会形成一定的『安全性敏感』吧。比如说你在看一个程序前,对应这种类型的应用程序,哪些流程容易出现漏洞,哪些功能容易出现漏洞,哪些危险函数会较多用到,应该先从哪入手看源码等等,在自己的头脑里有一个较为清晰的思路,不知道这个是不是你所说的『安全敏感性』。
3、国内这方面的资料挺多的,多上 wooyun、80vul、wolvez 等这些网站上看看。还有就是多看 PHP 手册,如果有能力的话可以看看 PHP 内核源码,推荐去 github 上看 PHP 内核源码,快捷方便,各个分支的源码都有,方便查阅对比。
原创文章,作者:YFWP,如若转载,请注明出处:https://www.506064.com/n/132081.html