iframe 沙盒:禁用 mailto 和 file:// 文件链接

Posted

技术标签:

【中文标题】iframe 沙盒:禁用 mailto 和 file:// 文件链接【英文标题】:Iframe sandboxing: disable mailto and file:// file link 【发布时间】:2015-07-29 22:48:21 【问题描述】:

我创建了一个虚拟桌面页面,该页面将在 kiosk 模式下的浏览器(IE11 或 chrome)中运行,我想将结果显示在大触摸屏显示器上,以便用户通过浏览器浏览 Intranet 站点售货亭。

在页面中,我还有一个 iframe,它显示了我的域 mycompany.com 中的其他网站。

我正在尝试制定一项政策,允许 iframe 中显示的站点遵循 href 到其他页面,但禁用 mailto 和文件链接(以避免浏览器打开电子邮件客户端或文件资源管理器)。 当然,我无法更改 iframe 中显示的原始网站的代码,并且我知道由于同源策略,我无法在容器页面中使用 JS 覆盖 href。

有没有办法获得这个?

我在 html5 中找到了 iframe 标签的属性沙箱,但我不确定是否要使用它来完成任务。

有什么想法吗?

【问题讨论】:

【参考方案1】:

使用桌面应用程序、注册表编辑或区域策略来控制:

应用可以注册成为某个统一资源标识符 (URI) 方案名称的默认处理程序。桌面应用和 Windows 运行时应用都可以注册为 URI 方案名称的默认处理程序。如果用户选择您的应用程序作为 URI 方案名称的默认处理程序,则每次启动该类型的 URI 时都会激活您的应用程序。

默认情况下,当当前 URL 符合以下条件时,Internet Explorer 会阻止使用“file:”协议导航到统一资源标识符 (URI):

当前 URL 在 Internet 区域或受限站点区域中打开。 当前 URL 使用的协议不是“file:”。

对于邮件客户端,程序需要在 HKEY_CLASSES_ROOT\mailto 键下注册设置,以便为使用 mailto 协议的 URL 提供服务。在以下键下设置反映这些设置的值和键。

HKEY_LOCAL_MACHINE 软件 客户 邮件 规范名称 协议 邮寄

RegisterProtocolHandler API 适用于 Chrome:

Chrome 13 终于包含了 navigator.registerProtocolHandler。此 API 允许 Web 应用程序将自己注册为特定协议的可能处理程序。例如,用户可以选择您的应用程序来处理“mailto”链接。

注册一个协议方案,如:

 navigator.registerProtocolHandler(
'mailto', 'about:blank', 'Mail Protocol');

第一个参数是协议。第二个是应处理此方案的应用程序的 URL 模式。该模式应包含一个“%s”作为数据的占位符,并且它必须与尝试注册协议的应用程序位于同一来源。一旦用户批准访问,您就可以通过您的应用、其他网站等使用此链接。

参考文献

Registering Programs with Client Types

Internet Feature Controls (D..H)

Understanding Protocols

How to Handle URI Activation (HTML)

Registering a custom protocol handler | Web Updates - Google Developer

【讨论】:

'about:blank' 将不起作用,因为 '%s'registerProtocolHandler 的第二个参数中是必需的 - 并且仅适用于安全的 https 上下文...

以上是关于iframe 沙盒:禁用 mailto 和 file:// 文件链接的主要内容,如果未能解决你的问题,请参考以下文章

具有内容安全策略的 iFrame 沙盒

检测对 HTML5 iframe 沙盒属性的支持

IFRAME 沙盒属性正在阻止 AJAX 调用

带有“允许同源”标志错误的 iframe 沙盒

javascript - postMessage 到沙盒 iframe,为啥收件人窗口原点为空?

JavaScript Ajaxian»使用iframe沙盒化JavaScript