如何在IIS中使用nonce进行内容安全策略?

时间:2017-03-13 18:14:51

标签: asp.net asp.net-mvc security content-security-policy

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

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

还有一些内联脚本,如

<script type="javascript">

   // javascript code
</script>

我想为此网站实施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>

所以每个回复都会包含此标题。

问题
 1. nonce属性是否仅建议内联脚本使用?
 2.如何将随机生成的nonce添加到script标记中,重要的是IIS如何知道随机生成的nonce值,以便它可以包含在响应头中? (我假设每个回复都有唯一的nonce值)

1 个答案:

答案 0 :(得分:0)

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

    i。定义一个帮助程序以生成一个名为CreateNonce()的随机随机数字符串。字符串长度不是很重要,但是您需要确保它是唯一值。因此,如果用字母数字字符定义10-20长度的字符串,就可以了。您将在视图中调用此方法,内联脚本在哪里。例如:<script <%CreateNonce()%> 当您调用此帮助程序时,它将返回生成随机数值的输出,例如<script nonce-123abc>,并调用另一个帮助程序,有关此步骤的说明如下。

    ii。定义另一个帮助器,以创建名为CSPGenerator()的内联脚本的响应头的CSP规则。调用此方法时,如果该方法不存在,则应创建一个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_
}