似乎PHP的===
运算符区分大小写? 那么有没有理由使用strcmp()
? 做以下事情是否安全:
if ( $password === $password2 ) { ... }
#1楼
strcmp将根据它运行的环境返回不同的值(Linux / Windows)!
原因是它有bug,因为bug报告说https://bugs.php.net/bug.php?id=53999
请小心处理!!谢谢。
#2楼
不要在PHP中使用==
。 它不会做你期望的。 即使您将字符串与字符串进行比较,PHP也会隐式地将它们转换为浮点数,并在它们看起来是数字时进行数值比较。
例如'1e3' == '1000'
返回true。 你应该使用===
代替。
#3楼
嗯..根据这个php bug报告 ,你甚至可以得到0wned。
<?php
$pass = isset($_GET['pass']) ? $_GET['pass'] : '';
// Query /?pass[]= will authorize user
//strcmp and strcasecmp both are prone to this hack
if ( strcasecmp( $pass, '123456' ) == 0 ){
echo 'You successfully logged in.';
}
?>
它会给你一个警告,但仍会绕过比较。
你应该做===
为@postfuturist建议。
#4楼
永远记住,在比较字符串时,你应该使用===
运算符(严格比较)而不是 ==
运算符(松散比较)。
#5楼
此功能也可以帮助排序。 要更清楚地排序。 如果string1在string2之前排序,则strcmp()返回小于0,如果string2在string1之前排序,则strcmp()返回大于0;如果string2相同,则返回0。 例如
$first_string = "aabo";
$second_string = "aaao";
echo $n = strcmp($first_string,$second_string);
该函数将返回大于零,因为aaao在aabo之前排序。
来源:oschina
链接:https://my.oschina.net/stackoom/blog/3195939