1

我有一个 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 不支持我正在尝试做的事情,或者重定向或其他问题存在一些特定问题。

4

1 回答 1

0

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

/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 随机数的使用,并且 clear 元素会删除集合中所有预先存在的元素,因此可以使用一组新的域。

于 2018-10-31T11:04:17.867 回答