记录一次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还是使用较为广泛的一个,依然还会存在一些问题。


相关文章
|
15天前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
67 1
|
15天前
|
JSON 网络协议 安全
【Java基础】(1)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
59 1
|
开发框架 .NET C#
C#|.net core 基础 - 删除字符串最后一个字符的七大类N种实现方式
【10月更文挑战第9天】在 C#/.NET Core 中,有多种方法可以删除字符串的最后一个字符,包括使用 `Substring` 方法、`Remove` 方法、`ToCharArray` 与 `Array.Copy`、`StringBuilder`、正则表达式、循环遍历字符数组以及使用 LINQ 的 `SkipLast` 方法。
376 8
|
10月前
|
JSON 安全 API
.net 自定义日志类
在.NET中,创建自定义日志类有助于更好地管理日志信息。示例展示了如何创建、配置和使用日志记录功能,包括写入日志文件、设置日志级别、格式化消息等。注意事项涵盖时间戳、日志级别、JSON序列化、线程安全、日志格式、文件处理及示例使用。请根据需求调整代码。
159 13
|
10月前
|
JSON 数据格式
.net HTTP请求类封装
`HttpRequestHelper` 是一个用于简化 HTTP 请求的辅助类,支持发送 GET 和 POST 请求。它使用 `HttpClient` 发起请求,并通过 `Newtonsoft.Json` 处理 JSON 数据。示例展示了如何使用该类发送请求并处理响应。注意事项包括:简单的错误处理、需安装 `Newtonsoft.Json` 依赖,以及建议重用 `HttpClient` 实例以优化性能。
257 2
|
12月前
|
开发框架 .NET 测试技术
了解 .NET 9 中的新 Microsoft.AspNetCore.OpenApi 包,并将其与 NSwag 和 Swashbuckle.AspNetCore 进行比较。
本文介绍了 `.NET 9` 中新推出的 `Microsoft.AspNetCore.OpenApi` 包,该包旨在为 `ASP.NET Core` 应用程序生成 `OpenAPI` 文档。文章对比了 `NSwag` 和 `Swashbuckle.AspNetCore` 两大现有库,探讨了新包的优势和不足,特别是在性能和功能方面。尽管新包在某些方面尚不及成熟库完善,但其对原生 `AoT` 编译的支持和未来的扩展潜力使其成为一个值得考虑的选择。文章还提供了详细的性能测试数据和优化建议,适合对 `OpenAPI` 文档生成感兴趣的开发者阅读。
634 4
了解 .NET 9 中的新 Microsoft.AspNetCore.OpenApi 包,并将其与 NSwag 和 Swashbuckle.AspNetCore 进行比较。
|
JSON 数据格式
用来返回Json数据格式的工具--通用类
用来返回Json数据格式的工具--通用类
123 1
|
12月前
.NET 4.0下实现.NET4.5的Task类相似功能组件
【10月更文挑战第29天】在.NET 4.0 环境下,可以使用 `BackgroundWorker` 类来实现类似于 .NET 4.5 中 `Task` 类的功能。`BackgroundWorker` 允许在后台执行耗时操作,同时不会阻塞用户界面线程,并支持进度报告和取消操作。尽管它有一些局限性,如复杂的事件处理模型和不灵活的任务管理方式,但在某些情况下仍能有效替代 `Task` 类。
169 0
|
API
使用`System.Net.WebClient`类发送HTTP请求来调用阿里云短信API
使用`System.Net.WebClient`类发送HTTP请求来调用阿里云短信API
202 0
|
缓存 程序员
封装一个给 .NET Framework 用的内存缓存帮助类
封装一个给 .NET Framework 用的内存缓存帮助类
144 1

热门文章

最新文章