这是我当前的会话管理:使用只有第3个部分IP地址的会话管理和安全
if(!isset($_SESSION["user"]["authenticated"]) ||
!$_SESSION["user"]["authenticated"])
redirect("login.php");
if($_SESSION["user"]["browserHash"] != md5($_SERVER["HTTP_USER_AGENT"]))
redirect("logout.php?err=browser_mismatch");
if($_SESSION["user"]["IPHash"] != md5($_SERVER["REMOTE_ADDR"]))
redirect("logout.php?err=ip_mismatch");
if(!isset($_SESSION["user"]["nonce"]) ||
$_SESSION["user"]["nonce"] == $_COOKIE["SITE_nonce"])
{
$nonce = md5(mt_rand() . time() . $_SERVER["REMOTE_ADDR"]);
$_SESSION["user"]["nonce"] = $nonce;
setcookie("SITE_nonce", $nonce, (60 * 15), "/path");
}
else
redirect("logout.php?err=nonce_mismatch");
我知道改变IP问题的计划。但我担心的是攻击者能够嗅探标题等。那么我不会受到保护吧?如果我是受害者网络中的攻击者,我只需在嗅探一个响应标头后立即发出一个快速GET请求,然后我将得到重新生成的随机数。有没有真正的方法来防止这种情况?
如果不会太多,我也希望能够洞悉我的方法。这怎么能被规避?我错过了什么大事?
如果您使用的是SSL,那么您已脱身。如果没有,总有办法来嗅探登录凭据,会话cookie或正常的cookie并使用它们伪造身份。你可以做的是在数据库中存储尽可能多的信息,并在每次请求完成时检查它们。这可能包括浏览器,操作系统等。由于cookie与通常安装在一台PC上的浏览器绑定,因此您会识别更改并可能作出相应的反应。 – Sgoettschkes