如何解决实现“Content-Security-Policy”标头后无法加载我的 java 脚本文件
我正在我的 ASP.NET MVC 项目中实现 Content-Security-Policy 标头,但我的 JS 脚本不起作用。
<add name="Content-Security-Policy" value="default-src 'self'; script-src 'self' https://code.jquery.com" />
如果我在最后添加 unsafe-inline
会起作用,但我认为这不是重点。
任何帮助将不胜感激!
解决方法
如果我在最后添加 unsafe-inline 它会起作用,但我相信这不是重点。
如您所见,页面上有一些内联脚本。主要问题是 - 是吗:
-
<script>...</script>
块 - 或内联事件处理程序(例如
<tag onload='...'
) - 或 javascript:-navigation(例如
<a href='void(0)'
)。
因为 (2) 和 (3) 需要强制 'unsafe-inline'
(或代码重构)。
可以通过 'hash-value'
或 'nonce-value'
允许第一个。
Google Chrome 浏览器在控制台错误消息中的所有这 3 种类型的内联脚本都不同:
Refused to execute inline script ...
Refused to execute inline event handler ...
Refused to run the JavaScript URL ...
在 (2) 的情况下,您必须用 some way 替换所有 <tag onclick='...'>
为 addEventListener()
。
在 (3) 的情况下,您必须将 <a href='void(0)'>
替换为 <a href='#'>
或以任何其他方式从标签中删除 javascript navitagtion。
如果 (1) 你有选择:
-
将 Chrome 控制台中违规消息中的
'sha256-...'
添加到script-src
指令中(如果这些指令不多)。 -
使用
'nonce-value'
。最简单的方法是使用 configure CSP NWebsec。
Websec 包包含HtmlHelpers
以添加脚本和样式“随机数”。
ASP 4 中的示例:
@using NWebsec.Mvc.HttpHeaders.Csp
<script @Html.CspScriptNonce()>var inline = 5;</script>
ASP Core 的示例:
<script nws-csp-add-nonce="true">var inline = 5;</script>
或者,您可以override HtmlTextWriter
method将随机数添加到脚本/样式标签中。
由于您没有提供有关您的案例的任何具体信息,因此可能会出现很多“If-Then-Else”。无论如何,无法准确回答如此广泛的问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。