【发布时间】:2015-04-15 04:53:45
【问题描述】:
我读过关于防止会话固定的session_regenerate_id()。
如果有人在中间发起攻击,并窃取了生成的 id,则使用该会话登录。
然后真正的用户将被注销,进行攻击的人将获得对用户帐户的访问权限。
如何防止这种情况发生?
【问题讨论】:
-
@Scopey 是对的。仅通过使用 HTTP 连接。
我读过关于防止会话固定的session_regenerate_id()。
如果有人在中间发起攻击,并窃取了生成的 id,则使用该会话登录。
然后真正的用户将被注销,进行攻击的人将获得对用户帐户的访问权限。
如何防止这种情况发生?
【问题讨论】:
对中间人攻击最有效的防御是 HTTPS。您可以使用 session_set_cookie_params (docs) 将会话 cookie 参数设置为仅通过安全连接传输 cookie。
因为只有客户端/服务器知道如何加密/解密请求数据,所以中间人攻击要困难得多。
否则,很难在不安全的连接上实现对中间人的防御
【讨论】:
反黑客措施
我完全同意 scopey,但会更进一步,使用session_regenerate_id(true); 删除旧会话文件,因为这告诉 php 删除磁盘上此会话的关联文件。为什么将不再需要的文件保存在服务器上?
另一种反会话黑客措施是存储客户端 ip 的前两个八位字节(当它们被很好地加密时可能会更多,但我还没有那么多数据隐私知识),并且可能会在数据库中存储更多客户端详细信息,以便进行比较与当前的客户详细信息。这些数据,尤其是 ip,应该被加密,并在会话过期后立即完全删除。
结论
有几种方法可以检查授权,所有这些方法都是关于使用 https、重新生成会话 ID、删除过时的会话文件以及在服务器上的第一次请求时存储客户端详细信息,以便将它们与当前客户端详细信息进行比较。
您需要多少安全性取决于应用程序的用途。当涉及银行数据时,例如您最好实施比您认为必要的更多的反黑客措施。一个简单的博客,注册用户只能发表评论,不需要太多的反黑客措施。
记住
您的应用越安全,它的用户友好性就越低。
【讨论】: