会话劫持与PHP 让我们考虑服务器对用户的信任。

会话劫持与PHP 让我们考虑服务器对用户的信任。,php,security,session,session-hijacking,Php,Security,Session,Session Hijacking,会话固定:为了避免固定,我仅在身份验证(login.php)中使用Session\u regenate\u id() 会话侧劫持:整个站点的SSL加密 我安全吗?阅读OWASP。还可以阅读OWASP,它有时被称为“会话骑行” 您应该在php头文件中使用以下代码: ini_set('session.cookie_secure',1); ini_set('session.cookie_httponly',1); ini_set('session.use_only_cookies',1); sessi

会话固定:为了避免固定,我仅在身份验证(login.php)中使用
Session\u regenate\u id()

会话侧劫持:整个站点的SSL加密

我安全吗?

阅读OWASP。还可以阅读OWASP,它有时被称为“会话骑行”

您应该在php头文件中使用以下代码:

ini_set('session.cookie_secure',1);
ini_set('session.cookie_httponly',1);
ini_set('session.use_only_cookies',1);
session_start();

此代码可防止。它还有助于防止xss通过访问
document.cookie
,这是可能发生的一种方式。强制使用HTTPS-only cookies是解决OWASP的一种好方法。这种使用HTTPS的方式有时被称为“安全cookies”,这是一个可怕的名称。也是一个非常酷的安全功能,但并非所有浏览器都支持它。

我还建议在会话中存储用户代理和ip信息,并在每次请求时验证它。它不是防弹的,但它的健壮性有了相当大的提高。虽然UA锻造真的很容易,但IP锻造虽然可能,但要困难得多。。。但是,您可能会遇到使用循环IP系统的用户的问题,例如AOL用户…

我发现的最佳做法是将会话数据保存到数据库或文本文件中。 数据库将有用户代理和IP记录,并检查每个请求,以确保会话从未被其他人劫持


例如,如何在数据库中保存会话,您可以在CodeIgniter会话库中看到实现。在我看来,这种方式相当节省,以防止有人去hijact会话

这是一个什么样的网站?@MRXEXX编辑了一个开发者不希望被黑客攻击的网站。@Rook,我在和OP谈话,这是一个真实的问题,你的评论既滑稽又毫无帮助。@delete me为什么重要?人们需要保护用户免受会话劫持等攻击。遗憾的是,大多数开发人员不关心或不知道如何阻止此类攻击。由于三方握手,互联网上的TCP连接不可能复制“ip伪造”或更常见的ip欺骗。但是,由于公司网络上的负载均衡器或wifi热点的变化,合法用户的ip地址可能会在会话期间发生变化。这是很有可能的。它只需要一个MITM类型的攻击(攻击者可以访问其中一个端点路由器,然后可以做他们想做的事情)…如果你可以访问路由到该IP的数据包,这不是“伪造”。检查用户代理毫无意义,因为这是一个攻击者控制的变量。将会话id存储在数据库中意味着sql注入使攻击者能够立即访问系统,因此他不需要破坏密码散列即可登录。检查ip地址容易出错,因为这在合法系统上可能会更改,例如,如果他在公司网络上的负载平衡器后面。@Rook-您假设数据库易受SQL注入攻击。正确使用预先准备好的语句或存储过程,以及正确清理参数,将不允许SQL注入。@AgmLauncher这相当于在数据库中以明文形式存储密码。一个人必须为失败做好计划。好吧,Rook,你提供一个实际的解决方案,而不是仅仅说其他(经验证的)解决方案有什么问题?我只是觉得你认为数据库中的会话管理是一个坏主意是很可笑的。你的答案至少应该是+10,我的投票给你了。为了确保我理解,有几个问题:1)
cookie\u secure
会强制我在会话中始终使用https,不是吗?!2)
cookie\u httponly
做什么?我读过PHP的解释,但当它说阻止JS读取cookie时,我不明白,实际上,在很多情况下,cookie应该由JS读取。谢谢,仅供参考:从PHP5.3.0
会话开始。默认情况下,仅使用cookies
为1