首页 > 解决方案 > 在 IIS 站点中添加绑定特定的 CSP 框架祖先 HTTP 标头

问题描述

在 IIS 中,我们有一个 Site,其中包含许多绑定,假设 Site1 具有绑定www.siteone.comwww.sitetwo.com。现在我必须只为一个绑定添加 CSP -frame-ancestors ,即仅为 "www.siteone.com" 添加 CSP 标头,而不是 "www.sitetwo.com" 。

如果我们在 web.config 中添加以下行,那么这些设置将适用于所有绑定。我们是否有任何条件方法可以用来应用 CSP -frame-ancestors仅适用于www.siteone.com

 <httpProtocol>
      <customHeaders>
        <remove name="X-Powered-By" />
        <clear />
        <add name="Content-Security-Policy" value="frame-ancestors 'self' http://www.ancestorssite.com https://www.ancestorssite.com" />     
      </customHeaders>
    </httpProtocol> 

我已经尝试了下面的 IIS 重写规则,但它没有显示

<rule name="whitelist-site- iframe">
  <match url="(.*)"  />
  <conditions>
  <add input="{HTTP_HOST}" pattern="^.*\.?www.siteone\.com$" /> 
   <add input="{HTTP_Content_Security_Policy}" pattern="frame-ancestors ^.*\.?www.ancestorssite\.com$" />
  </conditions>
 <action type="Rewrite" url="https://www.siteone.com" />
</rule> 

标签: iisiframehttp-headerscontent-security-policy

解决方案


您可以使用 IIS 出站规则来实现此目的

1.请开启 URL 重写模块 https://www.iis.net/downloads/microsoft/url-rewrite

2.为REPONSE_Content-Security-Policy设置允许变量。

在此处输入图像描述

3.请应用此前提条件和出站规则。

   <outboundRules>
                <rule name="123" preCondition="Precondition1">
                    <match serverVariable="RESPONSE_Content-Security-Policy" pattern="(.*)" />
                <action type="Rewrite" value="frame-ancestors 'self' http://www.ancestorssite.com https://www.ancestorssite.com" />
            </rule>
            <preConditions>
                <preCondition name="Precondition1">
                    <add input="{HTTP_HOST}" pattern="www.siteone.com" />
                </preCondition>
            </preConditions>
        </outboundRules>

推荐阅读