我有一个 ASP.NET MVC 网站,它有一个高度定制的 Umbraco 6 后端作为网站的 CMS。
我一直在升级整个站点的内容安全策略 (CSP) 标头,我正在使用 NWebsec 进行此操作,并且该网站现在愉快地使用 CSP 3 strict-dynamic 并且每个脚本标签上都有随机数,并且一切正常美好的。
不幸的是,我无法对 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 不支持我正在尝试做的事情,或者重定向或其他问题存在一些特定问题。