我在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值)
答案 0 :(得分:0)
nonce
属性仅用于内联脚本。如果您想确保其他来源的资源安全,可以使用hash
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_
}