pat*_*rjk 15 javascript json jsonp
我正在查看GMail所做的一些AJAX调用,我注意到有时调用的返回值以数字开头.示例:(注意第一行后没有分号)
3
[1, 2];
Run Code Online (Sandbox Code Playgroud)
如果我将其输入到JavaScript控制台中,我将返回未定义的内容.但是,如果第二个参数是数字或字符串,我将返回第二个参数.例:
3
4
Run Code Online (Sandbox Code Playgroud)
返回4.
我的猜测是他们这样做是为了阻止jsonp类攻击,然而,是否有人知道正在进行什么基础评估?在第二种情况下,我相信在第一行之后"插入"一个分号,这将使返回4有意义.但是,我想不出第一个表达式返回undefined的原因.
这是因为ASI(自动分号插入)的工作原理.第一个语句被解释为
3[1,2];
Run Code Online (Sandbox Code Playgroud)
所以它是undefined.第二个是通过ASI解释为3;4;是4.
在某些情况下,ASI规则是违反直觉的,例如,您可能想知道为什么数字和括号之间没有分号?嗯,这是有原因的.阅读这些资源以获取更多详细信
http://bclary.com/2004/11/07/#a-7.9.1
谷歌可能会给你更多的结果.:)这就是为什么我们有无尽的无分号JavaScript战争.
这是为了防止Ajax JSON破解更改Array构造函数.这是一个旧的错误,与现代浏览器无关,但必须进行处理.
hack重写了Array构造函数,因此当读取JSON时,代码将执行构造函数的操作.这里有更多解释:http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx
顺便说一下,这就是ASP.NET总是发回这种对象的原因:{d: []}.
| 归档时间: |
|
| 查看次数: |
415 次 |
| 最近记录: |