JSON劫持与while(1)

server/2024/11/30 9:30:42/

一、背景与介绍

        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/server/15017.html

相关文章

Mac安装telnet

一、安装Homebrew 1、打开官网&#xff1a;Homebrew — The Missing Package Manager for macOS (or Linux) 2、打开终端输入&#xff1a; /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 二、安装Telnet bre…

Kamailio 的 uuid_kill

Kamailio 是否有类似 FreeSWITCH 的 uuid_kill 命令 试了试&#xff0c;发现还真的有 如果正在振铃&#xff0c;那么 tm.cancel 可以结束呼叫&#xff0c;参考链接&#xff1a; https://kamailio.org/docs/modules/5.5.x/modules/tm.html#tm.rpc.cancel 如果已经应答&#…

Hive安装与配置实战指南

Hive安装与配置实战指南 在大数据领域中&#xff0c;Hive以其类SQL的查询语言HQL、可扩展的数据仓库能力和对Hadoop生态系统的良好集成&#xff0c;成为了数据分析和处理的重要工具。本文将指导您完成Hive的安装与配置&#xff0c;帮助您快速搭建起自己的Hive环境。 一、环境…

企业微信hook接口协议,标签变动回调

个人标签新增回调 {"labellist": [{"op": 3, "bDeleted": 0, //0代表新增"create_time": 1678114162, "label_groupid": 14073749131792038, "label_type": 2, "source_appid": 0, "business_typ…

Spring boot + MyBatis-Plus3

学习 增删改查 在 service 层直接调用。 insert(user) 增selectById(1) 根据id查updateById(user) 更新selectByMap(map) 根据条件查selectBatchIds(list) 根据多个id查selectPage(page, null) 分页查deleteById(1) 删除id为1的用户deleteByMap(map) 删除符合条件的用户d…

CS61B sp21fall Project02 Gitlet

Project02 Gitlet 一、项目简介二、Git和Gitlet2.1 Git简介2.2 Gitlet简介 三、框架设计3.1 Blobs3.2 Trees3.3 Commits 四、.Gitlet文件结构设计4.1 .git文件架构4.1.1 重点介绍index&#xff08;VSCode中无法查看&#xff0c;会乱码&#xff09;objects&#xff08;VSCode中无…

物联网网关硬件和云端分别实现了哪些功能?-天拓四方

在物联网&#xff08;IoT&#xff09;的广阔领域中&#xff0c;物联网网关硬件和云端各自扮演着不可或缺的角色。它们通过一系列功能&#xff0c;共同确保物联网系统的顺畅运行&#xff0c;为各类设备提供稳定、高效的数据传输与处理服务。本文将详细解析物联网网关硬件和云端分…

一个联合均值与方差模型的R包——dglm

目录 一、引言二、包的安装与载入三、模拟例子3.1 数据生成3.2 数据查看3.3 模型估计参数 一、引言 在 R 语言中&#xff0c;dglm 包是用于拟合双参数广义线性模型&#xff08;Double Generalized Linear Models&#xff0c;简称 DGLMs&#xff09;的一个工具。这类模型允许同…