JSON劫持与while(1)

news/2024/9/23 4:47:44/

一、背景与介绍

        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请求接口了。


http://www.ppmy.cn/news/1444923.html

相关文章

爬虫实战-房天下(bengbu.zu.fang.com/)数据爬取

详细代码链接https://flowus.cn/hbzx/3c42674d-8e6f-42e3-a3f6-bc1258034676 import requests from lxml import etree #xpath解析库 def 源代码(url): cookies { global_cookie: xeqnmumh38dvpj96uzseftwdr20lvkwkfb9, otherid: b44a1837638234f1a0a15e…

【UE C++】打印输出的两种方式

目录 一、UE_LOG 二、调试屏幕信息 一、UE_LOG 定义&#xff1a; UE_LOG 是一个将格式化消息记录到日志文件中的宏。 用法&#xff1a; UE_LOG(LogTemp, Warning, TEXT("Hello World")); 第一个输入参数 LogTemp 是提供给 DEFINE_LOG_CATEGORY 宏的类别名称。你…

《动手学深度学习(Pytorch版)》Task03:线性神经网络——4.29打卡

《动手学深度学习&#xff08;Pytorch版&#xff09;》Task03&#xff1a;线性神经网络 线性回归基本元素线性模型损失函数随机梯度下降 正态分布与平方损失 线性回归的从零开始实现读取数据集初始化模型参数定义模型定义损失函数定义优化算法训练 线性回归的简洁实现读取数据集…

【SQL Server】入门教程-基础篇(二)

上一篇写的是SQL Server的基础语言&#xff0c;这一篇文章讲的是SQL Server的高级语言。 SQL Server 高级言语学习 LIKE – 模糊查询 LIKE 语法是用来进行对表的模糊查询。 语法&#xff1a; SELECT 列名/(*) FROM 表名称 WHERE 列名称 LIKE 值; 实例&#xff1a; 我们用上…

Unity镂空图像做法

问题和解决方案 现在要完成一个需求&#xff0c;即镂空中间部分的image&#xff0c;外围image可以定义颜色并可选屏蔽点击&#xff0c;而中间的image需要透明且可以穿透&#xff0c;必须不能屏蔽点击。 由此拆分成了两个问题&#xff1a; 1.定义外围image颜色&#xff0c;内…

第13天 String,正则表达式,String 支持正则表达式,object,JavaBean

String 字符串.charAt(索引值):获取字符串中索引处的字符 char[] chars 字符串.tocharArray(); : 将字符串转换为字符数组 String s new String(字符数组名,起始索引&#xff0c;截取字符串总共的长度) &#xff1a;截取一部分字符数组转化为字符串 String s new String(字…

小米金融守护消费权益,共筑金融和谐新篇章

随着金融市场的日益成熟&#xff0c;金融消费者的权益保护问题逐渐受到广泛关注。作为金融服务体系中的重要一环&#xff0c;保护消费者权益不仅是金融机构的基本职责&#xff0c;更是其长远发展的基石。小米金融聚焦于金融消费者权益保护&#xff0c;通过梳理典型案例&#xf…

idea常用知识点随记

idea常用知识点随记 1. 打开idea隐藏的commit窗口2. idea中拉取Git分支代码3. idea提示代码报错&#xff0c;项目编译没有报错4. idea中实体类自动生成序列号5. idea隐藏当前分支未commit代码6. idea拉取新建分支的方法 1. 打开idea隐藏的commit窗口 idea左上角File→Settings…