2个版本
0.1.1 | 2024年7月21日 |
---|---|
0.1.0 | 2024年7月20日 |
#676 在 解析器实现
每月253次下载
79KB
1.5K SLoC
JSON-threat-protection.rs
一个用于保护恶意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。
感谢
- cargo-fuzz:提供了对库进行模糊测试的简单方法。
- nlohmann/json_test_data:提供了模糊测试的初始语料库文件。
许可证
本项目采用MIT许可证 - 有关详细信息,请参阅 LICENSE 文件。
依赖项
~270–730KB
~17K SLoC