Possible Duplicate:
07000

我发现这种语法在Facebook上用于Ajax调用。我很困惑的for(;;);部分在响应的开始。它是干什么用的?

这是呼叫和响应:

GET http://0.131.channel.facebook.com/x/1476579705/51033089/false/p_1524926084=0

响应:

for (;;);{"t":"continue"}
Facebook有大量的开发人员在内部工作在很多项目,这是非常常见的人犯一个小错误;无论是简单和严重,如失败的数据插入到一个HTML或sql模板或一些复杂和微妙的使用eval(有时是低效和可疑的不安全)或JSON.parse(一个兼容但不是普遍实现的扩展)的“已知良好”JSON解码器,重要的是找出方法来轻松实施这个开发人员的最佳实践。

为了面对这个挑战,Facebook最近一直在“全力”,内部项目旨在优雅地实施这些最佳实践,并且诚实地,唯一的解释,真正有意义的这个特定的情况只是:有人内部决定所有JSON解析应该在它们的核心库中执行一个单独的实现,最好的方法是对每个单独的API响应get(;;);自动粘在前面。

这样做,开发人员不能“懒惰”:他们会立即注意到,如果他们使用eval(),想知道是什么,然后实现他们的错误,并使用批准的JSON API。

提供的其他答案似乎都属于两个类别之一:

>误解JSONP,或
>误解“JSON劫持”。

第一类中的那些依赖于这样的想法,即攻击者可以以某种方式向不支持它的API请求“使用JSONP”。 JSONP是一个必须在服务器和客户端上支持的协议:它需要服务器返回类似于myFunction({“t”:“continue”})的东西,以便将结果传递给本地函数。你不能只是偶然使用JSONP。

第二类是引用一个非常真实的漏洞,已经描述了允许跨站点请求伪造通过标签到不使用JSONP(例如这一个)的API,允许一种形式的“JSON劫持”。这是通过更改Array / Object构造函数来实现的,它允许用户访问从服务器返回的信息,而不需要包装函数。

然而,这在这种情况下根本不可能:它的原因是一个裸数组(许多JSON API的一个可能的结果,如着名的Gmail示例)是一个有效的表达式语句,这不是真的裸对象。

实际上,由JSON定义的对象的语法(其中包括字段名称周围的引号,如本示例所示)与块的语法冲突,因此无法在脚本的顶级使用。

js> {"t":"continue"}
typein:2: SyntaxError: invalid label:
typein:2: {"t":"continue"}
typein:2: ....^

对于可以通过Object()构造函数重映射来利用的这个例子,它将要求API返回一组括号内的对象,使其成为有效的JavaScript(但不是有效的JSON)。

js> ({"t":"continue"})
[object Object]

现在,它可能是这样的(;;);前缀特技只是“偶然”显示在这个例子中,实际上是由返回数组的其他内部Facebook API返回;但在这种情况下,应该真正地注意到,因为那将是“真正的”原因为什么for(;;);出现在此特定代码段中。

