使用 NWebSec 将不同的内容安全策略应用于不同的目录
Applying different Content Security Policies to different directories with NWebSec
我有一个 ASP.NET MVC 网站,该网站使用高度自定义的 Umbraco 6 后端作为该网站的 CMS。
我一直在升级整个网站的内容安全策略 (CSP) headers,我正在使用 NWebsec 进行升级,网站现在愉快地使用 CSP 3 strict-dynamic 和每个脚本标签上都有随机数,一切正常。
不幸的是,我无法将相同的更改应用到 Umbraco 管理区域,所以其中大部分根本不起作用。
所以我想做的是将严格的 CSP 3 政策应用于网站的 public-accessible 部分,并将宽松的 CSP 政策应用于 locked-down 管理区域。
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 来修复。
主要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 随机数的使用,并且清除元素删除了集合中所有预先存在的元素,因此可以使用一组新的域。
我有一个 ASP.NET MVC 网站,该网站使用高度自定义的 Umbraco 6 后端作为该网站的 CMS。
我一直在升级整个网站的内容安全策略 (CSP) headers,我正在使用 NWebsec 进行升级,网站现在愉快地使用 CSP 3 strict-dynamic 和每个脚本标签上都有随机数,一切正常。
不幸的是,我无法将相同的更改应用到 Umbraco 管理区域,所以其中大部分根本不起作用。
所以我想做的是将严格的 CSP 3 政策应用于网站的 public-accessible 部分,并将宽松的 CSP 政策应用于 locked-down 管理区域。
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 来修复。
主要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 随机数的使用,并且清除元素删除了集合中所有预先存在的元素,因此可以使用一组新的域。