内容安全性unsafe-eval策略仅适用于一个URL

时间:2016-08-10 15:25:59

标签: content-security-policy

如何添加指令' unsafe-eval'仅限一个来源?

我正在开发一个cordova应用程序,因为我需要允许来自多个源的script-src(像twitter这样的外部脚本等)。我设置了 meta http-equiv ="内容-Security-Policy :script-src *



<meta http-equiv="Content-Security-Policy" content="default-src * 'unsafe-inline' data: gap: * 'unsafe-eval'; style-src 'self' 'unsafe-inline'; script-src * 'self' 'unsafe-inline' 'unsafe-eval';">
&#13;
&#13;
&#13;

这有效,但它很危险,因为它是敞开的。

所以我想添加&#39; unsafe-eval&#39;仅适用于需要它的脚本(在我的示例中为https://maps.googleapis.com

有可能吗?

1 个答案:

答案 0 :(得分:7)

你不能。

策略中的

'unsafe-eval'不是某种应用于某个特定脚本源的标志或属性。相反,它本身就是一个脚本源,正如您在CSP规范的摘录中所看到的那样:

source-expression = scheme-source / host-source / keyword-source / nonce-source / hash-source
scheme-source     = scheme-part ":"
host-source       = [ scheme-part "://" ] host-part [ port-part ] [ path-part ]
keyword-source    = "'self'" / "'unsafe-inline'" / "'unsafe-eval'"

此外,即使你可以,这也不能保护你免受其他一些脚本的攻击,这些脚本会触发map api代码中的不安全eval,并使用自己的字符串进行评估。

看一下CSP unsafe-eval using Google Maps API,也许你可以完全摆脱'unsafe-eval'