前言:
现在姐妹们对“php的strpos”都比较讲究,你们都想要知道一些“php的strpos”的相关内容。那么小编同时在网上网罗了一些对于“php的strpos””的相关知识,希望姐妹们能喜欢,各位老铁们一起来学习一下吧!在PHP中,比较俩个值是否相等可以用 == 和 ===
== 比较的时候自动进行类型转换而不改变原来的值,所以存在漏洞的位置往往是==
常见错误用法:
if($input == 1){
敏感类操作;如echo $flag;
}
例题:
if($_GET['a']!=$_GET['b'] && md5($_GET['a'])==md5($_GET['b'])){
echo $flag;
}
可以通过 MD5碰撞或数组形式绕过;
MD5函数返回32位的字符串,若以0e开头,类型转换机制(==)会将它识别为科学计数法 0 ;通过0e开头字符串绕过
s878926199a =》0e545993274517709034328855841020
s155964671a =》0e342768416822451524974117254469
改良版例题:
if($_GET['a']!=$_GET['b'] && md5($_GET['a'])===md5($_GET['b'])){
echo $flag;
}
这时MD5碰撞就不能成功了,在URL地址栏提交 a[]=1&b[]=2 成功绕过,因为当MD5函数的参数为一个数组时,函数会报错
返回NULL值,这样就可以绕过判断。
其他容易判断错误的函数,如strpos
(php4,php5,php7) strpos ---查找字符串首次出现的位置
if(strpos($str1,$str2)==false){
敏感逻辑操作;
}
当 str1 在 str2 开头时,函数的返回值是 0,而 0==false是成立的;
标签: #php的strpos