JSON劫持与while(1)

2024-04-26 05:04
文章标签 json 劫持

本文主要是介绍JSON劫持与while(1),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、背景与介绍

        JSON 劫持,也称为“JavaScript 对象表示不法劫持”。当应用程序没有适当地防范此类攻击时,此漏洞允许攻击者从受害者的浏览器中窃取敏感数据。 JSON 劫持利用同源策略,这是一种安全措施,可防止网页向与提供网页的域不同的域发出请求。

        这是通过查询资料找到关于什么"JSON劫持"的解释.

        这个JSON劫持一般发生与JSONP、CSRF跨站伪造请求有点异曲同工之处。我们都知道CSRF攻击,本质还是利用了浏览器针对站点颁发的Cookie,如果客户端浏览器有这个站点的Cookie,那么每次请求这个站点的HTTP请求,都会携带上Cookie.  

        那么经典的CSRF攻击场景是怎么样的呢?

        1、某黑客利用当前比较热门的话题,例如xx视频观看,某某文章爆料,或者具备诱惑的内容,制作了一个调用网址页面,引诱你点他的链接

        2、之后,黑客在他的页面内容写了一些恶意JS代码或者html标签,例如淘宝taobao.com大家用得比较多,有一些活动,例如这个GET请求,就是给黑客的账号充钱/充积分. 假设链接地址是https://www.taobao.com/activity?id=101&user_id=100,  101是活动id, user_id=100, 只要你登录了taobao.com,并且访问这个链接,那就代表你给这个user_id=100充钱或者默认赠送你账号上的积分之类的。  (这里只是举例子,taobao也不是吃干饭的,不会这么沙雕)

        假设user_id=100正是这个黑客的账号。 那么当你进到黑客网页, 黑客网页有一个img标签或者script标签,指向这个URL地址, 那么你的浏览器会自动访问这个URL, 并且携带了你的淘宝Cookie, OK, 你有可能就被悄无声息的转账或者转积分给黑客了。  

        画个图大家理解下原理:

二、JSONP劫持

1、劫持场景举例

        JSONP劫持也是类似, 黑客站点可以直接通过<script>标签等手段,越过浏览器CORS跨域机制,访问到你站点(还是taobao.com举例)的JSONP接口,传递回调函数callback=p, 最后你的这个JSONP接口返回数据为  p({"name":"xx", "age":"xx", "account": ""}), 回调执行了黑客前端的Javascript p函数,拿到JSONP数据。

        假设这个JSONP接口,返回一些敏感信息,如姓名、身份证信息、手机号等等, 那么黑客在自己的网页再将JSONP拿到的数据传输到自己的后台存储分析,那么你的隐私数据是不是就被泄露了。

2、JSON劫持的核心逻辑

        上面我们发现JSONP的核心逻辑还是返回的回调数据被浏览器自动执行了。  一旦响应回来,就自动执行了 p({"name":"xx", "age":"xx", "account": ""}) 这个函数, 这个p函数就是黑客的js回调函数。

        那么如果要粉碎黑客的阴谋, 我们肯定就是让这个p({"name":"xx", "age":"xx", "account": ""})函数不能如愿的执行。 寻找某种方法,让浏览器不执行这个回调函数

3、JSONP添加while(1);解决

        参考资料,发现Google是这么解决这个问题的。在接口响应返回数据的时候,在前面加一句代码while(1);。   最终响应内容是: while(1);p({"name":"xx", "age":"xx", "phone": ""})

        一旦响应到浏览器进行js代码解析,发现while(1);有一个死循环,哈哈哈, 那么黑客的js回调函数p({"name":"xx", "age":"xx", "phone": ""})就得不到执行了。 防止了JSONP的劫持问题

三、总结

        1、不要点击陌生链接,特别是邮箱收到的、短信收到的等等。 必须看下域名信息是不是正常的,多留个心眼

        2、做开发的时候,后端如果有这种JSONP的接口,那么特别小心,通过while(1);的方式可以避免JSON劫持问题。 Golang的Gin框架,可以使用SecureJSON() 输出接口内容,自带while(1);

        3、如果能通过POST请求实现的,尽量不要暴露更多这种GET的JSONP请求接口了。

