Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 会话管理和安全_Php_Security_Session Management_Session Hijacking - Fatal编程技术网

Php 会话管理和安全

Php 会话管理和安全,php,security,session-management,session-hijacking,Php,Security,Session Management,Session Hijacking,这是我当前的会话管理: 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(!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部分的计划。但我担心的是,攻击者能够嗅探头等等。那我就不会受到保护了,对吧?如果我是受害者网络中的攻击者,我只需在嗅探一个响应头后发出一个快速获取请求,就可以获得重新生成的nonce。真的有办法防止这种情况吗


如果不是太多的话,我也希望能对我的方法有所了解。如何才能避免这种情况?我是否遗漏了一些重要信息?

为了防止嗅探标头,您需要通过SSL/TLS保护连接。

如果用户在服务器端更新nonce后但在用户收到新cookie之前发出新请求,则重新创建nonce的方法将失败

例如,如果用户在页面加载失败后点击了F5,或者在新窗口/选项卡中打开了大量链接,就会发生这种情况

放弃IP检查的想法。由于许多原因,IP地址可能会完全改变。例如,考虑负载平衡代理或移动用户切换漫游区域

可以检测到用户代理的更改,您可以询问他们的密码,但是让他们重新登录(并重新启动他们所做的事情)对用户来说不是很友好

总而言之,您正试图使用基于cookie值的会话来保护系统免受会话窃取。为此,您需要SSL,所有其他选项在安全性方面几乎没有作用。基于cookie的会话令牌是目前公认的管理会话的方法,并且被认为是足够安全的


而且,CSRF攻击比会话劫持攻击危险得多,而且您不会用您的建议阻止这些攻击。因此,我的建议是:首先关注该领域。

如果您使用的是SSL,那么您就脱离了困境。如果没有,总有办法嗅探登录凭据、会话cookie或普通cookie,并使用它们伪造身份。您可以做的是在数据库中存储尽可能多的信息,并在每次请求完成时检查它们。这可能包括浏览器、操作系统等。由于cookie绑定到通常安装在一台pc上的浏览器,因此您可以识别更改并做出相应反应。我明白了。我从来没有想过那种情况!我真的希望有另一种方法来实现会话劫持预防,而不是SSL,因为我注意到即使是“大”站点也不会在其所有页面中使用SSL。我已经在阅读CSRF,我想我真的必须重做我的链接和表单,包括“交易令牌或nonce”和真正重要的交易,以要求重新验证。我从来没想到保护自己不受这些伤害会这么难!谢谢