2011-08-24 153 views
2

我对Web开发非常陌生,并且阅读了有关CSRF,XSS和会话劫持的内容。一个建议的解决方案是简单地使用nonce来检查请求的有效性。我在PHP中编写了这个脚本来防止会话劫持。我认为它重新生成会话ID的意义相似,因为标识符或它们的组合(会话ID和随机数)在每个请求时都会更改。实施会话劫持预防,正确

if(!isset($_SESSION["user"]["nonce"]) || 
    $_SESSION["user"]["nonce"] == $_COOKIE["SITE_nonce"]) 
{ 
    $nonce = md5(uniqid()); 
    $_SESSION["user"]["nonce"] = $nonce 
    setcookie("SITE_nonce", $nonce, 0, "/path"); 
} 
else 
    die("Invalid Request"); 

这够了吗?我真的不知道我能否买得起SSL,而且我知道这对于会话劫机者来说是一个很好的解决方案,但我希望对这种方法有所了解。我错过了什么吗?

回答

0

这是一个很常见的问题 - 以前讨论过很多次。我建议你访问安全页面,如http://owasp.com/index.php/Main_Page为一堆非常好的指南。

至于你的实现:你也可以存储某种你第一次生成的哈希得到一个会话和一个IP。此外,我想饼干上好时光。

+0

感谢您的链接。我开始浏览一些页面,并且看到我的实现符合Page Tokens!如果它太多了,我真的不明白你在第二段有关散列的含义(我得到了关于cookie的部分,但不是前者)。 –

+0

@Rolando Cruz我所做的是md5(IP,用户名和密码传递阶段),并将其存储在特定用户的“散列”字段下。所以当有人回来(用cookie)时,我会比较这些哈希值,如果不匹配。然后我登录它,将它们踢出去,并可能让它们停留几分钟。 – Luke

+0

啊。我懂了。我以为你是第一次访问该网站。在这种情况下,我想我也会将'HTTP_USER_AGENT'的值添加到哈希中。谢谢! –