【发布时间】:2015-03-14 23:32:39
【问题描述】:
我想问一个关于拥有两个 cookie 是否明智的问题。在一个 PHP 文件中,可以找到以下代码:
//dbconn establishes connection to database and is not shown here
$salt = hash("sha512", rand().rand().rand());
mysqli_query($dbconn, "INSERT into `members` (`membername`, `password`,
`salt`) VALUES ('$membername', '$password', '$salt')");
setcookie("cookiemember", hash("sha512", $membername,
time() + 24*60*60, "/");
setcookie("cookiesalt", $salt, time() + 24*60*60, "/");
mysqli_close($dbconn)
在第二个 PHP 文件中,找到以下代码行:
if (isset($_COOKIE['cookiemember']) &&
isset($_COOKIE['cookiesalt'])) {
$cookymem = mysqli_real_escape_string($dbconn,
$_COOKIE['cookiemember']);
$cookysalty = mysqli_real_escape_string($dbconn,
$_COOKIE['cookiesalt']);
$result = mysqli_query($dbconn, "SELECT * FROM `members`
where `salt` = '$cookysalty'");
我不明白变量 $salt 的用途。您取三个随机生成的数字,将它们连接起来,对这个连接的数字应用安全哈希算法,然后将输出放入名为members 的表中。然后,您使用这个 $salt 变量作为 cookie 的值,但不是在您从其中转义特殊字符之前。当您已经通过散列加密字段名称membername 时,为什么还要经历所有这些麻烦?为什么最后一行代码不能简单阅读:
$result = mysqli_query($dbconn, "SELECT * FROM `members`
where `membername` = '$cookymem'");
【问题讨论】:
-
弗拉基米尔,感谢您的链接。该链接确实包含一个名为“近似线性”的用户的非常有用的答案。
-
我不太确定这是一个重复的问题。对我来说,这看起来像是变量命名错误的情况。 $cookiysalty 可能不包含 SALT,但包含加盐密码。 Ofc 如果不阅读更多代码,这很难说。该代码还拼错了 cookie,并在应该使用 member 的地方使用了“mem”,这样人们就不必猜测变量内部的内容了。
-
同意,这不是重复的。除非缺少代码,否则使用一个称为盐的变量,但根本没有盐的实现