使用 NWebSec 将不同的内容安全策略应用于不同的目录



我有一个 ASP.NET 的MVC网站,其中包含高度定制的Umbraco 6后端作为该网站的CMS。

我一直在升级整个网站的内容安全策略 (CSP( 标头,我正在使用 NWebsec 来执行此操作,该网站现在很高兴使用 CSP 3 严格动态,并且每个脚本标签上都有随机数,一切正常。

不幸的是,我无法将相同的更改应用于 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 不支持我正在尝试做的事情,或者重定向或其他内容存在一些特定问题。

通过在/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>

/umbraco 子目录中的 Web.config

<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 nonces 的使用,并且 clear 元素删除了集合中所有预先存在的元素,以便可以使用一组新的域。

最新更新