PHP 会话是基于 cookie 还是 cookie-IP 对?

信息安全 php xss 饼干 会话管理
2021-09-05 16:41:50

我有一个 PHP 网站,我的问题是:

如果有人设法通过 XSS 攻击窃取了我的用户的 cookie,
是否足以让他被识别为用户?
还是他的 IP 也必须与登录用户相同?

我的 php.ini 将 session.use-cookies 和 session.use-only-cookies 设置为 true

2个回答

仅限 Cookie;当然,没有什么能阻止你这样做:

if (empty($_SESSION['ip']) {
  $_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
} else {
  if ($_SESSION['ip'] != $_SERVER['REMOTE_ADDR']) {
    // IP changed
  }
}

请注意,通过 IP 地址识别用户只是权宜之计,我认为它与安全性无关——例如,大型组织使用 NAT,因此多台计算机将在整个 Internet 上显示为具有相同的地址。反之,例如移动用户的IP地址可能经常变化,所以不要自动假设“相同的IP地址==相同的用户,不同的IP地址==不同的用户”。

进一步关注:IPv4 和 IPv6 双栈、IPv6 隐私扩展等。

PHP 'SESSION' cookie 不包含开箱即用的 IP 地址信息。正如 Piskvor 所展示的,可以将其与该信息相关联,但这样做可能会破坏某些用户的应用程序。请参阅OWASP 关于IP 地址绑定可能导致的问题的讨论。