内容安全策略元标记

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

我在这样的页面上添加了我的脚本:

app.Use(async (context, next) =>
            {
                var ByteArray = new byte[20];
                using (var Rnd = RandomNumberGenerator.Create())
                {
                    Rnd.GetBytes(ByteArray);
                }

                var nonce = Convert.ToBase64String(ByteArray);

                context.Items.Add("ScriptNonce", nonce);
                context.Response.Headers.Add("Content-Security-Policy", new[] { string.Format("script-src-elem 'self' 'nonce-{0}'", nonce) });

                await next();
            });

<script nonce='@nonceValue' src="https://sl.setrowid.com/index.js.php?mkodu=2700" crossOrigin="anonymous"></script>

但它在控制台中设置错误:

拒绝加载脚本 'https://push.setrowid.com/v3/push_loader.php?mkodu=2700' 因为它违反了以下内容安全策略指令:“script-src-elem 'self' 'nonce-liYA5nqhRREBU3P1Wg /WrvVxmGQ='".

拒绝执行内联脚本,因为它违反了以下内容安全策略指令:“script-src-elem 'self' 'nonce-liYA5nqhRREBU3P1Wg/WrvVxmGQ='”。启用内联执行需要“不安全内联”关键字、散列(“sha256-Ryk1bebqkZRJKst9ISGjr+0FqT27dlA4N8+D6EPUtKo=”)或随机数(“nonce-...”)。

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

在提供的代码中,您允许 https://sl.setrowid.com/index.js.php?mkodu=2700 使用随机数,但它拒绝加载 https://push.setrowid.com/v3 /push_loader.php?mkodu=2700。如果来自 setrowid.com 的内容是可信的,我建议在脚本源中允许 *.setrowid.com 而不是使用 nonce,因为它可能不会应用于重定向或者如果脚本代码调用另一个源。

最后一条错误消息是由于某处的内联脚本引起的,但您的问题中未提供。浏览器的控制台输出通常会告诉您它在哪里。如果它是一个插入内联脚本的脚本或者它是一个事件属性,则它不是 nonceable。事件属性(onclick、onfocus 等)需要用事件监听器重写。

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