【问题标题】:How to use nonce in IIS for content security policy?如何在 IIS 中使用 nonce 进行内容安全策略?
【发布时间】:2017-03-13 18:14:51
【问题描述】:

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

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

还有一些像

这样的内联脚本
<script type="javascript">

   // javascript code
</script>

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

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

【问题讨论】:

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


    【解决方案1】:
    1. nonce 属性仅用于内联脚本。如果您想从其他来源保护您的来源,您可以使用hash
    2. IIS 默认不提供随机数生成。您需要在后端处理它。

      我。定义一个助手来生成一个随机的随机数字符串,命名为CreateNonce()。字符串长度不是那么重要,但您需要确保它是唯一值。所以,如果你用字母数字字符定义一个 10-20 长度的字符串,就可以了。您将在您的视图上调用此方法,您的内联脚本在哪里。例如:&lt;script &lt;%CreateNonce()%&gt; 当你调用这个助手时,它会返回一个生成nonce值的输出,例如&lt;script nonce-123abc&gt;并调用另一个助手,这将在下面的步骤中解释。

      二。定义另一个帮助程序来为内联脚本的响应标头创建 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_
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-19
      • 2021-08-03
      • 1970-01-01
      • 2017-09-07
      • 2016-06-22
      • 2020-01-25
      • 2015-04-27
      相关资源
      最近更新 更多