会话劫持和PHP

时间:2010-08-18 22:45:59

标签: php security session session-hijacking

让我们考虑一下服务器对用户的信任。

会话固定:为避免固定,我只在身份验证中使用session_regenerate_id()(login.php)

会话sidejacking:整个站点的SSL加密。

我安全吗?

3 个答案:

答案 0 :(得分:28)

阅读OWASP A3-Broken Authentication and Session Management。另请阅读有关OWASP A5-CSRF的内容,有时也称为“会话骑行”。

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

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

此代码会阻止session fixation。它还有助于防止xss访问document.cookie,这是Session Hijacking可以发生的一种方式。仅强制使用HTTPS是解决OWASP A9-Insufficient Transport Layer Protection的好方法。这种使用HTTPS的方式有时被称为“安全cookie”,这是一个可怕的名称。此外,STS是一个非常酷的安全功能,但并非所有浏览器都支持它(<)。

答案 1 :(得分:2)

我还建议在会话中存储用户代理和IP信息,并在每个请求上验证它。它不是防弹的,但它在稳健性方面是一个相当显着的增长。虽然UA锻造非常简单,但IP锻造虽然可能,但要困难得多......但是,对于像AOL用户这样的循环IP系统的用户而言,您可能会遇到问题......

答案 2 :(得分:0)

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

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