我已经读过有关用户能够操纵网站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";
}
我想知道这种方法是否严格安全性还是是否存在漏洞。欢迎批评和指正
这称为消息签名。您将消息与秘密一起散列,然后将该“签名”附加到消息本身。这使收件人可以在不泄露秘密本身的情况下,验证消息的创建者/签名者是否拥有该秘密。
您的特定实现的问题是
您应该使用更长的秘密,时间越长越好。您还应该使用适合该任务的哈希算法,例如HMAC(基于哈希的消息身份验证)。例如:
hash_hmac('sha512', $data, $secret)
你可以看到类似的事情的执行情况,包括值的到期,在这里。
不过,最重要的事情是:首先考虑是否需要签名的纯文本消息是最好的方式,请三思而后行。也许您想要一个类似会话的系统,在该系统中,将完全无意义的随机字符串用作存储在服务器上的数据的ID。这完全消除了用户操作cookie的问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句