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 相关文章推荐
网页开发中的容易忽略的问题 javascript HTML中的table
Apr 15 Javascript
ECMAScript 创建自己的js类库
Nov 22 Javascript
JavaScript和CSS通过expression实现Table居中显示
Jun 28 Javascript
JS实现新浪微博效果带遮罩层的弹出框代码
Oct 12 Javascript
阿里巴巴技术文章分享 Javascript继承机制的实现
Jan 14 Javascript
js实现百度搜索提示框
Feb 05 Javascript
Bootstrap导航中表单简单实现代码
Mar 06 Javascript
JavaScript使用readAsDataURL读取图像文件
May 10 Javascript
解决VUEX刷新的时候出现数据消失
Jul 03 Javascript
Vue自定义指令详解
Jul 28 Javascript
详解vue中使用protobuf踩坑记
May 07 Javascript
vue+iview实现分页及查询功能
Nov 17 Vue.js
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连接mysql数据库代码
2009/03/10 PHP
phpQuery占用内存过多的处理方法
2013/11/13 PHP
PHP错误Allowed memory size of 67108864 bytes exhausted的3种解决办法
2014/07/28 PHP
thinkphp微信开之安全模式消息加密解密不成功的解决办法
2015/12/02 PHP
javascript 可以拖动的DIV(二)
2009/06/26 Javascript
js 代码集(学习js的朋友可以看下)
2009/07/22 Javascript
js中的window.open返回object的错误的解决方法
2009/08/15 Javascript
JS小功能(操作Table--动态添加删除表格及数据)实现代码
2013/11/28 Javascript
JS正则表达式验证数字代码
2014/01/28 Javascript
node.js中的fs.chownSync方法使用说明
2014/12/16 Javascript
JS制作简单的三级联动
2015/03/18 Javascript
jQuery实现在列表的首行添加数据
2015/05/19 Javascript
javascript中的3种继承实现方法
2016/01/27 Javascript
JavaScript实现汉字转换为拼音的库文件示例
2016/12/22 Javascript
浅析bootstrap原理及优缺点
2017/03/19 Javascript
深入理解JavaScript继承的多种方式和优缺点
2017/05/12 Javascript
Vue.js实现价格计算器功能
2020/03/30 Javascript
详解python并发获取snmp信息及性能测试
2017/03/27 Python
详解python中Numpy的属性与创建矩阵
2018/09/10 Python
python实现将文件夹内的每张图片批量分割成多张
2019/07/22 Python
python读写文件write和flush的实现方式
2020/02/21 Python
Python 基于FIR实现Hilbert滤波器求信号包络详解
2020/02/26 Python
Python求凸包及多边形面积教程
2020/04/12 Python
Python 字节流,字符串,十六进制相互转换实例(binascii,bytes)
2020/05/11 Python
html5视频常用API接口的实战示例
2020/03/20 HTML / CSS
美国家具网站:Cymax
2016/09/17 全球购物
怎样在程序里获得一个空指针
2015/01/24 面试题
CSS代码检查工具stylelint的使用方法详解
2021/03/27 HTML / CSS
精细化工应届生求职信
2013/11/17 职场文书
大学校庆策划书
2014/01/31 职场文书
2014年政协委员工作总结
2014/12/01 职场文书
出国留学自荐信模板
2015/03/06 职场文书
亮剑观后感500字
2015/06/05 职场文书
公司趣味运动会开幕词
2016/03/04 职场文书
golang操作rocketmq的示例代码
2022/04/06 Golang
Win10鼠标宏怎么设置?win10系统鼠标宏的设置方法
2022/08/14 数码科技