对于内容安全策略,我如何允许使用自我和静态网址以及不安全的JS?

时间:2018-11-07 05:50:25

标签: http-headers nwebsec

我正在尝试在web.config中的ASP.NET MVC应用程序中对此进行配置,如下所示:

<nwebsec>
  <httpHeaderSecurityModule xmlns="http://nwebsec.com/HttpHeaderSecurityModuleConfig.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="NWebsecConfig/HttpHeaderSecurityModuleConfig.xsd">
    <securityHttpHeaders>
       <content-Security-Policy-Report-Only enabled="true">
          <default-src self="true">
             <add source="https://static.mydomain.com" />
             <add source="unsafe-inline" />
             <add source="unsafe-eval" />
          </default-src>
       </content-Security-Policy-Report-Only>
    </securityHttpHeaders>  
</httpHeaderSecurityModule>
</nwebsec>

这意味着我最终看到的标题如下:

default-src 'self' https://static.mydomain.com unsafe-inline unsafe-eval

但是这仍然使我的页面失败,因为不允许使用内联脚本。我想我希望标题为:

default-src 'self unsafe-inline unsafe-eval' https://static.ozcruising.com.au

所以我的问题是如何更改NWebSec配置,以允许从页面本身(相同来源)允许内嵌脚本,并支持从https://static.mydomain.com提供内容?

1 个答案:

答案 0 :(得分:0)

Unsafe-inline仅与script-src和style-src相关,而unsafe-eval仅与script-src相关。因此,不能在default-src级别上配置它们。您必须这样做:

<default-src self="true">
  <add source="https://static.mydomain.com" />
</default-src>
<script-src self="true" unsafeInline="true" unsafeEval="true">
  <add source="https://static.mydomain.com" />
</script-src>
<style-src self="true" unsafeInline="true">
  <add source="https://static.mydomain.com" />
</style-src>

您必须在script-src和style-src中再次指定self和static.mydomain.com,因为更具体的* -src会清除default-src指定的所有内容。