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 非图片动态loading效果实现代码
Apr 09 Javascript
js获取当前时间显示在页面上并每秒刷新
Dec 24 Javascript
javascript 对象数组根据对象object key的值排序
Mar 09 Javascript
javascript密码强度校验代码(两种方法)
Aug 10 Javascript
Vue.js弹出模态框组件开发的示例代码
Jul 26 Javascript
Angular4实现动态添加删除表单输入框功能
Aug 11 Javascript
Vue CLI3 如何支持less的方法示例
Aug 29 Javascript
DatePickerDialog 自定义样式及使用全解
Jul 09 Javascript
JS中如何轻松遍历对象属性的方式总结
Aug 06 Javascript
解决vuecli3中img src 的引入问题
Aug 04 Javascript
jQuery实现增删改查
Dec 22 jQuery
Vue 数据响应式相关总结
Jan 28 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
虫族 Zerg 热键控制
2020/03/14 星际争霸
PHP中的超全局变量
2006/10/09 PHP
php google或baidu分页代码
2009/11/26 PHP
PHP SEO优化之URL优化方法
2011/04/21 PHP
深入PHP nl2br()格式化输出的详解
2013/06/05 PHP
使用PHP生成二维码的方法汇总
2015/07/22 PHP
php读取qqwry.dat ip地址定位文件的类实例代码
2016/11/15 PHP
PHP+Apache环境中如何隐藏Apache版本
2017/11/24 PHP
javascript在事件监听方面的兼容性小结
2010/04/07 Javascript
js中更短的 Array 类型转换
2011/10/30 Javascript
JavaScript异步调用定时方法并停止该方法实现代码
2012/03/16 Javascript
jquery获取子节点和父节点的示例代码
2013/09/10 Javascript
零基础搭建Node.js、Express、Ejs、Mongodb服务器及应用开发入门
2014/12/20 Javascript
深入理解Angular2 模板语法
2016/08/07 Javascript
超详细的5个Shell脚本实例分享(值得收藏)
2019/08/15 Javascript
[03:33]TI9战队采访 - Infamous
2019/08/20 DOTA
CentOS安装pillow报错的解决方法
2016/01/27 Python
【Python】Python的urllib模块、urllib2模块批量进行网页下载文件
2016/11/19 Python
python中模块查找的原理与方法详解
2017/08/11 Python
Python3学习笔记之列表方法示例详解
2017/10/06 Python
详解python3中的真值测试
2018/08/13 Python
Python对excel文档的操作方法详解
2018/12/10 Python
Python格式化字符串f-string概览(小结)
2019/06/18 Python
决策树剪枝算法的python实现方法详解
2019/09/18 Python
pycharm设置当前工作目录的操作(working directory)
2020/02/14 Python
python读取mysql数据绘制条形图
2020/03/25 Python
浅析python 字典嵌套
2020/09/29 Python
Python实现邮件发送的详细设置方法(遇到问题)
2021/01/18 Python
canvas离屏技术与放大镜实现代码示例
2018/08/31 HTML / CSS
phpquery中文手册
2021/03/18 PHP
世界最大域名注册商:GoDaddy
2016/07/24 全球购物
西尔斯百货官网:Sears
2016/09/06 全球购物
环法自行车赛官方商店:Le Tour de France
2017/08/27 全球购物
自动化专业个人求职信范文
2013/11/29 职场文书
女大学生个人求职信
2013/12/09 职场文书
安全生产责任书
2014/03/12 职场文书