Почему JsonSanitizer не работает для Json Injection? - PullRequest
1 голос
/ 23 января 2020

Средство защиты жалуется на JsonInjection при десериализации строки json в модель java. Мое приложение использует Джексона для сериализации / десериализации. Я прочитал, что Джексон по умолчанию экранирует вещи и все, и ссылается на вещи типа inte rnet, чтобы решить эту проблему.

Когда я узнал, что есть два варианта решения этой проблемы.

  1. Проверка схемы. В ней говорится, что json необходимо проверять по схеме, а поля ввода необходимо проверять по шаблонам, и т. Д. c, прежде чем произойдет десериализация.

  2. Использовать 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;
    }```
...