11

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

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

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

我安全吗?

4

3 回答 3

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();

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

于 2010-08-18T23:42:54.083 回答
2

我还建议将用户代理和 ip 信息存储在会话中,并在每个请求上进行验证。它不是万无一失的,但它在鲁棒性方面有了相当显着的提高。虽然 UA 锻造真的很容易,但 IP 锻造虽然可能,但要困难得多……但是您可能会对循环 IP 系统背后的用户(例如 AOL 用户)有疑问……

于 2010-08-19T00:01:13.433 回答
0

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

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

于 2010-08-19T03:09:16.647 回答