我正在为简单的论坛制作API,现在尝试检查使用php登录
控制页面上的:checkLogin.php
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
if(!isset($_POST['username']) or (!isset($_POST['password']))) {
die('type the username & the password');
}
require_once('usersAPI.php');
if(empty($_POST['username']) || empty($_POST['password'])){
tinyf_db_close();
die('bad User Info');
}
$user = tinyf_users_get_by_name($_POST['username']);
if(!$user)
{
die('Bad User');
}
//check connection if mysqli couldn't fetch
$pass = md5(mysqli_real_escape_string($tf_handle, strip_tags($_POST['password'])));
tinyf_db_close();
// if(strcmp('n','n')) will be 0 and if(0) doesn't work :D
if(strcmp($pass,$user->password !== 0)){
die('Bad__User');
}
die('success');
?>
结果===&gt; Bad__User
我预计结果会成功
我认为strcmp功能不起作用
答案 0 :(得分:1)
PHP strcmp()
的语法如下:
strcmp(string $ str1,string $ str2)
返回&lt;如果str1小于str2,则为0; &GT;如果str1大于str2则为0,如果它们相等则为0。
代码中的括号错位:
strcmp($pass,$user->password !== 0)
您要将$pass
与指示$user->password !== 0
的布尔值进行比较,而不是比较这两个值。鉴于您的每个变量都设置为字符串“1”,这相当于返回strcmp("1",false)
的{{1}},导致您的int(1)
语句返回if
,并输出true
。
为了正确比较两个值,语法为:
die('Bad__User')
话虽如此,我相信上述评论者建议您考虑使用更安全的密码哈希/验证技术。