栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

JSON劫持仍然是现代浏览器中的问题吗?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JSON劫持仍然是现代浏览器中的问题吗?

不,不再可能捕获在Firefox 21,Chrome 27或IE10中传递给

[]
{}
构造函数的值。

var capture = function() {    var ta = document.querySelector('textarea')    ta.innerHTML = '';    ta.appendChild(document.createTextNode("Captured: "+JSON.stringify(arguments)));    return arguments;}var original = Array;var toggle = document.body.querySelector('input[type="checkbox"]');var toggleCapture = function() {    var isOn = toggle.checked;    window.Array = isOn ? capture : original;    if (isOn) {        Object.defineProperty(Object.prototype, 'foo', {set: capture});    } else {        delete Object.prototype.foo;    }};toggle.addEventListener('click', toggleCapture);toggleCapture();[].forEach.call(document.body.querySelectorAll('input[type="button"]'), function(el) {    el.addEventListener('click', function() {        document.querySelector('textarea').innerHTML = 'Safe.';        eval(this.value);    });});<div><label><input type="checkbox" checked="checked"> Capture</label></div><div><input type="button" value="[1, 2]" /> <input type="button" value="Array(1, 2);" /> <input type="button" value="{foo: 'bar'}" /> <input type="button" value="({}).foo = 'bar';" /></div><div><textarea></textarea></div>

它重写

window.Array
和添加一个setter,
Object.prototype.foo
并通过短格式和长格式测试初始化​​数组和对象。

的ES4规范,在第1.5节,“需要的对象和阵列的全球性的,标准绑定到被用于构建用于对象和数组的初始化新对象”在实施先例与指出,“InternetExplorer6中,歌剧9.20,和Safari3执行不尊重Object和Array的本地或全局重新绑定,而是使用原始的Object和Array构造函数。”这在ES5第11.1.4节中保留。

Allen Wirfs-Brock解释说,ES5还指定对象初始化不应触发设置方法,因为它使用DefineOwnProperty。MDN:使用对象指出:“从Javascript1.8.1开始,在对象和数组初始化程序中设置属性时,不再调用setter。”



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/405070.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号