使用基于 Chrome 的浏览器从 iframe 中的链接调用到 PDF 文件时出现意外被阻止的页面

kkl*_*per 5 html pdf iframe google-chrome

我有一个网页,其中iframe包含带有属性的外国页面的链接target="_blank" rel="noopener"。此链接在页面本身和 中都可以正常工作,iframe当通过带有选项的上下文菜单调用时才有效open in new tab。常规单击会打开一个新选项卡并显示正确的结果,URL但结果为This page has been blocked by Opera ERR_BLOCKED_BY_CLIENT.

我四处寻找帮助,禁用了所有插件都无济于事,并以隐身模式播放了该场景,没有任何变化。错误页面上的控制台显示VM589:1460 crbug/1173575, non-JS module files deprecated.此提示让我一无所知。我操纵属性target="_blank" rel="noopener" rel="noreferrer"没有rel="noopener noreferrer"成功。这全部适用于Opera.

我尝试了Brave相同的结果和错误消息,当然,除了Brave而不是OperaEdge加入失败带。那么看到This page has been blocked by Chrome正确的也不足为奇。

此错误适用于PDF来自 的所有文件链接iframe,正常的外部链接可以正常工作。在新选项卡中Firefox短暂显示,然后正常工作。PDF.js viewer我没有机会尝试链接YouTube或类似的内容,但我想有足够的证据表明我在chrome PDF渲染引擎中遇到了错误。

该怎么办?谁对此错误感兴趣以及如何接触他们?或者我可以在我的代码中做些什么?

Dav*_*vid 1

浏览器使用内容安全策略 (CSP) 的时间已经较长,以保护用户免受不良内容的侵害。不需要的内容的定义可以由网站所有者进行。如果网站所有者没有这样做,则会使用一些限制性更强的标准值。

网站https://content-security-policy.com/是这样解释的

什么是内容安全策略?Content-Security-Policy 是现代浏览器用来增强文档(或网页)安全性的 HTTP 响应标头的名称。Content-Security-Policy 标头允许您限制浏览器加载资源(例如 JavaScript、CSS 或几乎任何内容)的方式。

虽然它主要用作 HTTP 响应标头,但您也可以通过元标记应用它。

术语内容安全策略通常缩写为 CSP。

内容安全策略可以帮助缓解哪些类型的攻击?CSP 最初旨在减少跨站脚本 (XSS) 攻击的攻击面,该规范的后续版本还可以防止其他形式的攻击,例如点击劫持。

在您的情况下,您必须为用户配置两个障碍:

  1. iframe,所需规则: frame-src 'self'
  2. PDF,所需规则: object-src 'self' blob;

本质上,允许大多数带有“self”的元素是相对安全的,但禁止网站上根本不使用的元素总是好的。
您的内容安全策略应与此类似,并且应允许 iframe 中的 PDF:

Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; object-src 'self' blob:; style-src 'self'; frame-src 'self';
Run Code Online (Sandbox Code Playgroud)

最好是在服务器配置中配置 CSP。但这对于每个网站所有者来说都是不可能的,并且也可以在元标记中配置 CSP。您可以将其添加到您网站的 head 标签内:

<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; object-src 'self' blob:; style-src 'self'; frame-src 'self'">
Run Code Online (Sandbox Code Playgroud)

不过,在服务器配置中设置 CSP 是更强大的方法:
https ://content-security-policy.com/examples/meta/

以下是更多示例,包括 Apache Web Server 和 Nginx Webserver 的 CSP 相关服务器配置:
https://content-security-policy.com/examples/

编辑

如果 PDF 托管在另一个域上,则 CSP 必须进行不同的、更开放的调整。此处解释了不同来源的选项: https:
//content-security-policy.com/#source_list

  1. iframe 所需的规则必须进行调整。它应该被限制为带有“nonce-rAnd0m”的特殊域*.example.com或带有“nonce-rAnd0m”的随机数。
  2. PDF 所需的规则必须进行调整,与第 1 点相同的建议正在适用。

因此,即使 PDF 是外部的,也不意味着所有内容都可以以某种方式注入到网站中。

假设您使用带有域的选项,*.example.com它看起来像这样或类似于:

Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; object-src '*.example.com' blob:; style-src 'self'; frame-src '*.example.com'
Run Code Online (Sandbox Code Playgroud)

假设您使用带有随机数的选项,它看起来像这样或类似于:

Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; object-src 'nonce-rAnd0m' blob:; style-src 'self'; frame-src 'nonce-rAnd0m'
Run Code Online (Sandbox Code Playgroud)

我没有测试过,所以可能需要稍微调整。