设置 cookie-path 是否可以保护我免受另一个上下文的 XSS 攻击?

信息安全 xss 饼干
2021-09-03 10:24:10

假设我正在使用带有 URL 重写的反向代理,它提供对 2 个不同应用程序的访问

http://www.example.com/app1/http://www.example.com/app2/

我不希望这些应用程序能够访问彼此的 cookie,尤其是因为我想只包含一个应用程序的潜在 XSS 漏洞。相应地设置 cookie 的路径是否足够?在这种情况下未设置 http-only 标志。

如果设置 cookie 路径还不够,我会感兴趣应该采取哪些额外步骤。

4个回答

不可以。JavaScript 同源策略允许您从同一主机名上的任何其他文档(+方案+端口)执行给定主机名上的任何文档中的代码。

受感染的代码www.example.com/app1可以通过例如表单、iframe 和 AJAX 进行交互www.example.com/app2,使其几乎完全能够伪装成真正的用户——这不仅仅是泄露 cookie 的问题。CSRF 保护对您没有帮助,因为 CSRF 令牌本身可以被脚本代码读取。

cookie的path=功能仅用于防止意外冲突;它没有安全价值。如果两个应用程序完全相互信任,您应该只将它们反向代理到相同的主机名中。

否则,请查看子域或完全独立的域。(子域会阻止应用程序读取彼此的 cookie,但不会阻止domain=cookie 被用于使 cookie 可用于其他站点。这通常不是安全问题,但当它掩盖真正的 cookie 时可能会令人烦恼并停止应用程序工作。)

www.example.com 上的 XSS 漏洞意味着可以读取与该域相关的所有 cookie,而不管路径如何。 (如果 app1 是 http 而 app2 是 https 会略有不同,但我想它们不是,而且很少会出现这种情况)。

子域可以工作,例如。app1.example.com 与 app2.example.com 有不同的 cookie,假设它们已设置在正确的子域(而不仅仅是 example.com)。

由于 XSS 漏洞,cookie 有可能app1被窃取。app2由于您特别提到了 XSS,因此在第一个应用程序的客户端浏览器中运行 javascript 的基于 DOM 的 XSS 可以读取第二个应用程序中的 cookie,因为域名是相同的www.example.com

例如 - 如果app1易受 XSS 攻击,那么http://www.example.com/app1/submit.php?subject=<SCRIPT>alert(document.cookie);</SCRIPT>也会读取设置的 cookie http://www.example.com/app2/

读取 cookie 后,可以使用 javascript 将其发布到其他地方。这与 cookie 路径和 CSRF 无关。所以设置 cookiepath不会让你免于 XSS 窃取其他应用程序的 cookie。

您也应该考虑CSRF 攻击

在 cookie 中添加路径只会避免 cookie 在两个应用程序之间共享,它不适用于 XSS。

对于 CSRF 攻击,如果有人在您的两个应用程序中连接,并且其中一个有 XSS 缺陷,我可以创建一个表单帖子,将内容放入另一个应用程序,例如删除条目。