写点什么

CrossFrame:为 Mashup 准备的安全的器件间跨域通信

  • 2007-11-29
  • 本文字数:1304 字

    阅读完需:约 4 分钟

来自 Yahoo! 的 DHTML 传道团队的 Julien Lecomte,宣布发布“ CrossFrame,一种安全的跨文档和跨域的通信机制”。按照 Julien 的说法,这种“Hack”的手段,能让同一页面上来自不同域的 IFrames 互相通讯。传统上出于安全方面的考虑,不同域上资源的通讯比较困难,这就是浏览器上所谓的“同源策略(Same Origin Policy)”。CrossFrame 以 URL 片段标识符(URL fragment identifier) 作为构建的基础,着手解决了两方面重要的问题:

  • 接受者必须进行轮询,导致无谓的 CPU 开销。
  • 在 Safari 和 Opera 上产生“伪”历史记录。

CrossFrame 让跨域的各站点都共享宿主页面上使用的变量。流程主要分两步:

为了能够与在 Y 域上运行的 Mashup 通信,位于 X 域的页面动态创建一个隐藏的 IFrame 并指向位于 Y 域的一个特殊的代理文件,并利用 URL 片段标识符来运送消息。(第一步)当这个位于隐藏 IFrame 的特殊代理文件加载完毕后,就读取它的 URL 片段标识符,并将之传递给容纳了 Mashup 的 IFrame 内的一段全局函数,(第二步)使用 parent.frames[‘mashup’] 就可获取到所需对象。

使用 CrossFrame 非常简单,安装一个代理文件,导入所需的 JavaScript 库文件,就可以通过 JavaScript 代码开始发送与接收:

登记 onMessage 事件以接收信息:

YAHOO.util.CrossFrame.onMessageEvent.subscribe(<br></br>    function (type, args, obj) {<br></br>        var message = args[0];<br></br>        var domain = args[1];<br></br>       // 以下处理接收到的信息 <br></br>    }<br></br>);要发送信息,调用 YAHOO.util.CrossFrame.send():

YAHOO.util.CrossFrame.send("http://www.y.com/proxy.html",<br></br>                           "frames['mashup']",<br></br>                           "message");

相关的演示已经准备好,可从中了解一下它在浏览器运作的实际情形。

Facebook 在他们的 Beacon 工具中亦使用 IFrames 的思路来实现通讯。在 Jay Goldman 的一篇《 Deconstructing Facebook Beacon Javascript 》博文中,他把这种方法形容为:

对现代浏览器的跨域脚本安全特性的一种漂亮的规避。

在文章的结尾,Julien 也告诫了使用 CrossFrame 带来的危害:

这种 Hack 手法会带来危险。首先,浏览器的厂商可能会更改它们的安全策略,比如改成像 Opera 那样的行为。

他接着说 > 而且,我不推荐使用 Hack 因为它们会减缓 Web 的革新速度。

最后结论 > 因此,虽然看起来有点矛盾,我不推荐使用 CrossFrame(或者任何其他不堪的 hack 手段)。

令人遗憾,时下谈到合乎规范的页面内器件通信技术,开发者的选择并不多。虽然已经在拟订相关的草案来解决这个问题,但是距离浏览器的标准化实现还需一段时间。与此同时,如果有些事情非要在现在的浏览器上就做到,那么CrossFrame Hack 也不失为一种可行的方案。

查看英文原文: CrossFrame - Safe, Cross Domain Widget Coordination for Mashups - - - - - -

译者简介:Frank Cheung 有多年 Web 前端开发经验,动态语言爱好者。负责 EXT 中文站( www.ajaxjs.com )JavaScript 开源论坛 Js 堂( jstang.5d6d.com )的维护工作。专注 Ajax 和 WebUI, 从 YUI-Ext 起,翻译了不少 EXT 相关的资料。

2007-11-29 19:411300

评论

发布
暂无评论
发现更多内容

运维体系建设思考-稳定性篇

ning

运维 云原生 监控 稳定性

惨遭GitHub直接封杀的阿里P8手敲出来这份565页凤凰架构分布式手册,有何神奇之处

热爱java的分享家

Java 面试 程序人生 编程语言 凤凰架构

我理解的CPI和PPI

石云升

学习笔记 11月日更

FFmpeg[5] - 将视频文件转码成MP4格式(FFmpeg转封装2)

liuzhen007

11月日更

深入浅出,一文吃透mysql索引

微客鸟窝

MySQL 11月日更

【死磕Java并发】-----Java内存模型之总结

chenssy

11月日更 死磕 Java 死磕 Java 并发

金链银链不如区块链 如何利用区块链技术探索“太空世界”?

CECBC

给面试官上一课:HTTPS是先进行TCP三次握手,再进行TLS四次握手

热爱java的分享家

Java 架构 程序人生 编程语言 经验分享

阿里大规模业务混部下的全链路资源隔离技术演进

阿里巴巴云原生

阿里云 云原生 资源隔离 ACK 混部

“敏捷版”全链路压测

阿里巴巴云原生

阿里云 云原生 全链路压测 PTS

.NET6新东西--Lambda优化

喵叔

11月日更

【Three.js】随着元宇宙开启WEB3D之路

devpoint

JavaScript WebGL 3D three.js 11月日更

度小满启动“小微加油站”,让低息服务可持续

脑极体

太顶了!华为高工用一份423页的网络协议笔记把计算机网络讲清了

热爱java的分享家

Java 架构 面试 编程语言 网络协议

🎅Less快速学习(下)🎅

空城机

CSS 大前端 less 11月日更

第三代分布式数据库来了,真香!

OceanBase 数据库

数据库 开源 分布式 oceanbase

黑客常备20个工具,你知道几个?

喀拉峻

Go 语言学习查缺补漏ing Day1

Regan Yue

Go 语言 11月日更

如何巧妙使用Camtasia制作PPT讲解视频?

淋雨

Camtasia

到底什么才是真正的区块链游戏

CECBC

双11“剁手”后,你的包裹收到了吗?

OceanBase 数据库

数据库 开源 分布式 oceanbase

🍃【Spring专题】「实战系列」重新回顾一下异常重试框架Spring Retry的功能指南

码界西柚

spring 11月日更 Spring retry Guava retry

蚁剑的分析和利用

网络安全学海

网络安全 信息安全 渗透测试 WEB安全 安全漏洞

家庭太阳能发电,何时能告别“两极分化”?

脑极体

推动数字化转型,OceanBase 助力保险企业创造新价值

OceanBase 数据库

数据库 开源 技术宅 oceanbase 分布式,

共建全栈国产化解决方案 | OceanBase持续与合作伙伴推进测试互认

OceanBase 数据库

数据库 分布式 双十一 oceanbase

千万级学生管理系统的考试试卷存储方案设计

Beyond Ryan

两个排序数组的中位数,“最”有技术含量的解法!

老表

Python 算法 LeetCode 11月日更

MySQL事务的实现原理之Undo Log的分析

卢卡多多

Undo Log 11月日更

区块链技术如何在涉诉信访中显身手

CECBC

clickhouse sql之Array函数

WindFlying

CrossFrame:为Mashup准备的安全的器件间跨域通信_安全_Gavin Terrill_InfoQ精选文章