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 相关文章推荐
extjs3 combobox取value和text案例详解
Feb 06 Javascript
css配合jquery美化 select
Nov 29 Javascript
jquery datatable后台封装数据示例代码
Aug 07 Javascript
js实现Select头像选择实时预览代码
Aug 17 Javascript
js验证身份证号有效性并提示对应信息
Oct 19 Javascript
Bootstrap页面缩小变形的快速解决办法
Feb 03 Javascript
微信小程序  http请求封装详解及实例代码
Feb 15 Javascript
微信小程序 action-sheet 反馈上拉菜单简单实例
May 11 Javascript
vue.js配合$.post从后台获取数据简单demo分享
Aug 11 Javascript
详解如何构建Promise队列实现异步函数顺序执行
Oct 23 Javascript
微信运维交互机器人的示例代码
Nov 12 Javascript
JS+CSS3实现的简易钟表效果示例
Apr 13 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
main.php
2006/12/09 PHP
php中根据某年第几天计算出日期年月日的代码
2011/02/24 PHP
fleaphp crud操作之find函数的使用方法
2011/04/23 PHP
比较discuz和ecshop的截取字符串函数php版
2012/09/03 PHP
如何正确配置Nginx + PHP
2016/07/15 PHP
PHP Header用于页面跳转时的几个注意事项
2016/10/21 PHP
php将print_r处理后的数据还原为原始数组的解决方法
2016/11/02 PHP
laravel框架中路由设置,路由参数和路由命名实例分析
2019/11/23 PHP
extjs DataReader、JsonReader、XmlReader的构造方法
2009/11/07 Javascript
事件模型在各浏览器中存在差异
2010/10/20 Javascript
TinyMCE 新增本地图片上传功能
2010/11/05 Javascript
使用js实现雪花飘落效果
2013/08/26 Javascript
js中判断用户输入的值是否为空的简单实例
2013/12/23 Javascript
jquery ajax,ashx,json的用法总结
2014/02/12 Javascript
jquery ztree实现下拉树形框使用到了json数据
2014/05/14 Javascript
JQuery 在线引用及测试引用是否成功
2014/06/24 Javascript
JavaScript中Number.MIN_VALUE属性的使用示例
2015/06/04 Javascript
Active控件问题小结(附解决办法)
2016/06/09 Javascript
javascript 实现动态侧边栏实例详解
2016/11/11 Javascript
AngularJS中的JSONP实例解析
2016/12/01 Javascript
[39:32]2014 DOTA2国际邀请赛中国区预选赛 TongFu VS DT 第二场
2014/05/23 DOTA
py2exe 编译ico图标的代码
2013/03/08 Python
从零学python系列之浅谈pickle模块封装和拆封数据对象的方法
2014/05/23 Python
Python中优化NumPy包使用性能的教程
2015/04/23 Python
python读取csv文件指定行的2种方法详解
2020/02/13 Python
Python多线程Threading、子线程与守护线程实例详解
2020/03/24 Python
基于Python和C++实现删除链表的节点
2020/07/06 Python
CSS3实现菜单悬停效果
2020/11/17 HTML / CSS
澳大利亚汽车零部件、音响及配件超市:Automotive Superstore
2018/06/19 全球购物
饿了么订餐官网:外卖、网上订餐
2019/06/28 全球购物
历史学专业大学生找工作的自我评价
2013/10/16 职场文书
办公自动化毕业生求职信
2014/03/09 职场文书
村干部任职承诺书
2015/01/21 职场文书
2015秋季开学典礼主持词
2015/07/16 职场文书
Python爬虫 简单介绍一下Xpath及使用
2022/04/26 Python
JavaScript实现九宫格拖拽效果
2022/06/28 Javascript