CORS 和 XSS 有啥联系吗?
Posted
技术标签:
【中文标题】CORS 和 XSS 有啥联系吗?【英文标题】:Does CORS and XSS have any connection?CORS 和 XSS 有什么联系吗? 【发布时间】:2015-04-16 03:48:57 【问题描述】:在CORS 的***页面中提到了跨站点脚本 (XSS)。但我看不出它们是如何相关的。 CORS 和 XSS 有什么关系?
【问题讨论】:
如果您利用 XSS 漏洞从允许的来源发出请求,则可以使用 XSS 绕过 CORS 的限制。 @Gumbo 我不确定我是否明白你的意思。假设站点 A 的页面存在 XSS 问题。我将 B 站点的脚本注入 A 的页面。 A 在站点 C 的允许站点列表中。所以现在注入的 B 脚本可以访问 C 中的内容。但是我认为 B 脚本仍然必须遵循 CORS 标准,例如添加一些必要的标头才能与 C 通信。 没错。但浏览器会自动为您执行此操作。 @SilverlightFox 如果您添加更多内容,我将不胜感激。但是我可能需要一些时间才能回到这个线程。这些天我有点忙于别的事情。对此感到抱歉。谢谢。 :) 【参考方案1】:***文章中提到了与 JSONP 相关的 XSS,而不是 CORS。
在 JSONP 中,您引用的页面包含您希望在页面中包含客户端的数据,如下所示:
<script src="https://example.com/jsonp.aspx?callback=foo"></script>
然后,您的页面上有一个名为 foo
的 javascript 函数,外部站点(在本例中为 example.com
)将调用该函数来传递客户端所需的数据。
但是,如果 example.com
受到威胁,并且您信任 example.com
作为脚本的来源,攻击者可以将您的网站带走并拥有客户端代码。例如,他们可能会将访问者重定向到他们自己的网站,向自己发送访问者的 cookie 或注入 Javascript 键盘记录器,而不是调用您的 foo
函数。
虽然使用 CORS,但如果 example.com
设置正确的标头以允许您的网站对其进行 AJAX 调用并检索数据,那么您应该将数据视为不受信任的输入,而不是html,您的网站不太可能受到威胁。它确实取决于数据是什么 - 如果它实际上是预格式化的 HTML 并且您按原样输出它,那么受感染的外部站点仍然可能通过 XSS 影响您的数据 - 但是,JSONP 绝对是这种情况。
另外一点是,如果您的网站上有任何 XSS 错误,那么任何 CORS 限制都会变得无关紧要。攻击网站将能够使用 XSS 漏洞在 DOM 级别“绕过”Same Origin Policy,而不是通过XHR。如果他们需要一些只能通过 AJAX 请求从您的源中检索到的信息,他们只需使用 XSS 攻击来注入执行此操作所需的脚本并将其发送回他们自己的域。
【讨论】:
【参考方案2】:https://www.e-systems.tech/documents/20143/30947/main.pdf
是的,它们之间的联系非常紧密。当我遇到这个未答复的线程时,我正在研究此事。基本上,对于小型、简单、公开的内容来说,应该不成问题。
但是,随着通过 CORS 的集成在更具交互性和更复杂的应用程序中增加,XSS 可以在易受攻击的系统上用于攻击我们的系统。例如,蠕虫通过 XSS 进行自我传播,可以将易受攻击的系统用作传递机制,但是,它的目标可能是我们的系统。
在我的研究中,我发现 CORS 会导致最常见的漏洞问题,尤其是混合和多级攻击;像 XSS-CSRF 这样的对。
没有进一步讨论我的所有发现(这是一篇大论文),如果你真的想通过 CORS 集成系统,应该对所有参与资源共享的合作伙伴进行漏洞评估。根据应用领域的不同,如果涉及敏感数据,就会出现法律问题(例如,如果发生违规,谁来负责)。 (复杂性很少是合理的)。
要在复杂系统上正确使用 CORS,应该有安全专家参与。如果系统要与多个合作伙伴和针对不同资源的策略一起发展,则应将安全性嵌入到架构中以动态验证约束。
似乎很清楚,对于日常使用,CORS 应该用于有限的应用程序,没有敏感数据或只有真正的公共资源,除非您真的信任合作伙伴的安全性 - 并正确实施所有配置.如果您正在构建服务器端架构,这是有效的,但反之亦然,因为需要信任要添加到客户端的内容。
【讨论】:
您的论文是否已在线发表/提供? 还有:blog.portswigger.net/2016/10/… 文章搬家:e-systems.tech/est-framework/-/knowledge_base/cors/cors【参考方案3】:例如:您可以将允许您窃取用户 cookie 的 js 代码注入某些页面 (xss)。多亏了 CORS,您才能做到这一点。
希望,我不是假的。 也许有人会给你更好的答案。
【讨论】:
以上是关于CORS 和 XSS 有啥联系吗?的主要内容,如果未能解决你的问题,请参考以下文章