我需要将Vega-js库(new Function()
evals的重度用户)嵌入到具有锁定CSP的站点中(不允许使用eval)。我一直在探索两种选择,并希望获得有关最佳路径的反馈:
nonce
- 通过nonce
指令提供eval-using脚本,希望不会触发eval()错误。这个假设可能不正确 - 我仍然试图理解nonce
限制。<iframe sandbox='allow-scripts'>...</>
中,并通过消息与其进行通信。我不知道锁定网站上的<iframe>
是否可能拥有比其父级更宽松的安全设置(允许evals)。答案 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>