Kos*_*ika 3 html javascript security iframe same-origin-policy
我在应用程序中动态创建一个iframe,结果如下所示:
<iframe src="blob:http%3A//localhost%3A9292/0194dfed-6255-4029-a767-c60156f3d359"
scrolling="no" sandbox="allow-scripts allow-popups allow-same-origin"
name="sandbox" style="width: 100%; height: 100%; border: 0px;"></iframe>
Run Code Online (Sandbox Code Playgroud)
具有这样的沙盒配置是否安全(特别是允许将iframe内容视为来自同一来源)?
Sil*_*Fox 11
您在 IFrame 上设置了以下带有 Blob URL/Object-URL 的内容。
allow-scriptsallow-popupsallow-same-origin我假设 IFrame 的内容是从用户/不受控制的输入生成的,并且可能包含 HTML 和/或脚本。
首先,让我们一一回顾一下。
这允许 IFrame 内的 JavaScript 代码运行。这可能很危险,具体取决于设置的其他值。
只有allow-scripts这样,任何脚本都可以
fetch,尽管IFrame 无法读取任何响应。例如,向恶意用户的 Web 应用程序发送跨站点请求伪造 (CSRF) 攻击或“打电话回家”。请注意,与普遍看法相反,AJAX 可以发送到任何来源( Cross-origin writes are typically allowed),同源策略仅阻止读取响应,而不阻止写入。此外,它只能发送与外部托管网页相同的 CSRF 攻击 - 如果没有allow-same-origin.document.location- 请注意,这是在 IFrame 内,而不是在 IFrame 之外。allow-forms,因为攻击者可以简单地使用 JavaScript 将数据 POST 到他们自己的站点。允许从链接或 JavaScript 打开新窗口/选项卡。后者也需要allow-scripts设置。
如果文档的来源兼容,则允许使用相同的来源。请注意,这不会覆盖任何默认来源 - 也就是说,攻击者无法在 IFrame 中托管 Twitter.com 并使用它来访问页面内受害者的 cookie 或 CSRF 令牌,也不能简单地加载 Twitter.com并假装内容是从与父级相同的来源生成的。
对于 Blob URL/Object-URL,这会影响将 IFrame 设置为与其父级具有相同的起源,从而使您可以读取和操作您创建的 IFrame 中的对象。
如果没有allow-scripts设置,这一切本身就是允许您的外部 IFrame 操作和读取对象,但是,这样allow-scripts可以允许 IFrame 操作和读取父级(即您的页面)中的对象,这是不安全的。
因此,由于allow-scripts和,此设置会在您的应用程序中引入跨站点脚本 (XSS) 缺陷allow-same-origin。最好考虑不需要的替代解决方案来解决这个问题allow-same-origin。我不确定您到底希望通过问题中的这个值实现什么目标,但在大多数情况下可以找到替代方案。
小智 7
正如Namey所评论的那样,allow-same-origin不允许将iframe与父对象视为同一来源,并且可以安全使用(除非父对象和iframe具有相同的来源,请参见:MDN警告)。
带框架的文档被加载到唯一的原点中,这意味着所有相同来源的检查都将失败。独特的起源从未与其他起源相匹配,甚至连他们自己也没有。除其他影响外,这意味着文档无权访问存储在任何原始Cookie或任何其他存储机制(DOM存储,索引DB等)中的数据。
allow-same-origin不安全。这将使 iframe 能够访问父数据(例如本地存储)
还allow-same-origin允许 iframe 向父级的 api 发出 ajax 请求,这也可能是有害的。
然而,对于 iframe 访问父级的数据,它还需要执行脚本,所以allow-same-origin没有allow-scripts是无害的
至于allow-popupsiframe,除了它可以打开其他url之外,没有什么不安全的事情可以做
| 归档时间: |
|
| 查看次数: |
8096 次 |
| 最近记录: |