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

Din*_*h M 7 javascript iis asp.net-mvc nonce content-security-policy

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

@Scripts.Render("~/Scripts/bootstrap")
@Scripts.Render("~/Scripts/js")
Run Code Online (Sandbox Code Playgroud)

还有一些内联脚本,比如

<script type="javascript">

   // javascript code
</script>
Run Code Online (Sandbox Code Playgroud)

我想为这个网站实施内容安全政策。该站点托管在 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>
Run Code Online (Sandbox Code Playgroud)

因此,每个响应都将包含此标头。

问题:

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

Hal*_*aug 2

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

请注意,您的 script-src 包括 https: 和 http: 将允许它加载 http 和 https 上的任何脚本。如果您的页面通过 https 提供服务,则将不允许活动混合内容,并且 http 上的脚本将不会加载。