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

yzckvree  于 2023-05-11  发布在  Go
关注(0)|答案(2)|浏览(506)

我有一个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正确的。
此错误适用于所有来自iframePDF文件链接,正常的外部链接工作正常。Firefox在新选项卡中短暂显示PDF.js viewer,然后正常工作。我没有机会尝试到YouTube或类似的链接,但我想有充分的证据表明我遇到了chromePDF渲染引擎中的一个bug。
该怎么做?谁对这个bug感兴趣,如何联系他们?或者我可以在代码中做些什么?

nbewdwxp

nbewdwxp1#

浏览器使用**内容安全策略(CSP)**来保护用户免受不需要的内容的影响已经很长时间了。不需要的内容的定义可以由网站所有者进行。如果站点所有者没有这样做,则使用一些标准值,这些标准值更具限制性。
网站https://content-security-policy.com/这样解释
什么是内容安全策略?Content-Security-Policy是现代浏览器用于增强文档(或网页)安全性的HTTP响应标头的名称。Content-Security-Policy头允许您限制资源(如JavaScript,CSS或浏览器加载的几乎任何内容)的方式。
虽然它主要用作HTTP响应头,但您也可以通过 meta标记应用它。
术语内容安全策略通常缩写为CSP。
Content-Security-Policy有助于缓解哪些类型的攻击?CSP最初被设计用于减少跨站脚本(XSS)攻击的攻击面,该规范的后续版本还可以防止其他形式的攻击,如点击劫持。
在您的情况下,您必须为用户配置两个障碍:

  1. iframe,required rule: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';

最好是在服务器配置中配置CSP。这不是每个网站所有者都能做到的,也可以在 meta标记中配置CSP。您可以将此添加到您的网站的head-tag内:

<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'">

在服务器配置中设置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,required规则。它应该被限制在一个特殊的域*.example.com或一个nonce与'nonce-rAnd 0 m'。

  1. 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'

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

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'

我没有测试它,所以可能需要轻微的调整。

mutmk8jj

mutmk8jj2#

我在我的网站和Nginx服务器块中设置了超级宽松的内容安全策略,嵌入式PDF仍然被阻止-但仅在某些计算机上。
事实证明,Google Workspace管理的浏览器默认设置为阻止iframe导航。设置在这里,以防它帮助某人:
1.登录https://admin.google.com/
1.导航到设备>Chrome>设置>用户和浏览器
1.在“内容”部分中,查找“iframe navigation”并将其设置为“Allow navigation to external protocols inside a sandboxed iframe”

相关问题