【问题标题】:Enabling CSP's unsafe-eval in an iframe在 iframe 中启用 CSP 的不安全评估
【发布时间】:2018-01-10 23:51:47
【问题描述】:

我需要将 Vega-js 库(new Function() evals 的重度用户)嵌入到具有锁定 CSP(不允许 eval)的站点中。我一直在探索两种选择,并希望获得有关最佳途径的反馈:

  • nonce - 通过 nonce 指令提供 eval 使用脚本,希望不会触发 eval() 错误。这个假设可能不正确 - 我仍在尝试理解 nonce 的限制。
  • 将 Vega 图放在 <iframe sandbox='allow-scripts'>...</> 中,并通过消息与其通信。我不知道锁定站点上的<iframe> 是否有可能比其父级具有更宽松的安全设置(允许评估)。

【问题讨论】:

  • 第二个选项目前应该可以使用postMessage。
  • 您说,“我需要将 Vega-js 库(new Function() evals 的重度用户)嵌入到具有锁定 CSP(不允许 eval)的站点中”,然后是其中一个选项你说你正在考虑添加nonce的使用。如果“锁定”意味着您根本无法更改政策,那么您计划如何调整它以包含 nonce 来源还不清楚……
  • @sideshowbarker 我可以调整站点的策略(例如添加nonce),但安全工程师不想为所有站点允许eval。他们可以允许它用于特定的库。
  • 嗯,好的。那么,您所描述的<iframe> 方法似乎绝对是唯一实用的选择。

标签: javascript iframe eval content-security-policy


【解决方案1】:

我不知道锁定站点上的<iframe> 是否有可能比其父级具有更宽松的安全设置(允许评估)。

<iframe> 实际上有可能拥有比其父级更宽松的 CSP 策略。除非它是 <iframe srcdoc=…>,否则它不会从父 CSP 策略继承任何内容,并且与父 CSP 策略完全没有关系。

请参阅 What CSP child iframe inherits from its parent? 的答案以及 https://w3c.github.io/webappsec-csp/2/#which-policy-applies 的 CSP 规范部分,其中涵盖 “通过 iframe、object 或 embed 包含的任何资源”.

nonce - 通过nonce 指令提供使用 eval 的脚本,希望不会触发 eval() 错误。这个假设可能不正确 - 我仍在尝试理解 nonce 的限制。

请参阅 What’s the purpose of the HTML "nonce" attribute for script and style elements? 的答案,了解有关 nonce 工作原理的详细说明。

但即使您使用nonce 将特定脚本“列入白名单”,也不允许该脚本使用eval。有了 CSP 策略,允许使用 eval 的唯一方法是指定 'unsafe-eval'。如果您指定,它将允许文档嵌入的所有脚本使用 eval — 没有办法只允许特定脚本使用 eval 而不允许其他脚本使用。

【讨论】:

    猜你喜欢
    • 2021-09-09
    • 2021-03-20
    • 1970-01-01
    • 2021-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-12
    • 1970-01-01
    相关资源
    最近更新 更多