2011-11-07 51 views
5

我注意到在JSONP输出中有一个空的注释块,它由facebook图形API为 所有方法返回。Facebook图形api JSONP格式,/ * * /第一行代表什么?

URL,我叫:

https://graph.facebook.com/NUMERIC_FACEBOOK_ID/friends?access_token=ACCESS_TOKEN_STRING&callback=theGreatFunction 

的JSONP输出是:

/**/ theGreatFunction({ 
    "data": [ 
     { 
     "name": "First Friend", 
     "id": "XXXX" 
     }, 
     { 
     "name": "Second Friend", 
     "id": "XXXXXX" 
     }, 
    ........ 

我的问题是:什么是回调函数之前空注释块/* */意味着什么? 它有一个奇特的目的吗?它是否修复了任何已知的javascript gotcha?

回答

14

我们加入这个以防止那里第三方网站通过做绕过内容类型的响应的攻击:

<object type="application/x-shockwave-flash" 
data="http://graph.facebook.com?callback=[specifically crafted flash bytes]"> 
</object> 

谷歌做类似的东西,除了他们使用// ... + \ n(例如http://www.google.com/calendar/feeds/[email protected]/public/full?alt=json&callback=foo

+1

空的评论块如何帮助抵御这种攻击,我无法理解? – DhruvPathak

+3

没有评论块,jsonp响应可以被重新解释为动作脚本(flash)代码。 swf文件格式规定前3个字节必须是FWS或CWS。空的评论阻止了这一点。 – Alok

-1

可能是某种分隔符有一个固定的开始。我猜Facebook有一个理由,但它在那里,但我们只能猜测,它并不重要吗? :)

+0

如果知道某个原因,这将是一件好事。喜欢它可能会在那里修复一些JavaScript陷阱等。 – DhruvPathak