如何处理用户中心的CSP随机数? (uc-block.bundle.js)

问题描述 投票:0回答:1

我正在使用CSP;我在服务器端对策略进行了更改,然后在客户端使用nonce。它适用于一切。我只是对 UserCentries 有疑问。我仍然收到以下错误:

uc-block.bundle.js:1 拒绝应用内联样式,因为它违反了以下内容安全策略指令:“style-src 'self' 'nonce-cdbb69b0170fa85cd202dd223dc7de80' https://fonts.googleapis.com https: //*.iadvize.com”。启用内联执行需要“unsafe-inline”关键字、哈希值(“sha256-gxqnKDxRDSXGSNnZ1pqKxuJyI+PHG6Tvsbz7z9B4+ZI=”)或随机数(“nonce-...”)。

当我点击 Chrome 中的错误行时,它会转到该文件内的代码:

问题似乎是因为这里的 style 标签,它没有 nonce 属性。

我有一个

CspMiddleware
,我负责处理里面的政策。这是
Policy
的代码:

public override async Task Invoke(IOwinContext context)
{
    var randomNonce = Shared.Extensions.Extensions.GenerateNonce();
    var isUmbracoRequest = context.Request.Uri.AbsolutePath.StartsWith("/umbraco");
    var policy = new[] {
        $"script-src 'self' {(isUmbracoRequest ? "'unsafe-inline'" : $"'nonce-{randomNonce}' 'strict-dynamic'")} {string.Join(" ", this._config?.ExternalUrls)}; " +
        $"style-src 'self' {(isUmbracoRequest ? "'unsafe-inline'" : $"'nonce-{randomNonce}'")} {string.Join(" ", this._config?.ExternalCssUrls)}; " +
        $"object-src 'self'; " +
        $"report-uri /umbraco/api/helper/CreateCSPReport"
    };

    if (!context.Response.Headers.ContainsKey("Content-Security-Policy")) context.Response.Headers.Add("Content-Security-Policy", policy);
    if (!context.Response.Headers.ContainsKey("X-Content-Security-Policy")) context.Response.Headers.Add("X-Content-Security-Policy", policy);
    if (!context.Response.Headers.ContainsKey("X-Webkit-CSP")) context.Response.Headers.Add("X-Webkit-CSP", policy);
    if (!isUmbracoRequest) context.Response.Headers.Add("X-Nonce", new[] { randomNonce });

    await Next.Invoke(context);
}

在剃刀页面上,我得到

nonce
,然后将其设置为
UserCentries
脚本:

@{
    var xNonce = HttpContext.Current.Response.Headers.GetValues("X-Nonce")?.First();
}

<script type="application/javascript" src="https://privacy-proxy.usercentrics.eu/latest/uc-block.bundle.js" nonce="@xNonce"></script>

当我在浏览器中检查时,我可以看到已添加到此脚本中的

nonce
,但是控制台中仍然出现上述错误。

如何处理此特定脚本(

uc-block.bundle.js
)的nonce

谢谢你。

.net razor content-security-policy nonce csp
1个回答
0
投票

您的依赖项是将内联样式元素附加到您的文档中。依赖项中似乎不支持随机数,因此您必须求助于其他解决方案。您可以尝试将提到的哈希添加到 style-src 中。由于存在三元运算符,您可能必须为两者添加哈希值,如果您不容易重现这两种情况,可以使用 https://report-uri.com/home/hash 来计算哈希值。

如果脚本输出是动态的,则需要添加太多哈希值。那么您可能需要求助于允许“不安全内联”。如果您限制了 CSP 的其余部分,这毕竟还不算太糟糕,请参阅 https://scotthelme.co.uk/can-you-get-pwned-with-css/,但并非所有扫描仪和安全性不过测试人员很容易同意。

© www.soinside.com 2019 - 2024. All rights reserved.