【问题标题】:Having trouble to load my java-script files after I implement "Content-Security-Policy" header实现“Content-Security-Policy”标头后无法加载我的 javascript 文件
【发布时间】:2021-07-20 14:23:13
【问题描述】:

我在我的 ASP.NET MVC 项目中实现 Content-Security-Policy 标头,但我的 JS 脚本不起作用。

我添加了这个标签

<add name="Content-Security-Policy" value="default-src 'self'; script-src 'self' https://code.jquery.com" />

如您所见,我为脚本文件添加了 CDN 的源代码。

如果我在末尾添加unsafe-inline,它会起作用,但我相信这不是重点。

任何帮助将不胜感激!

【问题讨论】:

  • "如果我在末尾添加'unsafe-inline',它可以工作,但我相信这不是重点。" 查看浏览器控制台并确保这才是重点。您在页面上有内联脚本。

标签: c# asp.net header content-security-policy


【解决方案1】:

如果我在末尾添加 unsafe-inline 它会起作用,但我相信这不是重点。

如您所见,页面上有一些内联脚本。主要问题是 - 是吗:

  1. &lt;script&gt;...&lt;/script&gt;
  2. 或内联事件处理程序(例如&lt;tag onload='...'
  3. 或javascript:-navigation(例如&lt;a href='void(0)')。

因为 (2) 和 (3) 需要强制 'unsafe-inline'(或代码重构)。
第一个可以通过'hash-value''nonce-value' 允许。

Google Chrome 浏览器中的控制台错误消息与所有这 3 种类型的内联脚本不同:

  1. Refused to execute inline script ...
  2. Refused to execute inline event handler ...
  3. Refused to run the JavaScript URL ...

在 (2) 的情况下,您必须将 some way all &lt;tag onclick='...'&gt; 替换为 addEventListener()

在 (3) 的情况下,您必须将 &lt;a href='void(0)'&gt; 替换为 &lt;a href='#'&gt; 或任何其他方式从标签中删除 javascript 导航。

在 (1) 的情况下,您有选择:

  • 将 Chrome 控制台中违规消息中的 'sha256-...' 添加到 script-src 指令中(如果这些指令不多的话)。

  • 使用'nonce-value'。最简单的方法是使用NWebsecconfigure CSP
    Websec 包包括 HtmlHelpers 以添加脚本和样式“nonce”。

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”。无论如何,无法准确回答如此广泛的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-13
    • 2020-07-06
    • 1970-01-01
    • 2021-08-02
    • 1970-01-01
    • 2016-08-07
    相关资源
    最近更新 更多