PHP代码审计

1. "==" 与 “===”

  • == 在进行比较的时候,会先将字符串类型转化成相同,如果整型跟字符型比较字符或从左往右提取整型直到遇到字符结束,再比较。

  • === 在进行比较的时候,会先判断两种字符串的类型是否相等,当等号两边类型不同时,会先转换为相同的类型,再对转换后的值进行比较,如果比较一个数字和字符串或者涉及到数字内容的字符串,则字符串会被转换成数值并且比较按照常数值进行比较。 

     

//字符串和数字比较
var_dump(0=="admin");   //true
echo '<br>';
var_dump(1=="1admin");  //true
echo '<br>';
var_dump(1=="admin1");  //false
echo '<br>';
var_dump(0=="admin1");  //true
echo '<br>';
//数字和数组
$arr = array();
var_dump(0==$arr);  //false
echo '<br>';
//字符串和数组
$arr = array();
var_dump("0"==$arr);    //false
echo '<br>';
//"合法数字+e+合法数字"类型的字符串
var_dump("0e123456"=="0e4456789");  //true
echo '<br>';
var_dump("1e1"=="10");  //true

2. HASH比较缺陷

  • sha1函数和md5函数一样不能判断数组的值。

  • 如果Hash值或者SHA1值以0e开头,后面都是数字,在与数字进行比较,就会被解释为010^n也就是0,就会被用于判断绕过。

    $array1=[1,2,3];
    $array2=[4,5,6];
    ​
    var_dump(sha1($array1)===sha1($array2)); //true

 

var_dump(md5('240610708') == md5('QNKCDZO'));//true
​
$array1=[1,2,3];
$array2=[4,5,6];
var_dump(md5($array1)===md5($array2)) //true
  • 3.bool欺骗 

 4. 数字转换欺骗

 

 

  • 5. 生日欺骗

 

 结论: hash function是不安全的

  • 6. strcmp()函数

  • 比较函数如果两者相等返回0,string1>string2返回>0 反之小于0。在5.3及以后的php版本中,当strcmp()括号内是一个数组与字符串比较时,也会返回0。

    $pd = "6666";
    if(strcmp($_GET['pwd'],$pd) == 0){
    echo "giao";
    }else{
    echo "?";
    }

    Switch()函数

   is_numeric()函数

 in_array()函数

$array=[0,1,2,'3'];
var_dump(in_array('abc', $array)); //true
var_dump(in_array('1bc', $array)); //true

 array_search 与 is_array函数

  • is_array:判断传入的是不是一个数组。

  • array_search(x,$数组):在数组中寻找与指定值(x)相等的值,array_search函数 类似于"==",会进行类型的转换。

  • if(!is_array($_GET['test'])){
    exit();
    }
    ​
    $test = $_GET['test'];
    ​
    for($i = 0;$i<count($test) ;$i++ ){
    if($test[$i] === "admin"){
    echo "error";
    exit();
    }
    $test[$i] = intval($test[$i]);
    }
    ​
    if(array_search("admin",$test) === 0){
    echo "flag";
    }else{
    echo "false";
    }

     empty函数与isset函数

  •  变量为:0,"0",null,'',false,array()时,使用empty函数,返回的都是true

  • 变量未定义或者为null时,isset函数返回的为false,其他都为true

    $a = null;
    $b = 0;
    $c = "";
    var_dump(empty($a));
    var_dump(empty($b));
    var_dump(empty($c));
    var_dump(isset($a));
    var_dump(isset($b));
    var_dump(isset($c));

    7. 变量覆盖

  • $$

 extract()

 

 

 

 post提交

 Parse_Str()函数 

import_request_variables()函数

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值