Jsonp常见安全漏洞分析
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Jsonp常见安全漏洞分析(京东商城Jsonp 漏洞分析)
JSONP(JSON with Padding)是资料格式 JSON 的一种“使用模式”,可以让网页从别的网域要资料。这个解释来自于互联网上面的答案。jsonp只是一种使用json模式,之所以能够很广泛使用。主要用它来解决跨域访问问题。可以方便跨域名传输数据。一些是一个jsonp的例子。但是,正确的使用 jsonp是至关重要的,用得不好。将带来重要资料把超范围访问,还会带来各自xss漏洞。
JSONP跨域请求例子
传统的ajax ,往往是 XMLHttpRequest ,读取一个接口,返回类似: {“Name”: “小明”, “Rank”: 7} json值。一般我们都采用xmlhttprequest方法通过状态判断执行请求是否完毕。
JSONP的使用模式里,该URL回传的是由自定义传入函数名,动态生成JSON作为该函数入参,这就是JSONP 的“填充(padding)”或是“前辍(prefix)”的由来。
请求:
返回:
parseResponse({"Name": "Cheeso", "Id" : 1823, "Rank": 7})
parseResponse是传入参数值决定的,这样好处通过script标签可以解决跨域问题,并且只要script src地址加载完,js解析引擎就开始执行src地址返回 js内容了。我们使用者不用关心,什么时候src地址加载解析完。只用写好接收函数:parseResponse,到时候自动回执行该项目。比传统ajax确实多了很多方便!目前,象google翻译,地图等都用该方法。实现了跨域及异步调用!
JSONP漏洞将来自哪里?
它给我们带来的发布,是毫无疑问的。那么它将会有哪些漏洞呢?首先,我们知道,一切输入是有害的。传入callback 值会在结果里面直接返回。因此,如果该参数过滤不严格。可以随便输入:callback值为:alert(‘1’);parse Response 字符串。返回结果会打印个alert窗口,然后也会正常执行。
那么另外我们知道,flash是可以跨域的。flash请求外部资源,现在都有个”crossdomain.xml”,可以授权允许那些来源的站点,访问指定站点的资源。其实目的就是为了防止,资源被越权调用
了。如果我们不对其授权,那么任何网站都可通过:创建script标记,读取我网站资源了!这个安全项,也就是是否有对访问来源进行了授权访问!
JSONP漏洞总结:
知道了JSONP漏洞点主要有:callback参数注入、资源访问授权设置!我们其实,可以通过这2项,来检测我们的做的JSONP项目,里面是否有安全隐患了。好了,今天先分析到这里。这些漏洞都是,技术实现型漏洞!只要,我们明白了方法,杜绝是很容易的。之所以会出现类似安全隐患,更多来自,不知道这里有类似安全问题!,题外话、发发感慨!!现在网上看到很多教程,以及书籍都只会讲,怎么样使用某个功能,它的方法、技巧等等!很少解决,技术功能点安全避免漏洞的调用方法!做一个功能很重要,但是我始终认为,开发一个安全、稳定功能是最基础的前提。如果做的功能不安全,稳定!它急着上线,只会带来更大的风险、或是损失!!!欢迎大家交流,提出更换的建议!(”什么?这里不是说京东商城有JSONP漏洞吗?“”对!没错!” 今天我这里分析漏洞点,大家可以找找京东商城这方面使用漏洞,我们下次分享实例!)
京东商城Jsonp 漏洞分析(京东商城XSS漏洞)
继续我们jsonp 安全使用分享吧!上一篇文章我们提到jsonp使用,常见2种类型漏洞出现!详细可以看看:Jsonp常见安全漏洞分析,今天我们来结合实例分析下该漏洞的测试、及利用过程吧!
题外话
为什么我选择是京东商城来分析它的jsonp 漏洞呢,其实主要原因最近6.18一直在做活动,我也买了不少便宜东西。现在该商城越做越好了。它系统也非常庞大,速度性能也很好。当时在购物时候,只是想看看,它的系统分离设计方面。通过分析页面http请求,发现有很多jsonp调用(也许跟换域名有关系,2种域名都可以访问,中间用jsonp交换数据),于是就看看,jsonp 常见2种安全方面,有没有做处理。结果一测试。发现完全没有做任何处理,几乎是完完全全暴露出来。个人认为,对于这么大站点,这一点还是头一次遇到!居然,没有任何参数处理、以及资源授权!
京东商城Jsonp xss漏洞分析
我们看到,该请求就是一个jsonp,
默认返回:jsonp13**********({“Identity”:{“Name”:”",”IsAuthenticated”:false}}),我们知道callback传入参数,会在response中作为函数调用名称返回!
分析callback 字符范围
1、测试下有没有屏蔽常见特殊字符” <> ()’”;. {}“,以下这些字符,经常会用到xss里面的。
到这里,分析说明这里存在着xss注入漏洞的。而且,可以选择很多种方法注入!本编文章,旨在说明jsonp xss漏洞成因!不会具体去扩大漏洞拿到其它什么权限。以下还有个很有意思事情,callback其实,jd对一些特殊字符串做了处理的。我们看看:
从上图中,我们可以看到,京东商城,对输入callback对一些特定的字符串进行了屏蔽处理!这也是,我们做xss漏洞检查时候,经常出现问题。屏蔽字符串能够屏蔽完吗?常见26字符,长度不一任意组合。该有多少字符串呢?很多朋友,在做安全检测时候,就是屏蔽某些觉得很不安全的标签就认为安全了。其实,我们发现这样做法只能是一时安全,过不了多久,你会发现又有新的字符串出现。你会为此花费大量的人力物力!好了,做类似事情,我们最好方法是,认证那些觉得安全的字符,予以放行!
其实,为什么用白名单方法放行允许的字符呢?而不是去过滤一些字符串。原因刚刚说了,字符串太多了。过滤不过来!另外是,我们自己每个业务参数,会用到那些字符其实我们更清楚。另外有人会问,为什么不去屏蔽不用的字符呢?我们知道基础ascii码有0-127,128字符。往往我们,不会用到的字符可能更多呢,我们去过滤不会用到字符,有时候更困难!
正确检查jsonp callback方法
建议收到callback函数对它进行白名单字符范围检测!我们可以用一般函数检测规范来检查就可以了。既然它是一个函数名称,一般都是字符+数字+下划线+点号(对象分割)。那么我们检测变得非常简单,代码类似如:
1