记录一次net.sf.json包下面的JSONObject类踩到的坑

简介: 记录一次net.sf.json包下面的JSONObject类踩到的坑

前言:

今天发版走到了外部测试,也可以叫它准生产测试阶段。这个阶段里的功能测试提了一个bug:在后台的系统配置菜单里做插入操作时,输入框中输入得是null,然后显示保存成功,但是展示时是:¥qtnull¥qt(这个¥是$,因为这个符号连续两次出现,在编辑器里会被识别为斜体,所以使用¥代替)。前端输入的是null,后端怎么就变成这个了呢?


问题排查过程



1.看表象是XSS惹得祸


根据描述,很容易就会想到是特殊字符后台XSS对它进行了过滤拦截。然后笔者进行了一番测试,发现正是XSS中的问题,但是测试人员输入的是null,到后台应该是“null”,这个是不会被过滤的。但是从展示效果看,肯定不是这样,然后笔者自己测试了下发现一顿操作后“null”变成了"“null”",然后XSS发现有引号,这是属于过滤范畴就将引号替换成了¥qt(这个替换内容是自己定义的)。那究竟是谁作了这个骚操作呢,将"null"变成了"“null”",然后触发了XSS的过滤呢?


2.罪魁祸首


罪魁祸首就是这行代码惹的祸:

JSONObject jsonObject = JSONObject.fromObject(params);


解释下,params这个是一个json字符串。这行代码是将json字符串转化为JSONObject对象。在这里就将“null”变成了"“null”"。也是狗血,这个JSONObject是一个引入的工具类就是net.sf.json包下的。最后就发现了是这个工具类的问题。那只有null有这种情况吗,其他有没有。


3.测试其他场景


因为页面插入输入的是null,所以导致了该问题,但笔者再使用test、null1、1null测试后发现均没有此问题,最后得出结论,这个是net.sf.json.JSONObject工具类的坑,且该坑只有是null时才会出现,其他场景是没有问题的。但是该工具类其他使用场景应用,笔者目前没有发现过问题,也都挺好用,瑕不掩瑜吧。


总结



这个是一个工具类使用产生的问题,所以日常开发中还是应该多测试些场景,不可轻信外部的工具类,像net.sf.json.JSONObject还是使用较为广泛的一个,依然还会存在一些问题。


相关文章
|
2月前
|
中间件 Go 开发者
Go net http包
Go net http包
42 0
|
10月前
|
IDE API 开发工具
拦截|篡改|伪造.NET类库中不限于public的类和方法
本文除了回顾拦截.NET类库中的方法,实现方法参数的篡改、方法返回结果的伪造,再着重介绍.NET类库中非public类及方法如何拦截。
拦截|篡改|伪造.NET类库中不限于public的类和方法
|
9月前
|
编解码 JSON 网络协议
Golang 语言使用标准库 net/rpc/jsonrpc 包跨语言远程调用
Golang 语言使用标准库 net/rpc/jsonrpc 包跨语言远程调用
73 0
|
9月前
|
Go
Go 使用标准库 net/http 包构建服务器
Go 使用标准库 net/http 包构建服务器
32 0
|
8月前
|
存储 JSON 安全
Python中数据类转换为JSON的方法
Python中数据类转换为JSON的方法
92 0
|
7天前
|
网络协议 Java 程序员
TCP/IP协议栈是网络通信基础,Java的`java.net`包提供工具,使开发者能利用TCP/IP创建网络应用
【6月更文挑战第23天】 **TCP/IP协议栈是网络通信基础,它包含应用层(HTTP, FTP等)、传输层(TCP, UDP)、网络层(IP)、数据链路层(帧, MAC地址)和物理层(硬件信号)。Java的`java.net`包提供工具,使开发者能利用TCP/IP创建网络应用,如Socket和ServerSocket用于客户端和服务器通信。**
20 3
|
27天前
|
存储 Go C#
【.NET Core】深入理解IO之File类
【.NET Core】深入理解IO之File类
33 6
|
5天前
|
JSON Java 数据格式
IDEA插件-JSON转java类
IDEA插件-JSON转java类
17 0
|
26天前
|
存储 开发框架 缓存
【.NET Core】你真的了解HttpRuntime类吗
【.NET Core】你真的了解HttpRuntime类吗
14 0
|
2月前
|
消息中间件
.NET 中 Channel 类简单使用
`System.Threading.Channels` 提供异步生产者-消费者数据结构,用于.NET Standard上的跨平台同步。频道实现生产者/消费者模型,允许在任务间异步传递数据。简单示例展示如何创建无界和有界频道,以及多生产者和消费者共享频道的场景。频道常用于内存中的消息队列,通过控制生产者和消费者的速率来调整系统流量。