在解码原始JSON之前如何进行验证?

How to perform validation before decoding the raw JSON?

提问人:Naveen Santhanavel 提问时间:8/9/2023 最后编辑:Brian Tompsett - 汤莱恩Naveen Santhanavel 更新时间:8/10/2023 访问量:65

问:

我们正在用 PHP (Hacklang) 构建一个 API 框架,并将使用 OPIS 中的 json-schema 来实现对请求正文中 JSON 输入的验证。

OWASP建议对数值参数的最小值和最大值范围检查进行验证 - 链接

但看起来 json-schema 无法对 JSON 编码的字符串(API 的原始输入)执行验证 - https://opis.io/json-schema/2.x/php-validator.html

enter image description here

通过首先反序列化输入,我认为我们失去了模式验证提供的许多好处。例如,如果验证架构中数组字段的 maxItems 为 1,但客户端提供了 10 亿个项目,我们将反序列化所有内容,只是为了稍后抛出异常。

有没有办法在没有反序列化原始输入的情况下执行验证?开源 API 框架如何处理这个问题?

php jsonschema json-schema-validator api-security

评论

2赞 KIKO Software 8/9/2023
在使用 之前,您可以限制 JSON 字符串的最大大小。json_decode()
0赞 Vaso Gamdelidze 8/9/2023
是否要验证它是否是有效的 JSON?或者你想验证JSON的内容?
0赞 Naveen Santhanavel 8/9/2023
@VasoGamdelidze 我们想两者兼而有之。
0赞 Naveen Santhanavel 8/9/2023
@KIKOSoftware 这是个好主意。我觉得作为反序列化的一部分进行验证可能会有性能改进。(如果出现错误,我们可以提前终止)
1赞 Vaso Gamdelidze 8/9/2023
从 PHP 8.3 开始,我们将有一个新函数 json_validate,它可以检测 JSON 是否有效。在解码之前验证 json 字符串的另一部分可能会降低您的性能。你可以看看这个回购。也许它可以提供一些新的想法。github.com/halaxa/json-machine

答: 暂无答案