美文网首页
strcmp函数

strcmp函数

作者: evil_ice | 来源:发表于2018-06-23 17:06 被阅读29次

一,strcmp

int strcmp ( string $str1 , string $str2 )
  • 作用
    字符串比较
    如果 str1 小于 str2 返回 < 0; 如果 str1 大于 str2 返回 > 0;如果两者相等,返回 0。
  • Note
    1)比较区分大小写
    2)如果要安全的使用strcmp进行字符串比较,则所有参数必须都是字符串,否则结果不可预知

二,比较原理

两个字符对应位置的字符进行依次比较。若相同,则比较下一个位置,否则返回两个字符的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>"; 
?>

三,存在的安全问题

  • Note
(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即可。

相关文章

网友评论

      本文标题:strcmp函数

      本文链接:https://www.haomeiwen.com/subject/zrcdyftx.html