#json #validate-json #security #validation #parser

json-threat-protection

一个用于保护恶意JSON有效载荷的crate

2个版本

0.1.1 2024年7月21日
0.1.0 2024年7月20日

#676解析器实现

Download history 225/week @ 2024-07-20 28/week @ 2024-07-27

每月253次下载

MIT 协议

79KB
1.5K SLoC

JSON-threat-protection.rs

GitHub Actions Workflow Status Crates.io Version docs.rs GitHub License

一个用于保护恶意JSON有效载荷的Rust库。

该项目不是一个解析器,并且永远不会给你反序列化的JSON值!

功能

此crate提供了一组约束来验证JSON有效载荷的功能。

  • JSON结构的最大深度。
  • 字符串的最大长度。
  • 数组中的最大条目数。
  • 对象中的最大条目数。
  • 对象条目名的最大长度。
  • 是否允许重复的对象条目名。

此crate的典型用例是在你的应用程序的业务逻辑之前验证部署在分离位置的JSON有效载荷。

文档

https://docs.rs/json-threat-protection

性能

此crate设计为快速高效,并在benches目录下有自己的基准测试套件。您可以使用以下命令运行基准测试

JSON_FILE=/path/to/file.json cargo bench --bench memory -- --verbose

此套件验证JSON语法并检查上述约束。

为了比较,使用serde_json crate来解析JSON并获取serde_json::Value以及遍历JSON结构以检查上述约束。

以下是针对三个不同数据集的基准测试套件结果表

数据源

数据集 大小 serde_json json-threat-protection 更快(%) 注释
kernel_stargazers.json 1.2M 12.996 ms 8.8530 ms 31.89% 来自torvalds/linux的1000个stargazers JSON信息
kernel_stargazers_small.json 568K 5.8825 ms 3.7504 ms 36.29% 来自torvalds/linux的472个stargazers JSON信息
kernel_commits.json 4.6M 45.059 ms 29.682 ms 34.25% 来自torvalds/linux的1000个提交 JSON信息
tokio_issues.json 5.1M 61.935 ms 33.959 ms 45.20% 来自tokio-rs/tokio的1000个问题 JSON信息
tokio_forks.json 6.1M 90.984 ms 45.686 ms 49.80% 来自tokio-rs/tokio的1000个分支 JSON信息
tokio_workflow_runs.json 15M 221.89 ms 103.65 ms 53.22% 来自tokio-rs/tokio的1000个工作流运行 JSON信息

预计 json-threat-protection 库将比 serde_json 库运行得更快,因为它不会将反序列化的JSON值存储在内存中,从而降低了内存分配和释放的成本。

如表格所示,对于所有数据集,json-threat-protection 库的速度都比 serde_json 库快,但具体数值取决于数据集。因此,您可以通过指定数据集的 JSON_FILE 来获得自己的性能数据。

模糊测试

该库使用 cargo-fuzz 工具进行模糊测试。模糊测试目标位于 fuzz 目录中。

初始的语料库文件来自 nlohmann/json_test_data

感谢

许可证

本项目采用MIT许可证 - 有关详细信息,请参阅 LICENSE 文件。

依赖项

~270–730KB
~17K SLoC