Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
json-sanitizer — json-sanitizer 与 CVE-2020-13973 | Kitploit
工具/GitHubGitHub/epicosy/json-sanitizer
通用工具加密/解密工具漏洞分析代码分析Web安全
GitHubepicosy/json-sanitizer

json-sanitizer

json-sanitizer 与 CVE-2020-13973

查看仓库
2年前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

json-sanitizer

给定类 JSON 内容,JSON Sanitizer 会将其转换为有效的 JSON。

开始使用 - 联系我们

它可以附加在数据处理管道的任意一端,以帮助满足 Postel 原则:

对自己要保守,对别人要宽容

应用于来自他人的类 JSON 内容时,它将生成符合规范的 JSON,可满足您使用的任何解析器。

应用于发送前的输出时,它将纠正编码中的小错误,并使您的 JSON 更易于嵌入 HTML 和 XML。

动机

架构图

许多应用程序有大量代码使用临时方法生成 JSON 输出。

这些输出通常都会经过一小部分框架代码,然后通过网络发送。这一小部分框架代码可以使用本库确保临时输出符合标准且安全,可传递给功能过于强大的反序列化器(如 JavaScript 的 eval 运算符)。

应用程序还经常有接收来自多种来源的 JSON 的 Web 服务 API。当这些 JSON 使用临时方法创建时,本库可以将其整理成易于解析的形式。

通过将本库挂接到发送和接收请求及响应的代码中,本库可以帮助软件架构师确保系统范围的安全性和良好格式。

输入

Sanitizer 接收类 JSON 内容,并像 JS eval 那样解释它。具体来说,它处理以下非标准结构。

构造策略
'...'单引号字符串转换为 JSON 字符串。
\xAB十六进制转义转换为 JSON Unicode 转义。
\012八进制转义转换为 JSON Unicode 转义。
0xAB十六进制整数字面量转换为 JSON 十进制数字。
012八进制整数字面量转换为 JSON 十进制数字。
+.5十进制数字被强制转换为 JSON 更严格的格式。
[0,,2]数组中的省略部分用 null 填充。
[1,2,3,]删除尾部逗号。
{foo:"bar"}未加引号的属性名被加上引号。
//comments移除 JS 风格的行注释和块注释。
(...)移除分组括号。

Sanitizer 会修正缺少的标点、结束引号以及不匹配或缺少的右括号。如果输入仅包含空白字符,则替换为有效的 JSON 字符串 null。

输出

输出是符合 RFC 4627 定义的格式良好的 JSON。输出还满足以下附加属性:

  • 输出将不包含子串(不区分大小写)"</script",因此无需额外编码即可嵌入 HTML script 元素中。
  • 输出将不包含子串 "]]>",因此无需额外编码即可嵌入 XML CDATA 段中。
  • 输出是一个有效的 JavaScript 表达式,因此可以通过 JavaScript 的 eval 内置函数(包裹在括号中)或 JSON.parse 进行解析。具体来说,输出不会包含任何嵌入的 JS 换行符(U+2028 段落分隔符或 U+2029 行分隔符)的字符串字面量。
  • 输出仅包含有效的 Unicode 标量值(无独立的 UTF-16 代理对),并且这些字符在 XML 中允许不加转义。

安全性

由于输出是格式良好的 JSON,将其传递给 eval 将没有副作用和自由变量,因此既不是代码注入的向量,也不是秘密泄露的向量。

本库仅确保 JSON 字符串 → JavaScript 对象阶段没有副作用且不解析自由变量,无法控制后续客户端代码如何解释生成的 JavaScript 对象。因此,如果客户端代码将解析数据中由攻击者控制的部分通过 eval 或 innerHTML 等强大解释器再传回,则可能产生意外的副作用。

root@kitploit:~
var myValue = eval(sanitizedJsonString);  // 安全
var myEmbeddedValue = eval(myValue.foo);  // 可能不安全

此外,清理 JSON 并不能保护应用程序免受混淆代理攻击。

root@kitploit:~
var myValue = JSON.parse(sanitizedJsonString);
addToAdminstratorsGroup(myValue.propertyFromUntrustedSource);

性能

当输入已是满足上述属性的有效 JSON 时,sanitize 方法将直接返回输入字符串而不分配新的缓冲区。因此,如果用于通常格式良好的输入,内存开销最小。

sanitize 方法的时间复杂度为 O(n),其中 n 是输入的 UTF-16 代码单元长度。

下载工具