这是我当前的会话管理:
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 问题的计划仅使用 IP 地址的前 3 部分。但我担心的是攻击者能够嗅探标头等。那我就不会被保护了吧?如果我是受害者网络中的攻击者,我只需在嗅探一个响应标头后发出一个快速 GET 请求,我将获得重新生成的随机数。真的有办法防止这种情况吗?
如果它不会太多,我也希望对我的方法有所了解。如何避免这种情况?我错过了什么大事吗?