我想问一个关于有两个饼干的智慧的问题。在一个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'");