【发布时间】:2021-01-03 16:13:09
【问题描述】:
给定一个用户提供的 JSON 字符串,我们如何在运行 JSON.parse(untrustedString)之前对其进行清理?
我最关心的是原型污染,但我也想知道我还应该注意什么?如果只是原型污染有风险,那么我认为可以通过正则表达式处理,但我怀疑还有其他问题?
例如this article on the dangers of parsing untrusted JSON and then creating a copy of the object.:
现在考虑一些发送到此端点的恶意 JSON 数据。
{ "user": { "__proto__": { "admin": true } } }如果这个 JSON 被发送,
JSON.parse将产生一个带有__proto__财产。如果复制库按上述方式工作, 它将管理属性复制到原型上req.session.user!
【问题讨论】:
-
json 应该几乎总是可以安全解析。
-
这是我最初的印象,但我越读越偏执。
JSON.parse()不能允许污染对象原型吗? -
我不认为它可以 - 但它可能会创建一个格式错误的对象
-
我在问题文本中添加了一篇文章,其中包含我关注的一个问题的示例。
-
啊,这只是说可以通过
__proto__获得其他属性,您应该提防这种情况 - JSON.parse 没有做错...
标签: javascript json security parsing sanitization