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.如何将随机生成的随机数添加nonce到script标记中,重要的是IIS如何知道随机生成的随机数,以便它可以包含在响应标头中?(我假设每个响应都将具有唯一的现时值)
小智 3
nonce属性仅用于内联脚本。如果您想确保其他来源的来源安全,您可以使用hash默认情况下,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)
| 归档时间: |
|
| 查看次数: |
977 次 |
| 最近记录: |