将 json 字符串反序列化为 java 模型时,安全工具会抱怨 JsonInjection。我的应用程序一直在使用 jackson 进行序列化/反序列化。我读过杰克逊默认转义的东西和所有和引用的互联网东西来解决这个问题。
据我所知,处理这个问题有两种选择。
模式验证 - 它说,在反序列化发生之前,需要针对模式验证 json,并且需要针对模式等验证输入字段。
使用 JsonSanitizer - 将 json 字符串清理为格式良好的 json。
我们选择了选项 2。因为,我们的应用程序无法根据模式验证 json,因为应用程序中有 200 多个 API。
JsonSanitizer 对我们没有帮助。我正在编写这段代码来向您展示我们尝试解决此问题的方法。
我们的应用程序对所有 API 都使用此方法,并且无法执行模式验证。
有没有其他解决方案可以摆脱 JsonInjection 问题?
public <T> T jsonToBean(Class<T> cls, String json) {
try {
String sanitizedJson = json;
if (json.trim().startsWith("{") || json.trim().startsWith("[")) {
sanitizedJson = com.google.json.JsonSanitizer.sanitize(json);
}
return objectMapper.readValue(sanitizedJson, cls);
} catch (Exception e) {
logger.error("Deserialization fails");
}
return null;
}```