跨站脚本攻击和同源策略

Posted

技术标签:

【中文标题】跨站脚本攻击和同源策略【英文标题】:Cross site scripting attacks and same origin policy 【发布时间】:2011-10-24 03:43:46 【问题描述】:

我熟悉持久性和非持久性XSS。 我也知道Same origin policy 可以防止/限制源自一个网站页面的请求转到另一个网站服务器。这让我觉得同源策略至少可以阻止非持久类型的 XSS 攻击(因为在持久类型的攻击中,恶意代码的来源将与被盗的私人信息相同)。 我的理解正确吗?可以使用 SOP 来阻止/减少这些攻击吗?

编辑:好的,我在浏览器端的 2 个脚本之间调用方法和在另一个网站上调用诸如 HTTP POST 之类的方法之间感到困惑。谢谢jakber的回答。

现在我还有一个问题,SOP 不能阻止Cross-site request forgery 吗? ***中给出的示例谈到 Bob 访问了由 Mallory 在聊天论坛上创建的恶意图像标签。但是,根据 SOP 规则,恶意脚本不应该能够访问银行的 cookie。我在这里遗漏了什么吗?

【问题讨论】:

SOP 不是您开始或停止的事情。它总是应用在你的浏览器中,所以很遗憾它不会停止 CSRF。将来也许像 CSP 这样的东西可能能够阻止这些攻击,但目前基于令牌的方法是避免 CSRF 的最佳方法。 【参考方案1】:

通常不会。

非持久性或反射型 XSS 攻击利用在没有适当清理的情况下作为页面内容回显的输入,而不是持久化它。在这两种情况下,注入的脚本似乎都来自被利用的域。

例如,如果您在 php 中执行此操作:echo $_GET['param'] 并将指向该页面的链接发送给包含以下内容的人 ?param=<script>alert('got you!');</script> 这是一种非持久性XSS攻击,与同源策略无关。

同源意味着你不能直接注入脚本或修改其他域的DOM:这就是为什么你需要找到一个XSS漏洞开始。

【讨论】:

感谢您的回答。您对我的新编辑有任何意见吗? SOP 不适用于图像、样式、iframe 和脚本元素的 src,也不适用于表单的目标。然而,它确实适用于 XmlHttpRequest,因此它可以防止这种针对 CSRF 的特定攻击向量。另见owasp.org/index.php/…【参考方案2】:

SOP 通常不能阻止 XSS 或 CSRF。

对于 XSS,jakber 的回答已经提供了很好的解释。我只想补充一点,称此漏洞为“跨站点”的原因是攻击者可以将代码(例如<script src="...">)注入目标页面,从另一个网站加载恶意javascript,这通常由攻击者控制。 SOP 不会拒绝从其他网站加载 Javascript,因为这样做会破坏 Web。

对于 CSRF,大多数情况下 SOP 无法阻止它,因为 SOP 不会阻止网站 A 向网站 B 发送 GET 和 POST 请求。

【讨论】:

如果我理解正确,SOP 确实会阻止 GET。这确实是 SOP 的重点,以防止脚本静默使用经过身份验证的浏览器(通过 cookie 进行身份验证)从其他页面读取文件(因为如果浏览器已经过身份验证,这些来源可能是机密的)。另一方面,POST 是允许的。 @Magnus 根据Mozilla,网页可以嵌入其他来源的JavaScript。

以上是关于跨站脚本攻击和同源策略的主要内容,如果未能解决你的问题,请参考以下文章

XSS跨站脚本小结

xss攻击

XSS 漏洞介绍

XSS小白基础篇

如何解决跨站点请求伪造

如何检测SQL注入技术以及跨站脚本攻击