如何在 ASP.NET MVC 4 中为 CSP 使用动态随机数

Posted

技术标签:

【中文标题】如何在 ASP.NET MVC 4 中为 CSP 使用动态随机数【英文标题】:How to use dynamic nonce in ASP.NET MVC 4 for CSP 【发布时间】:2020-02-06 09:41:53 【问题描述】:

我在 ASP.NET MVC 4 中开发了 MVC 应用程序。我在几个页面中使用了 javascripts。一些javascript被引用为

@Scripts.Render("~/Scripts/bootstrap")
@Scripts.Render("~/Scripts/js")

还有一些像

这样的内联脚本
<script type="javascript">

   // javascript code
</script>

我想为此网站实施内容安全政策。该站点托管在 IIS 中。所以在 IIS 中,我在 HTTP 响应标头中添加 content-security-policy 标头作为

object-src 'none';
 script-src 'nonce-random' 'unsafe-inline' 'unsafe-eval' 'strict-dynamic' https: http:;
 base-uri 'self';
 report-uri https://csp.withgoogle.com/csp/<unique_id>/<application_version>

所以每个响应都会包含这个标头。

问题:

    如何将随机生成的 nonce 添加到脚本标签中,重要的是 IIS 如何知道随机生成的 nonce 值,以便它可以包含在响应标头中? (我假设每个响应都有唯一的 nonce 值)

【问题讨论】:

【参考方案1】:

插入 nonce 标签,尤其是在 CSP 中匹配它们通常很棘手。如果您的脚本代码是静态的并且不包含任何更改,那么根据它们的哈希将它们列入白名单会容易得多。如果您删除“不安全内联”,许多浏览器会告诉您需要添加哪些哈希。

请注意,您的 script-src 包括 https: 和 http: 将允许它在 http 和 https 上加载任何脚本。如果您的页面通过 https 提供,则不允许使用主动混合内容,因此不会加载 http 上的脚本。

【讨论】:

以上是关于如何在 ASP.NET MVC 4 中为 CSP 使用动态随机数的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Telerik Grid 中为 ASP.NET MVC 绑定图像

如何在 HTML 中为 ASP.NET MVC 创建一个按钮? [复制]

如何在 ASP.NET MVC 中为有效字段设置绿色边框

如何在 ASP.NET MVC 网站中为 cookie 设置“安全”标志?

如何使用 jquery 或 ajax 在 c#/asp.net 中为 MVC 项目更新 razor 部分视图

我们如何在 ASP.NET MVC 中为整个区域设置授权?