如何加密网站Cookie

钻石

我已经读过有关用户能够操纵网站cookie并利用它来利用安全漏洞的信息。我进行了搜索,发现了一个在线发布的想法。这是下面的代码,即在验证用户名和密码后;

$Separator = '--';
$uniqueID = 'jhlhgjh12u0@345';
$Data = $userID.' '.md5('65748');

$expire=time()+60*24;
setcookie('verify-user', $Data.$Separator.md5($Data.$uniqueID), $expire);

上面的代码将使用唯一ID,用户ID,MD5哈希数和分隔符来设置Cookie。唯一ID,md5哈希数和分隔符由开发人员设置。想法是,用户将因为不知道UniqueID和md5哈希数而无法操作该cookie。下面的代码用于测试每个Cookie是否受到操纵

if ($_COOKIE) {

$Separator="--";
$uniqueID = 'jhlhgjh12u0@345';

$Cut = explode($Separator, $_COOKIE['verify-user']);
if (md5($Cut[0].$uniqueID) === $Cut[1]) {
   $_COOKIE['verify-user'] = $Cut[0];

 } else {

   echo "fake cookie";

}
}
else {
   echo "fake cookie";
}

我想知道这种方法是否严格安全性还是是否存在漏洞。欢迎批评和指正

这称为消息签名您将消息与秘密一起散列,然后将该“签名”附加到消息本身。这使收件人可以在不泄露秘密本身的情况下,验证消息的创建者/签名者是否拥有该秘密。

您的特定实现的问题是

  • 秘密太小
  • 哈希算法不适合该任务
  • Cookies永不改变,永不过期;如果Cookie被盗,则没有追索权

您应该使用更长的秘密,时间越长越好。您还应该使用适合该任务的哈希算法,例如HMAC(基于哈希的消息身份验证)。例如:

hash_hmac('sha512', $data, $secret)

你可以看到类似的事情的执行情况,包括值的到期在这里


不过,最重要的事情是:首先考虑是否需要签名的纯文本消息是最好的方式,请三思而后行。也许您想要一个类似会话的系统,在该系统中,将完全无意义的随机字符串用作存储在服务器上的数据的ID。这完全消除了用户操作cookie的问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章