strcmp函数

2018-06-23  本文已影响29人  evil_ice

一,strcmp

int strcmp ( string $str1 , string $str2 )

二,比较原理

两个字符对应位置的字符进行依次比较。若相同,则比较下一个位置,否则返回两个字符的ascii的差值。
可以通过以下示例看出:

<?php 
$str1 = "b"; 
echo ord($str1); //98 
echo "<br/>"; 
$str2 = "t"; 
echo ord($str2); //116 
echo "<br/>"; 
echo ord($str1)-ord($str2);//-18 
$str1 = "bear"; 
$str2 = "tear"; 
$str3 = ""; 
echo "<pre>"; 
echo strcmp($str1, $str2); // -18 
echo "<br/>"; 
echo strcmp($str2, $str1); //18 
echo "<br/>"; 
echo strcmp($str2, $str2); //0 
echo "<br/>"; 
echo strcmp($str2, $str3); //4 
echo "<br/>"; 
echo strcmp($str3, $str2); //-4 
echo "<br/>"; 
echo strcmp($str3, $str3); // 0 
echo "</pre>"; 
?>

三,存在的安全问题

(int)strcmp('pending',array())

字符串与数组比较,在php5.2.16返回-1,在php5.3.3返回0

<?php
$pass=@$_POST['pass'];
$pass1=***********;//被隐藏起来的密码
if(isset($pass))
{
if(@!strcmp($pass,$pass1)){
echo "flag:nctf{*}";
}else{
echo "the pass is wrong!";
}
}else{
echo "please input pass!";
}
?>

如果通过POST请求提交一个数组pass,那么将会绕过密码判断。例如pass[]=1即可。

上一篇 下一篇

猜你喜欢

热点阅读