首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用散列检查php密码不起作用

问使用散列检查php密码不起作用
EN

Stack Overflow用户
提问于 2015-09-07 06:49:16
回答 1查看 109关注 0票数 0

我在php中编写了一个登录页面和一个检查页面。在我的本地机器上,它可以工作,但是在服务器上不能工作(如果重要的话,我在Windows上,服务器在Linux上)。

下面是检查页面中的代码:

代码语言:javascript
复制
$user = $_POST['userName'];
$pass = $_POST['pass'];

$saltSQL = 'SELECT salt FROM agents WHERE name="' . $user . '"';
$saltResult = mysql_fetch_array(mysql_query($saltSQL));
$salt = $saltResult['salt'];

$passToCheck = hash('sha512', $salt + $pass);

$rowAgent = mysql_fetch_array(mysql_query('SELECT * FROM agents WHERE name ="' . strtolower($user) . '"'));

if ($rowAgent['password'] != $passToCheck) {
    header("location:mainLogin.php");
    exit;
}

header("location:selectamount_new.php");

奇怪的是,当我用字母输入密码时,系统会输入我的密码(不管是什么),当我输入数字时,系统将正确检查密码,不让我输入密码(将把我重定向到mainLogin.php,而不是selectamount_new.php)。

同样,在我的本地机器上,它工作得很好,问题是当我用Git将代码推到Linux机器(AWS)时。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-07 07:01:44

问题是在$salt + $pass。这不是串连,是+操作符,就像在数学中一样。因此,string + string = nothing,这意味着每个密码将匹配。number + string = number,这就是为什么用数字来工作的原因。您应该在这里使用.操作符,这意味着连接。

无论如何,如果您不对SQL注入进行验证,任何人都可以登录您的站点,而不管这个补丁是什么。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32432662

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档