为了建立一个安全的登录系统,我一直在阅读有关会话的信息。据我了解,会话不太可能通过蛮力被盗,即使这并非不可能,因为它们仅使用 cookie 将会话与计算机匹配。
我正在考虑实施第二次检查,以使黑客无法强行进入其他人的会话,这个想法是还设置一个随机 cookie 并检查它是否与存储在服务器中的会话数据匹配, 我想这可能会使 n² 更难找到正确的匹配。
示例代码:
//if login is successful
if(password($this->checkPass,$this->time) == $this->pass){
$random = hash("sha256",rand(0,getrandmax()).$_SERVER['REMOTE_ADDR']);
session_start();
session_regenerate_id(1);
$_SESSION['name'] = $this->loginData;
$_SESSION['logged'] = 1;
$_SESSION['cookie'] = $random;
setcookie("data",$random,0,"/");
}
//Sample code to authenticate a user:
//it checks if the user is logged in and if the user's cookie is what it is
//supposed to be, otherwise kills the session in the server
if($_SESSION['logged'] != 1 || $_SESSION['cookie'] != $_COOKIE['data']){
$_SESSION = array();
session_destroy();
setcookie("data","",time()-3600);
header("Location: $adminLogInPage");
die;
}
这会是安全性和性能之间的良好权衡吗?还是完全没有必要?
我正在考虑为“记住我”功能实现类似的代码,但我不会使用会话,只是使用三重 cookie 系统。一个 cookie 匹配用户,另外两个匹配存储在数据库中的随机值。这是个好主意吗?
考虑到该网站正在使用 SSL,是否存在无法避免的威胁?