这篇关于JSON劫持与while(1)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/936766

相关文章

Python进行JSON和Excel文件转换处理指南

《Python进行JSON和Excel文件转换处理指南》在数据交换与系统集成中,JSON与Excel是两种极为常见的数据格式,本文将介绍如何使用Python实现将JSON转换为格式化的Excel文件,... 目录将 jsON 导入为格式化 Excel将 Excel 导出为结构化 JSON处理嵌套 JSON:

详解MySQL中JSON数据类型用法及与传统JSON字符串对比

《详解MySQL中JSON数据类型用法及与传统JSON字符串对比》MySQL从5.7版本开始引入了JSON数据类型,专门用于存储JSON格式的数据,本文将为大家简单介绍一下MySQL中JSON数据类型... 目录前言基本用法jsON数据类型 vs 传统JSON字符串1. 存储方式2. 查询方式对比3. 索引

C#解析JSON数据全攻略指南

《C#解析JSON数据全攻略指南》这篇文章主要为大家详细介绍了使用C#解析JSON数据全攻略指南,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、为什么jsON是C#开发必修课?二、四步搞定网络JSON数据1. 获取数据 - HttpClient最佳实践2. 动态解析 - 快速

MySQL 8 中的一个强大功能 JSON_TABLE示例详解

《MySQL8中的一个强大功能JSON_TABLE示例详解》JSON_TABLE是MySQL8中引入的一个强大功能,它允许用户将JSON数据转换为关系表格式,从而可以更方便地在SQL查询中处理J... 目录基本语法示例示例查询解释应用场景不适用场景1. ‌jsON 数据结构过于复杂或动态变化‌2. ‌性能要

Spring的RedisTemplate的json反序列泛型丢失问题解决

《Spring的RedisTemplate的json反序列泛型丢失问题解决》本文主要介绍了SpringRedisTemplate中使用JSON序列化时泛型信息丢失的问题及其提出三种解决方案,可以根据性... 目录背景解决方案方案一方案二方案三总结背景在使用RedisTemplate操作redis时我们针对

MySQL查询JSON数组字段包含特定字符串的方法

《MySQL查询JSON数组字段包含特定字符串的方法》在MySQL数据库中,当某个字段存储的是JSON数组,需要查询数组中包含特定字符串的记录时传统的LIKE语句无法直接使用,下面小编就为大家介绍两种... 目录问题背景解决方案对比1. 精确匹配方案(推荐)2. 模糊匹配方案参数化查询示例使用场景建议性能优

解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘问题

《解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘问题》:本文主要介绍解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4... 目录未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘打开pom.XM

SpringBoot排查和解决JSON解析错误(400 Bad Request)的方法

《SpringBoot排查和解决JSON解析错误(400BadRequest)的方法》在开发SpringBootRESTfulAPI时,客户端与服务端的数据交互通常使用JSON格式,然而,JSON... 目录问题背景1. 问题描述2. 错误分析解决方案1. 手动重新输入jsON2. 使用工具清理JSON3.

Springboot3+将ID转为JSON字符串的详细配置方案

《Springboot3+将ID转为JSON字符串的详细配置方案》:本文主要介绍纯后端实现Long/BigIntegerID转为JSON字符串的详细配置方案,s基于SpringBoot3+和Spr... 目录1. 添加依赖2. 全局 Jackson 配置3. 精准控制(可选)4. OpenAPI (Spri

MySQL JSON 查询中的对象与数组技巧及查询示例

《MySQLJSON查询中的对象与数组技巧及查询示例》MySQL中JSON对象和JSON数组查询的详细介绍及带有WHERE条件的查询示例,本文给大家介绍的非常详细,mysqljson查询示例相关知... 目录jsON 对象查询1. JSON_CONTAINS2. JSON_EXTRACT3. JSON_TA