如何添加指令' 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;
这有效,但它很危险,因为它是敞开的。
所以我想添加&#39; unsafe-eval&#39;仅适用于需要它的脚本(在我的示例中为https://maps.googleapis.com)
有可能吗?
答案 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'
。