拒绝执行Redocly的内联脚本

时间:2020-10-22 08:56:28

标签: javascript html content-security-policy

尝试redoc-clihttps://github.com/Redocly/redoc/)生成静态文档。这些错误没有运气。看来Content-Security-Policy根本不允许JS代码。

Refused to execute inline script because it violates the following Content Security Policy directive: "script-src 'self'". Either the 'unsafe-inline' keyword, a hash ('sha256-g6NjhUYDGd6SXSIYkvuQkZhdbtqx8hqNKVM8JKvqpy4='), or a nonce ('nonce-...') is required to enable inline execution.

<meta
    http-equiv="Content-Security-Policy"
    content="
base-uri;
connect-src *;
default-src * 'unsafe-inline' 'unsafe-eval' data: gap: https://ssl.gstatic.com;
font-src * data:;
form-action;
img-src * data:;
manifest-src *;
media-src;
object-src *;
report-to;
script-src * 'unsafe-inline' 'unsafe-eval';
script-src-attr * 'unsafe-inline' 'unsafe-eval';
script-src-elem * 'unsafe-inline' 'unsafe-eval';
style-src * data: 'unsafe-inline';
style-src-attr * data: 'unsafe-inline';
style-src-elem * data: 'unsafe-inline';
">

更新

最终确定。

服务器应发送以下标头:

“ Content-Security-Policy” =“ script-src blob:” “ Content-Security-Policy” =“ worker-src blob:”

HTML应该具有manifest.json和其他字段:

{
  "content_security_policy": "script-src * 'unsafe-inline' 'unsafe-eval'",
  "csp": "script-src * 'unsafe-inline' 'unsafe-eval'"
}

1 个答案:

答案 0 :(得分:1)

从错误您可以看到,拒绝执行内联脚本,因为它违反了以下内容安全策略指令:“ script-src'self'发生在script-src 'self'中。 但是您的meta标签中的CSP没有这个。

这意味着您实际上已经发布了另一个CSP。通常,应用中间件具有通过HTTP标头发布的默认CSP,但从技术上讲,您也可以具有2个元标记CSP。 如果有2个CSP,则采用较严格的CSP。

检查2 <meta http-equiv="Content-Security-Policy"的HTML代码,并在开发人员工具中检查Content-Security-Policy HTTP标头(here是一个教程)。

修复上述问题后

    meta标记不支持
  • report-to指令,因此可以将其删除
  • script-src-attr / script-src-elem 指令不支持
  • 'unsafe-eval'令牌。这是页面的全局标志,只能在 script-src / default-src 中使用(请参见第4段的note)。
  • style-src-attr 指令不支持
  • *data:。它控制标记中的style='...'属性,并且那里没有使用任何方案源。
  • script-src-attr 指令不支持
  • *。它控制onClick='...'之类的事件处理程序,或<a href='javascript:...'之类的javascript导航,除了javascript:之外,没有其他使用任何方案源。

完整check-list of errors。但是您可以在CSP中忽略上述内容,浏览器只会忽略这些内容。