我有一个登录脚本,根据登录时提供的用户名和密码在用户的数据库中进行查找,然后创建一个cookie,以下列方式存储加密字符串:
$securesession = $username.'[:#:]'.$dbactype.'[#]'.$dbperson.'[#]'.time().'[#]'.$expiretime.'[#]'.$useragent.'[#]'.$ipaddress.'[#]'.$masterkey;
$securesession = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $securesession, MCRYPT_MODE_CBC, md5(md5($key))));
setcookie("_session_sitename", $securesession, $expiretime, NULL, NULL, NULL, TRUE);
存储有关用户和会话的一些细节以及UA字符串和IP,然后该站点有一个$ masterkey,它是一个复杂的随机字符串。特殊字符,全局定义了一个$ key,用于加密和解密cookie。
然后,如果存在$_COOKIE['_session_sitename']
,则对页面的后续请求将通过解码此cookie进行验证,并通过分隔符[#]
对其进行爆炸并验证已解码的cookie中的IP和用户爆炸与{{1}匹配}& $_SERVER['HTTP_USER_AGENT']
以及网站$_SERVER['REMOTE_ADDR']
。
问题是,这种“安全性”水平是否足够,还是应该考虑添加额外的图层?
答案 0 :(得分:1)
在上面的评论中讨论后 - 我将重写代码,以便将数据存储到会话ID中,例如$_SESSION['_session_data']
而不是cookie中的客户端。这样,只有会话令牌存储在客户端,从而增加了额外的安全层。
感谢EdHeal&佩卡在评论中的意见!