我有一个更新用户数据的表单。它发布到这个页面:查询产生意想不到的结果(sha1)
<?php
//Update user table
session_start();
include 'sql_connect_R.inc.php';
$id = mysql_real_escape_string($_POST['userID']);
$password = mysql_real_escape_string($_POST['user_passwrd']);
$salt = time();
$hash = sha1($password . $salt);
mysql_query("UPDATE users SET user_passwrd = '$hash', stamp = '$salt', pending = 'yes'
WHERE userID = '$id'");
mysql_close($con);
?>
(我已经编辑了东西不相关的这个问题)
我相信所发生的事情是,当“戳”领域正在被使用$盐填充它正在计算$ hash的值。因此,当用户登录,并在这里检查:
$qry="SELECT * FROM users WHERE userlogin = '$login' AND user_passwrd = sha1(CONCAT('$password', stamp))";
$result=mysql_query($qry);
$row = mysql_fetch_assoc($result);
$num = mysql_num_rows($result);
当我回声$ NUM如果有一种方法,以确保它返回0 我想知道一个值的$盐保留价值当它在$ hash中使用时,以及在更新字段'stamp'时是相同的。 任何人都可以帮助我或指出我在正确的方向吗?提前致谢。 干杯
检查PHP是否插入了错误的散列或者MYSQL正在寻找错误的散列。这将把问题空间分解成一半。 –
正在插入错误的散列。我认为当密码被哈希时$ salt的值和$ salt在数据库中插入时的值是有区别的,但我并不确定。 – Spud
user_passwrd的列定义是什么? – Ben