php代码审计思路_Php代码审计
如何用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次取平均值:
php漏洞与代码审计过程中需要注意的几点
①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过滤就可以了,这就变得容易多了.
(1) php代码执行 :eval等
对于这几类需要注意其参数是否用户可控.
文件包含漏洞涉及的函数如include() 、include_once()、require()、require_once()、file_get_contents()等
权限绕过可分为两类吧
(1)后台文件的未授权访问.后台的文件没有包含对session的验证,就容易出现这样的问题
这样的例子是很常见的,给某银行做评估是就经常发现这种漏洞.
信息泄露算是比较低危的漏洞了,比如列目录这种就属于部署问题,而与代码审计无关了,而像暴路径、暴源码这种是需要防止的.曾经遇到这样的代码
php if(empty($_GET['a'])) {...} ?
表面上似乎没问题,可是当请求变为 xx.php?a[]=1时,即参数变为数组的时候,就会发生错误以致路径泄露,而用isset判断则不会,当然一个个防太麻烦,建议在配置文件中关闭错误提示,或者在公共文件中加入如下代码以关闭错误显示功能:
php error_reporting(0);?
请问谁知道PHP代码审计怎么学习呢
①.、工具什么的没用过,不好回答.
以上就是日讯小常识小编为大家整理的php代码审计思路相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!
