我在 ASP.NET 4.5.1 中开发了 MVC 应用程序。该应用程序在多个页面中使用 javascript。一些 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>
因此,每个响应都将包含此 header 。
问题
1.应该
nonce
属性只推荐用于内联脚本?2. 如何添加随机生成的
nonce
进入 script
标签,重要的是 IIS 如何知道随机生成的 nonce 值,以便它可以包含在响应 header 中? (我假设每个响应都具有唯一的 nonce 值)
最佳答案
nonce
属性仅用于内联脚本。如果您想从其他来源保护您的来源,您可以使用 hash
一世。定义一个 helper 来生成一个随机的 nonce 字符串,命名为
CreateNonce()
.字符串长度不是那么重要,但您需要确保它是一个唯一值。所以,如果你用字母数字字符定义一个 10-20 长度的字符串,那就没问题了。您将在您的 View 上调用此方法,您的内联脚本在哪里。例如:<script <%CreateNonce()%>
当你调用这个助手时,它会返回一个生成 nonce 值的输出,例如。 <script nonce-123abc>
并调用另一个助手,这在以下步骤中进行了解释。ii.定义另一个助手来为内联脚本的响应头创建 CSP 规则,命名为
CSPGenerator()
.当你调用这个方法时,它应该创建一个 Content-Security-Policy
如果响应头不存在。如果头存在,它应该附加新的 nonce 值。 伪代码(抱歉,我不是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_
}
关于asp.net - 如何在 IIS 中使用 nonce 进行内容安全策略?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42770650/