我正在使用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
?
谢谢你。
您的依赖项是将内联样式元素附加到您的文档中。依赖项中似乎不支持随机数,因此您必须求助于其他解决方案。您可以尝试将提到的哈希添加到 style-src 中。由于存在三元运算符,您可能必须为两者添加哈希值,如果您不容易重现这两种情况,可以使用 https://report-uri.com/home/hash 来计算哈希值。
如果脚本输出是动态的,则需要添加太多哈希值。那么您可能需要求助于允许“不安全内联”。如果您限制了 CSP 的其余部分,这毕竟还不算太糟糕,请参阅 https://scotthelme.co.uk/can-you-get-pwned-with-css/,但并非所有扫描仪和安全性不过测试人员很容易同意。