杰克逊的 JSON 注入修复

ori*_*kid 5 java security rest json

我的静态扫描给出了一个漏洞,表明我正在将未经验证的输入写入 JSON。它建议使用安全的序列化函数执行 JSON 的所有序列化,该函数在单引号或双引号内分隔不受信任的数据并转义任何特殊字符。

知道如何最好地做到这一点吗?我已经检查了通常的 ESAPI 类和 StringUtils 方法,但 Json 没有什么。http 响应来自公司内部 BTW。我什至找不到关于这个话题的讨论方式或解决方案。

HttpEntity entity = response.getEntity();
objectMapper.readValue(entity.getContent(), MyObj.class);
Run Code Online (Sandbox Code Playgroud)

eel*_*EEz 0

  • 这可能是因为粘贴到 JSON 中的不受信任的数据会跳出其值上下文并继续添加或隐藏对象的其他属性。

    https://vulncat.fortify.com/en/weakness?kingdom=Input+Validation+and+Representation&q=json%20injection

  • 最近使用 Jackson 反序列化不受信任的 JSON 对象的漏洞可能会通过将意外的类名注入 JSON(我自己未经测试的想法)来滥用潜在的 Jackson 消费者(进一步向下的数据流),

    https://github.com/FasterXML/jackson-databind/issues/2389

  • 如果 JSON 输出进一步作为 javascript 对象文字粘贴到 HTML/javascript 中,那么注入对象的结束标记和恶意 javascript 肯定会产生奇迹。

  • 如果 JSON 输出作为字符串文字粘贴到 HTML 中,则可以通过感染结束脚本标记来转义上下文并欺骗简单的编码器</script>。当浏览器在开始标签后面的任何地方看到结束标签时,甚至在字符串文字内,都需要退出脚本标签上下文。