什么是Ajax调用响应像’for(;;); {json data}’是什么意思?的更多相关文章

  1. 如何在iOS / Swift的顶部导航栏中添加“继续”按钮

    我想在导航栏的右侧添加一个“继续”按钮.如何实现这一目标?我一直在尝试使用UIBarButtonItem上的一些方法,但无法使其正常工作.我迄今为止的最大努力是:但我在第一行遇到错误.它不喜欢“style”参数.我也试过了但没有运气.仍然停留在样式参数上.有任何想法吗?

  2. 应用程序关闭时的iOS任务

    我正在构建一个应用程序,通过ajax将文件上传到服务器.问题是用户很可能有时不会有互联网连接,并且客户希望在用户重新连接时安排ajax调用.这可能是用户在离线时安排文件上传并关闭应用程序.应用程序关闭时可以进行ajax调用吗?

  3. Swift控制转移语句

    在Swift语言中,控制转移语句可以改变代码的执行顺序,通过它可以实现代码的跳转。continue在Swift语言中,continue语句告诉一个循环立刻停止本次循环,重新开始下次循环。break在Swift语言中,break语句会立刻结束整个控制流的执行,当想更早的结束一个swift代码块或者一个循环体时,都可以使用break语句来实现。fallthrough在Swift语言中,switch不会从上一个case分支落入到下一个case。return在Swift语言中,使用return,直接停止该方法体的

  4. Swift快速入门四流程控制

    相关文章Swift快速入门(一)第一个Swift程序Swift快速入门(二)基本数据类型Swift快速入门(三)运算符1.分支结构Swift提供两种常见的分支控制结构:if语句和swich语句。一般来说,当条件简单且可能情况较少时使用if语句;当条件比较复杂情况较多时则可以考虑使用swich语句。for-in循环的基本语法格式如下:下面程序使用for-in循环遍历范围:3.控制循环Swift提供了break和continue来控制循环;另外return也可以通过结束整个方法来结束循环。

  5. 4.6 Swift中循环语句中的转移语句 break 和 continue

    /**循环语句中的转移语句break和continue*/letarray:Array=[3,4,5,6,7,8,9]forkinarray{ifk==5{print(k)break}}print("--------->")forkinarray{ifk==5{//结束本次循环,进入下一次循环continue;}print("==\(k)")}print("--------->")/**'init

  6. 使用LLDB调试Swift

    LLDB是个很好的选择。接下来我会探讨一些工作中常用到的一些LLDB调试技巧。LLDB拥有大量有用的调试工具。LLDB的bugreport命令可以生成一份详细的app当前状态的报告。这些命令有针对C++,Objective-C,Swift和RenderScript的。使用LLDB的这些命令可以让调试变得更自动化。process用于控制要调试的进程,可把LLDB依附到特定target或从target上解绑。processstatus用于打印当前进程及断点处的相关信息:使用如下命令可继续执行:这等同于Xcod

  7. android – Phonegap本地构建 – jquery ajax错误:readystate 0 responsetext status 0 statustext error

    解决方法您是否在索引文件中包含了内容安全元标记?

  8. Ajax简单的异步交互及Ajax原生编写

    一提到异步交互大家就会说ajax,仿佛ajax这个技术已经成为了异步交互的代名词.那下面将研究ajax的核心对象

  9. Ajax跨域问题的解决办法汇总(推荐)

    本文给大家分享多种方法解决Ajax跨域问题,非常不错具有参考借鉴价值,感兴趣的朋友一起学习吧

  10. ajax编写简单的登录页面

    这篇文章主要为大家详细介绍了ajax编写简单登录页面的具体代码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

随机推荐

  1. xe-ajax-mock 前端虚拟服务

    最新版本见Github,点击查看历史版本基于XEAjax扩展的Mock虚拟服务插件;对于前后端分离的开发模式,ajax+mock使前端不再依赖后端接口开发效率更高。CDN使用script方式安装,XEAjaxMock会定义为全局变量生产环境请使用xe-ajax-mock.min.js,更小的压缩版本,可以带来更快的速度体验。

  2. vue 使用 xe-ajax

    安装完成后自动挂载在vue实例this.$ajaxCDN安装使用script方式安装,VXEAjax会定义为全局变量生产环境请使用vxe-ajax.min.js,更小的压缩版本,可以带来更快的速度体验。cdnjs获取最新版本点击浏览已发布的所有npm包源码unpkg获取最新版本点击浏览已发布的所有npm包源码AMD安装require.js安装示例ES6Module安装通过Vue.use()来全局安装示例./Home.vue

  3. AJAX POST数据中文乱码解决

    前端使用encodeURI进行编码后台java.net.URLDecoder进行解码编解码工具

  4. Koa2框架利用CORS完成跨域ajax请求

    实现跨域ajax请求的方式有很多,其中一个是利用CORS,而这个方法关键是在服务器端进行配置。本文仅对能够完成正常跨域ajax响应的,最基本的配置进行说明。这样OPTIONS请求就能够通过了。至此为止,相当于仅仅完成了预检,还没发送真正的请求呢。

  5. form提交时,ajax上传文件并更新到<input>中的value字段

  6. ajax的cache作用

    filePath="+escape;},error:{alert;}});解决方案:1.加cache:false2.url加随机数正常代码:网上高人解读:cache的作用就是第一次请求完毕之后,如果再次去请求,可以直接从缓存里面读取而不是再到服务器端读取。

  7. 浅谈ajax上传文件属性contentType = false

    默认值为contentType="application/x-www-form-urlencoded".在默认情况下,内容编码类型满足大多数情况。在这里,我们主要谈谈contentType=false.在使用ajax上传文件时:在其中先封装了一个formData对象,然后使用post方法将文件传给服务器。说到这,我们发现在JQueryajax()方法中我们使contentType=false,这不是冲突了吗?这就是因为当我们在form标签中设置了enctype=“multipart/form-data”,

  8. 909422229_ajaxFileUpload上传文件

    ajaxFileUpload.js很多同名的,因为做出来一个很容易。我上github搜AjaxFileUpload出来很多类似js。ajaxFileUpload是一个异步上传文件的jQuery插件传一个不知道什么版本的上来,以后不用到处找了。语法:$.ajaxFileUploadoptions参数说明:1、url上传处理程序地址。2,fileElementId需要上传的文件域的ID,即的ID。3,secureuri是否启用安全提交,默认为false。4,dataType服务器返回的数据类型。6,error

  9. AJAX-Cache:一款好用的Ajax缓存插件

    原文链接AJAX-Cache是什么Ajax是前端开发必不可少的数据获取手段,在频繁的异步请求业务中,我们往往需要利用“缓存”提升界面响应速度,减少网络资源占用。AJAX-Cache是一款jQuery缓存插件,可以为$.ajax()方法扩展缓存功能。

  10. jsf – Ajax update/render在已渲染属性的组件上不起作用

    我试图ajax更新一个有条件渲染的组件。我可以确保#{user}实际上是可用的。这是怎么引起的,我该如何解决呢?必须始终在ajax可以重新呈现之前呈现组件。Ajax正在使用JavaScriptdocument.getElementById()来查找需要更新的组件。但是如果JSF没有将组件放在第一位,那么JavaScript找不到要更新的内容。解决方案是简单地引用总是渲染的父组件。

返回
顶部