我有一个ASP.NET MVC网站与一个高度定制的Umbraco 6后端作为网站的CMS。
我一直在升级整个站点的内容安全策略( CSP )头,我正在使用NWebsec进行升级,现在该网站很高兴地使用CSP 3严格的动态,并且每个脚本标记上都没有CSP,一切都很好。
不幸的是,我还未能将相同的更改应用于Umbraco管理区域,所以大部分更改根本不起作用。
所以,我想做的是将严格的CSP 3政策应用于网站的公共访问部分,并将放松的CSP策略应用到被锁定的管理区域。
Umbraco管理区域位于子目录/umbraco/下,因此我认为实现这一点的最好方法是在站点的Web.config文件中使用两个不同的位置元素。
所以我的Web.config现在看起来像是:
<!-- Specific CSP for Umbraco -->
<location path="~/umbraco">
<nwebsec>
...
<content-Security-Policy enabled="true">
...
<script-src self="true" unsafeInline="true" unsafeEval="true">
<add source="data:" />
</script-src>
...
</content-Security-Policy>
</nwebsec>
</location>
<!-- default CSP for everything else -->
<location path=".">
<nwebsec>
...
<content-Security-Policy enabled="true">
...
<script-src self="true" unsafeInline="true" unsafeEval="false" strictDynamic="true">
</script-src>
...
</content-Security-Policy>
</nwebsec>
</location>但这会将默认配置应用于整个站点。
我不确定我是否弄错了配置,或者NWebSec不支持我想要做的事情,或者是重定向或其他一些特定的问题。
发布于 2018-10-31 11:04:17
通过在Web.config子目录中创建一个单独的/umbraco来修正这个问题。
主Web.config:
<location path="." allowOverride="true"> <nwebsec> ... <content-Security-Policy enabled="true"> ... <script-src self="false" unsafeInline="true" unsafeEval="false" strictDynamic="true"> <add source="www.example.com" /> </script-src> ... </content-Security-Policy> </nwebsec> </location>
Web.config在/umbraco子目录中:
<location path="." allowOverride="true"> <nwebsec> ... <content-Security-Policy enabled="true"> ... <script-src self="true" unsafeInline="true" unsafeEval="true" strictDynamic="false"> <clear/> <add source="www.other-example.com" /> </script-src> ... </content-Security-Policy> </nwebsec> </location>
子目录中的配置覆盖主Web.config -因此strictDynamic="false“关闭了对那些CSP3非can的使用,而clear元素删除集合中所有预先存在的元素,以便可以使用新的域集。
https://stackoverflow.com/questions/52442877
复制相似问题