在iframe中启用CSP的unsafe-eval

时间:2018-01-10 23:51:48

标签: javascript iframe eval content-security-policy

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

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

1 个答案:

答案 0 :(得分: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上涵盖“通过iframe包含的任何资源的CSP规范部分,{{ 1}},或object

  

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

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

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