让我们考虑一下服务器对用户的信任。
会话固定:为避免固定,我只在身份验证中使用session_regenerate_id()
(login.php)
会话sidejacking:整个站点的SSL加密。
我安全吗?
答案 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会话。