第二个cookie的目的究竟是什么?

时间:2015-03-14 15:17:50

标签: php cookies

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

1 个答案:

答案 0 :(得分:1)

有大型数据库包含编码字列表。例如this site。 SALT用于使得无法简单地将HASH输入到文本框中,并希望将其解码。当然有解决方法,但是SALTS使得攻击者的工作变得更加困难,可能迫使他不使用它。正如Vladimir的评论中所述,请阅读this,以便了解SALT的含义。