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 相关文章推荐
在IE模态窗口中自由查看HTML源码的方法
Mar 08 Javascript
html dom节点操作(获取/修改/添加或删除)
Jan 23 Javascript
jQuery插件scroll实现无缝滚动效果
Apr 27 Javascript
JavaScript定时器和优化的取消定时器方法
Jul 03 Javascript
javascript中Array()数组函数详解
Aug 23 Javascript
JavaScript获取URL中参数querystring的方法详解
Oct 11 Javascript
jQuery自定义组件(导入组件)
Nov 08 Javascript
JS实现密码框的显示密码和隐藏密码功能示例
Dec 26 Javascript
详谈angularjs中路由页面强制更新的问题
Apr 24 Javascript
vue.js项目中实用的小技巧汇总
Nov 29 Javascript
js常用正则表达式集锦
May 17 Javascript
微信小程序后端实现授权登录
Feb 24 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教程 变量定义
2009/10/23 PHP
php urlencode()与urldecode()函数字符编码原理详解
2011/12/06 PHP
php 模拟post_验证页面的返回状态(实例讲解)
2013/10/28 PHP
从零开始学YII2框架(四)扩展插件yii2-kartikgii
2014/08/20 PHP
php.ini中的request_order推荐设置
2015/05/10 PHP
学习php设计模式 php实现单例模式(singleton)
2015/12/07 PHP
PHP中检索字符串的方法分析【strstr与substr_count方法】
2017/02/17 PHP
JavaScript的eval JSON object问题
2009/11/15 Javascript
解决js正则匹配换行问题实现代码
2012/12/10 Javascript
jquery获取html元素的绝对位置和相对位置的方法
2014/06/20 Javascript
微信小程序 wxapp画布 canvas详细介绍
2016/10/31 Javascript
关于Vue.js 2.0的Vuex 2.0 你需要更新的知识库
2016/11/30 Javascript
js实现图片切换(动画版)
2016/12/25 Javascript
bootstrap中模态框、模态框的属性实例详解
2017/02/17 Javascript
JS库particles.js创建超炫背景粒子插件(附源码下载)
2017/09/13 Javascript
详细分析单线程JS执行问题
2017/11/22 Javascript
Router解决跨模块下的页面跳转示例
2018/01/11 Javascript
JavaScript去掉数组重复项的方法分析【测试可用】
2018/07/19 Javascript
原生js实现文件上传、下载、封装等实例方法
2020/01/05 Javascript
javascript实现贪吃蛇经典游戏
2020/04/10 Javascript
Web服务器框架 Tornado简介
2014/07/16 Python
Python使用遗传算法解决最大流问题
2018/01/29 Python
python django框架中使用FastDFS分布式文件系统的安装方法
2019/06/10 Python
python中的global关键字的使用方法
2019/08/20 Python
python 使用三引号时容易犯的小错误
2020/10/21 Python
纯CSS改变webkit内核浏览器的滚动条样式
2014/04/17 HTML / CSS
websocket+sockjs+stompjs详解及实例代码
2018/11/30 HTML / CSS
bonprix匈牙利:女士、男士和儿童服装
2019/07/19 全球购物
澳洲本土太阳镜品牌:Quay Australia
2019/07/29 全球购物
美国家居装饰店:Pier 1
2019/09/04 全球购物
介绍一下Java中的Class类
2015/04/10 面试题
大四本科生的自我评价
2013/12/30 职场文书
班级道德讲堂实施方案
2014/02/24 职场文书
社团活动总结模板
2014/06/30 职场文书
婚庆公司计划书
2014/09/15 职场文书
灵魂歌王观后感
2015/06/17 职场文书