第二个饼干的用途到底是什么


What exactly is the purpose of a second 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'");

有包含编码单词列表的大型数据库。例如这个网站。SALT用于使不可能简单地将HASH输入文本框,并希望对其进行解码。当然有解决方法,但SALTS使攻击者的工作变得更加困难,可能迫使他不使用它。正如弗拉基米尔在评论中指定的那样,请阅读本文,以便您了解 SALT 是什么。