Webkit的跨域安全问题说明


Posted in Javascript onSeptember 13, 2011

这里有个简单的测试页面:IE、火狐弹出"hello world",而chrome,safari,opera毫无反应。
以下是小段测试代码(刻意修改domain,让父页面和子页面为不同域页面):
1.父页面代码:

<script> 
document.domain = "nunumick.me"; 
function doTest(){ 
alert('hello world'); 
} 
</script> 
<iframe src="http://www.nunumick.me/lab/x-domain/webkit-test.html"> 
</iframe>

2.子页面代码:
<script> 
try{ 
top.name; 
}catch(e){ 
document.domain = 'nunumick.me'; 
top.doTest(); 
} 
</script>

以上代码目的是尝试在访问异常时动态修改domain达到顺利访问,但webkit内核浏览器粗暴地报错而非抛出可截获的异常,其他浏览器均如期运行。

chrome错误信息:
Webkit的跨域安全问题说明

据了解,采用此类try catch方式做安全可行性判断的并不只是个别现象,如DOJO

try{ 
//see if we can access the iframe's location 
//without a permission denied error 
var iframeSearch = _getSegment(iframeLoc.href, "?"); 
//good, the iframe is same origin (no thrown exception) 
if(document.title != docTitle){ 
//sync title of main window with title of iframe. 
docTitle = this.iframe.document.title = document.title; 
} 
}catch(e){ 
//permission denied - server cannot be reached. 
ifrOffline = true; 
console.error("dojo.hash: Error adding history 
entry. Server unreachable."); 
}

再如FCKeditor
try{ 
if ( (/fcksource=true/i).test( window.top.location.search ) ) 
sFile = 'fckeditor.original.html' ; 
} 
catch (e) { /* Ignore it. Much probably we are insi 
de a FRAME where the "top" is in another domain (security error). */ }

还有很多网友的反馈:chrome bug report

以上代码在chrome,safari,opera均不适用。翻了一些资料,记录在此:
1.html5 security location
2.webkit dev lists
从webkit开发人员的讨论消息中看到,他们承认这个问题但并不情愿去改正,holly shit!

Javascript 相关文章推荐
js实现运行代码需要刷新的解决方法
Aug 18 Javascript
Javascript 跨域访问解决方案
Feb 14 Javascript
一个JS小玩意 几个属性相加不能超过一个特定值.
Sep 29 Javascript
DLL+ ActiveX控件+WEB页面调用例子
Aug 07 Javascript
js实现的早期滑动门菜单效果代码
Aug 27 Javascript
JS实现alert中显示换行的方法
Dec 17 Javascript
页面get请求 中文参数方法乱码问题的快速解决方法
May 31 Javascript
在vue里使用codemirror遇到的问题
Nov 01 Javascript
layDate插件设置开始和结束时间
Nov 15 Javascript
创建Vue项目以及引入Iview的方法示例
Dec 03 Javascript
JavaScript实现的鼠标跟随特效示例【2则实例】
Dec 22 Javascript
jquery简单实现纵向的无缝滚动代码实例
Apr 01 jQuery
Array, Array Constructor, for in loop, typeof, instanceOf
Sep 13 #Javascript
容易被忽略的JS脚本特性
Sep 13 #Javascript
Javascript学习笔记-详解in运算符
Sep 13 #Javascript
使用原生javascript创建通用表单验证——更锋利的使用dom对象
Sep 13 #Javascript
ie下动态加态js文件的方法
Sep 13 #Javascript
使用Json比用string返回数据更友好,也更面向对象一些
Sep 13 #Javascript
TextArea不支持maxlength的解决办法(jquery)
Sep 13 #Javascript
You might like
php采集中国代理服务器网的方法
2015/06/16 PHP
layui数据表格自定义每页条数limit设置
2019/10/26 PHP
THINKPHP-Apache服务器中使用Alias虚拟目录URL重写 隐藏index.php
2021/03/09 PHP
用tip解决Ext列宽度不够的问题
2008/12/13 Javascript
js判读浏览器是否支持html5的canvas的代码
2013/11/18 Javascript
jquery获取html元素的绝对位置和相对位置的方法
2014/06/20 Javascript
JavaScript匿名函数与委托使用示例
2014/07/22 Javascript
JavaScript设计模式之观察者模式(发布者-订阅者模式)
2014/09/24 Javascript
快速获取/设置iframe内对象元素的几种js实现方法
2016/05/20 Javascript
浅谈JavaScript事件绑定的常用方法及其优缺点分析
2016/11/01 Javascript
基于JavaScript 性能优化技巧心得(分享)
2017/12/11 Javascript
vue element-ui 绑定@keyup事件无效的解决方法
2018/03/09 Javascript
clipboard.js在移动端复制失败的解决方法
2018/06/13 Javascript
vue.js实现的绑定class操作示例
2018/07/06 Javascript
JavaScript简单实现关键字文本搜索高亮显示功能示例
2018/07/25 Javascript
微信小程序有旋转动画效果的音乐组件实例代码
2018/08/22 Javascript
vue弹窗组件的实现示例代码
2018/09/10 Javascript
一个Java程序猿眼中的前后端分离以及Vue.js入门(推荐)
2019/04/19 Javascript
jquery更改元素属性attr()方法操作示例
2020/05/22 jQuery
python使用三角迭代计算圆周率PI的方法
2015/03/20 Python
对于Python装饰器使用的一些建议
2015/06/03 Python
Python 创建新文件时避免覆盖已有的同名文件的解决方法
2018/11/16 Python
对python自动生成接口测试的示例讲解
2018/11/30 Python
python 实现调用子文件下的模块方法
2018/12/07 Python
详解Django-channels 实现WebSocket实例
2019/08/22 Python
python+django+rest框架配置创建方法
2019/08/31 Python
python3的UnicodeDecodeError解决方法
2019/12/20 Python
Russell Stover巧克力官方网站:美国领先的精美巧克力制造商
2016/11/27 全球购物
英国领先的互联网葡萄酒礼品商:Vintage Wine & Port
2019/05/24 全球购物
Crabtree & Evelyn欧盟:豪华洗浴、身体和护发
2021/03/09 全球购物
关于环保的建议书
2014/05/12 职场文书
企业安全生产承诺书
2014/05/22 职场文书
会员活动策划方案
2014/08/19 职场文书
公司员工离职证明书
2014/10/04 职场文书
2015年初中元旦晚会活动总结
2014/11/28 职场文书
2016国庆促销广告语
2016/01/28 职场文书