strcmp()
是 PHP 中用于比较两个字符串的函数。它将返回一个整数值,该值表示两个字符串的比较结果
- 如果两个字符串相等,则返回 0
- 如果第一个字符串按字典顺序小于第二个字符串,则返回一个负数
- 如果第一个字符串按字典顺序大于第二个字符串,则返回一个正数
示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
<?php
// 定义两个字符串
$string1 = "apple";
$string2 = "banana";
// 使用 strcmp() 函数比较字符串
$result1 = strcmp($string1, $string1);
$result2 = strcmp($string1, $string2);
$result3 = strcmp($string2, $string1);
// 根据比较结果输出不同的消息
if ($result1 == 0) {
echo "两个字符串相等";
}
if ($result2 < 0) {
echo "第一个字符串在字典顺序上小于第二个字符串";
}
if ($result3 > 0) {
echo "第一个字符串在字典顺序上大于第二个字符串";
}
/*
运行将输出:
两个字符串相等
第一个字符串在字典顺序上小于第二个字符串
第一个字符串在字典顺序上大于第二个字符串
*/
?>
|
绕过场景:
1
2
3
4
5
6
7
8
9
10
|
<?php
include("secret.php");
if(isset($_POST['php_engineer'])){
if(!strcmp($elephant, $_POST['php_engineer'])){
die("FLAG: flag{xxxxxx}");
}else{
die("You aren't a php engineer.");
}
}
?>
|
上述场景的意思是 php_engineer 传进来的字符串要和 elephant 字符串相等,但是 elephant 字符串是在 secret.php 中,不可见
绕过方式:令 php_engineer[]=xxx
strcmp() 比较的是字符串类型,如果强行传入其他类型参数会出错,出错后返回值为0,正是利用这点进行绕过