我刚刚在开发环境中将内容安全策略应用于我的Azure Web App,它运行良好。
我也可以将它上传到我在Azure上的临时站点,它在那里运行良好,策略得到了正确应用,然后由我的浏览器强制执行。然而,当我进行交换时,我会得到以下错误:
无法交换站点"MySite"的插槽,因为中的工作进程"暂存"插槽中止了预热请求。如果网站阻止HTTP请求的IP限制或URL重写规则。
这是我正在应用的策略(在我的web.config中定义)
<add name="Content-Security-Policy"
value="default-src 'none';
script-src 'self' https: 'unsafe-inline' 'unsafe-eval';
style-src 'self' https: 'unsafe-inline';
img-src 'self' https: 'unsafe-inline' data: blob:;
connect-src 'self' https:;
font-src 'self' https:;
object-src 'none';
media-src 'self';
child-src 'self';
form-action 'self';
frame-ancestors 'none'"/>
问题出在哪里?
Azure不喜欢web.config中内容安全策略值中的回车。
如果您使用应用程序服务编辑器(可通过Azure门户获得)检查web.config,则您将看到回车已编码并转换为
&xD&xA;
创建以下无效CSP,这就是交换中断的原因:
默认src'none'&xD&xA;脚本src"self"https:"不安全内联"不安全评估"&xD&xA;style-src"self"https:"不安全内联"&xD&xA;img src"self"https:"unsafe-inline"数据:blob:&xD&xA;connect-src'self'https:&xD&xA;font src'self'https:&xD&xA;object src"none"&xD&xA;media src"self"&xD&xA;child-src'self'&xD&xA;形成行动"自我"&xD&xA ;帧祖先"无">
简而言之,我们需要在一行中输入我们的CSP,这降低了可读性,但Azure需要进行交换。