Прежде всего, вся проблема десериализации связана с десериализацией Java объектов. Дело не в демаршалинге XML или чтении JSON. Существуют и другие классы уязвимости для решения этих проблем.
Представьте, что ваш код принимает на вход класс Java (может быть закодирован в Bas64 и предоставлен через конечную точку REST). Зачем кому-то это делать? Что ж, если вы хотите сохранить состояние удаленно, вы можете сериализовать класс Java, отправить его и получить обратно, когда это необходимо. Без разницы? Ну, Дженкинс все равно делал это какое-то время go.
Настоящая проблема не в десериализации, а в предотвращении выполнения кода во время десериализации. Как предотвратить вызов readObject()
? Он будет вызываться автоматически. А предотвращение того, что происходит глубоко в коде Java, является проблемой.
Вы можете попробовать поиграть с notsoserial или SerialKiller , но это не сделает ваш код проще и легче читать. Единственное, что действительно работает, - это не использовать десериализацию ненадежных объектов в любом месте кода.