【问题标题】:Set content-security-policy so that other sites could embed a specific pdf file in an iframe设置 content-security-policy 以便其他站点可以在 iframe 中嵌入特定的 pdf 文件
【发布时间】:2021-01-14 06:39:49
【问题描述】:

在我们的 IIS 网站上,我们需要一个 PDF 文件以允许其他网站在 iframe 中显示。 目前 web.config 中的 content-security-policy 是这样的:

<system.webServer>
<httpProtocol>
  <customHeaders>
    <add name="Content-Security-Policy" value="frame-ancestors 'self'" />
  </customHeaders>
</httpProtocol>  
</system.webServer>

因为这是一个 pdf 文件,所以我不能使用元标记。 由于我无法在任何地方找到答案,我试图妥协并在 pdf 文件的子目录中创建另一个 web.config:

        <add name="Content-Security-Policy" value="frame-ancestors '*'" />

因此试图允许该目录中的所有文件在 iframe 中打开。但是,IIS 抱怨我对“内容安全策略”有多个定义,所以这不起作用。

有什么想法吗?

【问题讨论】:

  • 您不需要在子目录中添加此客户标头。所有配置只需要在根目录的web.config中即可。并且在我的测试中,即使没有定义这个header,iframe使用跨域pdf文件,pdf也可以正常显示。
  • 我不确定我是否完全理解您的评论。正如我所写,根目录中有一个 web.config 文件,我写了 content-security-policy 是如何定义的。当我尝试从另一个站点在 iframe 中包含 PDF(来自“我们的”站点)时,我在 Chrome 中得到了这个:拒绝框架'ericom.com',因为祖先违反了以下内容安全策略指令:“frame-ancestors '自我'”。

标签: iis web-config content-security-policy


【解决方案1】:

我试图妥协并在 pdf文件的子目录:

    <add name="Content-Security-Policy" value="frame-ancestors '*'" />

试图因此允许该目录中的所有文件以 框架。但是,IIS 抱怨我有多个定义 “Content-Security-Policy”,所以这不起作用。

这很奇怪,因为在子文件夹中你可以override root web.config

或者,您可以尝试 url-rewrite 有条件地将 CSP 标头重写为另一个标头,例如 here

请注意,PDF can be embedded 无论如何都使用 Google Drive 或 PDF.js 而不管 CSP。

【讨论】:

    【解决方案2】:

    现在我明白你的问题了。不仅要删除子目录web.config中的自定义headers,还要修改Content-Security-Policy的值。

    由于设置了内容安全策略,内容被禁止在 IFRAME 中显示。具体来说,他们将 Content-Security-Policy 标记设置为 frame-ancestors 'self'。当 PDF 和 iframe 在不同的域中时,您无法使用 IFRAME 将他们的页面嵌入到您自己的页面中。

    一种方法是不使用 Content-Security-Policy。 PDF 将在 iframe 中加载。

    另一种方法是更改​​值。我将值设置为 default-src 'self' *.trusted.com 。它奏效了。

    【讨论】:

    • 我需要允许任何其他站点对文件进行 iframe,而不仅仅是已知站点。我还需要防止网站上的其他文件被iframe(防止跨域攻击)
    • 您可以将值设置为frame-src'self'。
    猜你喜欢
    • 2018-05-12
    • 2021-09-04
    • 1970-01-01
    • 2020-01-18
    • 1970-01-01
    • 1970-01-01
    • 2019-07-09
    • 2019-02-16
    • 1970-01-01
    相关资源
    最近更新 更多