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 IE 与 FF中兼容问题小结
Feb 18 Javascript
jQuery结合Json提交数据到Webservice,并接收从Webservice返回的Json数据
Feb 18 Javascript
jQuery(1.6.3) 中css方法对浮动的实现缺陷分析
Sep 09 Javascript
JavaScript中的Math 使用介绍
Apr 21 Javascript
html文档中的location对象属性理解及常见的用法
Aug 13 Javascript
深入理解JS函数的参数(arguments)的使用
May 28 Javascript
Mvc提交表单的四种方法全程详解
Aug 10 Javascript
利用jQuery的动画函数animate实现豌豆发射效果
Aug 28 Javascript
jQuery使用正则验证15/18身份证的方法示例
Apr 27 jQuery
Angular动画实现的2种方式以及添加购物车动画实例代码
Aug 09 Javascript
js键盘事件实现人物的行走
Jan 17 Javascript
原生js实现简单轮播图
Oct 26 Javascript
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基础知识:类与对象(2) 自动加载对象
2006/12/13 PHP
利用PHP实现智能文件类型检测的实现代码
2011/08/02 PHP
PHP定时更新程序设计思路分享
2014/06/10 PHP
AJAX PHP无刷新form表单提交的简单实现(推荐)
2016/09/09 PHP
PHP环境搭建(php+Apache+mysql)
2016/11/14 PHP
php利用imagemagick实现复古老照片效果实例
2017/02/16 PHP
Jquery EasyUI的添加,修改,删除,查询等基本操作介绍
2013/10/11 Javascript
JavaScript动态加载样式表的方法
2015/03/21 Javascript
jQuery中 prop() attr()使用详解
2015/05/19 Javascript
js+div实现文字滚动和图片切换效果代码
2015/08/27 Javascript
JavaScript编程中window的location与history对象详解
2015/10/26 Javascript
JS简单模拟触发按钮点击功能的方法
2015/11/30 Javascript
AngularJS利用Controller完成URL跳转
2016/08/09 Javascript
详解微信开发中snsapi_base和snsapi_userinfo及静默授权的实现
2017/03/11 Javascript
微信小程序点击控件修改样式实例详解
2017/07/07 Javascript
Express使用html模板的详细代码
2017/09/18 Javascript
通过一个简单的例子学会vuex与模块化
2017/11/22 Javascript
JS实现常见的查找、排序、去重算法示例
2018/05/21 Javascript
简单学习5种处理Vue.js异常的方法
2019/06/17 Javascript
[03:59]DOTA2英雄梦之声_第07期_水晶室女
2014/06/23 DOTA
[00:32]DOTA2上海特级锦标赛 Ehome战队宣传片
2016/03/03 DOTA
跟老齐学Python之开始真正编程
2014/09/12 Python
Python中的装饰器用法详解
2015/01/14 Python
浅析Python中将单词首字母大写的capitalize()方法
2015/05/18 Python
在Python中操作文件之seek()方法的使用教程
2015/05/24 Python
python中的字典使用分享
2016/07/31 Python
python绘制立方体的方法
2018/07/02 Python
浅谈Python 多进程默认不能共享全局变量的问题
2019/01/11 Python
keras模型保存为tensorflow的二进制模型方式
2020/05/25 Python
django form和field具体方法和属性说明
2020/07/09 Python
Linux文件操作命令都有哪些
2015/02/27 面试题
初中生期末考试的自我评价
2013/12/17 职场文书
学用政策心得体会
2014/09/10 职场文书
北大自主招生自荐信
2015/03/04 职场文书
政工师工作总结2015
2015/05/26 职场文书
用Python制作灯光秀短视频的思路详解
2021/04/13 Python