Sitecore Horizo​​nインストール後の「Content-Security-Policy frame-ancestors」の事象


解説

「HTTP Content-Security-Policy(CSP)」レスポンス ヘッダーを使用する場合、Sitecore Horizo​​nは、Content Management(CM)インスタンスのweb.configファイルに設定されている「frame-ancestors」ディレクティブのデフォルト設定を上書きします。これにより、ページがframeまたはiframe内にレンダリングされなくなります。

解決策

本事象を解決するには、次のようにweb.configの設定をHorizo​​nの設定に合わせます。

設定ファイルの例

調整前の設定ファイルの例:

CMのweb.configファイル:

<location path="sitecore">
    <system.webServer>
      <httpProtocol>
        <customHeaders>
        <add name="Content-Security-Policy" value="frame-ancestors 'self' https://a.com https://b.com" />
        </customHeaders>
      </httpProtocol>
</system.webServer>

Horizonの設定ファイル:

<setting name="Horizon.ClientHost" value="<Horizonのサイト名>" />
 
<collectIFrameAllowedDomains>
            <processor type="Sitecore.Horizon.Integration.Pipelines.CollectIFrameAllowedDomains.AddDomains, Sitecore.Horizon.Integration" resolve="true">
              <allowedDomains hint="list:AddDomain">
                <domain>'self'</domain>
                <domain>c.com</domain>
               <domain>d.com</domain>
              </allowedDomains>
            </processor>
            <processor type="Sitecore.Horizon.Integration.Pipelines.CollectIFrameAllowedDomains.AddHorizonClientHost, Sitecore.Horizon.Integration" resolve="true" />
</collectIFrameAllowedDomains>

 

調整後の設定ファイルの例:

CMのweb.configファイル:

<location path="sitecore">
    <system.webServer>
      <httpProtocol>
        <customHeaders>
        <add name="Content-Security-Policy" value="frame-ancestors 'self' <Horizonのサイト名> https://a.com https://b.com https://c.com https://d.com" />
        </customHeaders>
      </httpProtocol>
</system.webServer>

Horizonの設定ファイル:

<setting name="Horizon.ClientHost" value="<Horizonのサイト名>" />
<collectIFrameAllowedDomains>
            <processor type="Sitecore.Horizon.Integration.Pipelines.CollectIFrameAllowedDomains.AddDomains, Sitecore.Horizon.Integration" resolve="true">
              <allowedDomains hint="list:AddDomain">
                   <domain>'self'</domain>
                   <domain>a.com</domain>
                  <domain>b.com</domain>
                  <domain>c.com</domain>
                  <domain>d.com</domain>
              </allowedDomains>
            </processor>
            <processor type="Sitecore.Horizon.Integration.Pipelines.CollectIFrameAllowedDomains.AddHorizonClientHost, Sitecore.Horizon.Integration" resolve="true" />
</collectIFrameAllowedDomains>