如何在IIS中将随机数用于内容安全策略?

LP1*_*P13 6 asp.net security asp.net-mvc content-security-policy

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

@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)

我想Content Security Policy为此网站实施。该站点托管在IIS中。所以在IIS中我添加content-security-policy标题HTTP Response Header

 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仅建议将属性用于内联脚本编制吗?
2.如何将随机生成的随机数添加noncescript标记中,重要的是IIS如何知道随机生成的随机数,以便它可以包含在响应标头中?(我假设每个响应都将具有唯一的现时值)

小智 3

  1. nonce属性仅用于内联脚本。如果您想确保其他来源的来源安全,您可以使用hash
  2. 默认情况下,IIS 不提供随机数生成。您需要在后端处理它。

    我。定义一个帮助程序来生成随机数字符串,名为CreateNonce()。字符串长度并不那么重要,但您需要确保它是唯一的值。所以,如果你定义一个包含字母数字字符的10-20长度的字符串,那就没问题了。您将在视图上调用此方法,其中包含内联脚本。例如:<script <%CreateNonce()%> 当您调用此帮助程序时,它将返回生成随机数值的输出,例如。<script nonce-123abc>并调用另一个助手,这将在以下步骤中进行解释。

    二. 定义另一个帮助程序,为内联脚本的响应标头创建 CSP 规则,名为CSPGenerator(). 当您调用此方法时,Content-Security-Policy如果响应头不存在,它应该创建一个响应头。如果标头存在,则应将新的随机数值附加到该标头。

伪代码(抱歉,我不是 ASP.NET 开发人员);

Views.cshtml 

<script <%CreateNonce()%> >

Helpers.cs

Public CreateNonce(){
generateRandomAlphaNumericChars
CSPGenerator('apply-to-csp-rules:generateRandomAlphaNumericChars')
and response.write generateRandomAlphaNumericChars
}

Public CSPGenerator(str nonce_){
GetHttpResponse[csp],
if null, add new response header,
response.header.append="script-src "+ nonce_
}
Run Code Online (Sandbox Code Playgroud)