То, что должен делать продезинфицированный регистратор, делает идентификацию подделки журналов.Чтобы разрешить это, он делает следующее:
Этот регистратор имеет ваш предоставленный класс (SampleClass.class
в вашем случае) в качестве имени регистратора.Это имя будет помещено в вывод на печать в зависимости от конфигурации вашей реализации регистратора.Это поведение по умолчанию SLF4J.
Добавить (END OF LOG ENTRY)
(или предоставленный токен) в конце каждого сообщения журнала, созданного этим регистратором.Если этот токен встречается в вашем лог-сообщении, он заменяется на (MESSAGE MIGHT BE FORGED!)
, так как это будет индикатором того, что некоторые входные данные пытались подделать ваши лог-сообщения.
Оба эти свойствапозволяют определить, является ли сообщение журнала действительным или было создано с помощью журнала Forging.
Чтобы увидеть это, взгляните на следующий пример, сначала с «неанизированным» логгером:
final Logger logger = CloudLoggerFactory.getLogger(SampleClass.class);
logger.error("Some valid first message");
logger.info("Something still valid\n[main] ERROR very.important.class Major Database Error!");
logger.error("Some valid last message");
На моей машине вывод этого выглядит как
[main] ERROR com.sap.sandbox.SampleClass - Some valid first message
[main] INFO com.sap.sandbox.SampleClass - Something still valid
[main] ERROR very.important.class Major Database Error!
[main] ERROR com.sap.sandbox.SampleClass - Some valid last message
Таким образом, нет никакой возможности определить, что что-то не так с этими сообщениями.
Поэтому, если вы используете CloudLoggerFactory.getSanitizedLogger
вместо CloudLoggerFactory.getLogger
, вы получите следующий вывод журнала:
[main] ERROR com.sap.sandbox.SampleClass - Some valid first message (END OF LOG ENTRY)
[main] INFO com.sap.sandbox.SampleClass - Something still valid
[main] ERROR very.important.class Major Database Error! (END OF LOG ENTRY)
[main] ERROR com.sap.sandbox.SampleClass - Some valid last message (END OF LOG ENTRY)
Здесь вы можете видеть, что одно из сообщений из SampleClass
, которое должно фактически заканчиваться токеном, заканчивается без него.Поэтому вы можете сделать вывод, что в журнале есть какая-то ошибка, и вам нужно исследовать эту проблему более подробно.
Так много для аспекта «Подделка журналов», который представляет собой фактическую атаку, которую распознаваемый регистратор делает идентифицируемой.
Относительно проблемы внедрения CLRF: Эта проблема в значительной степени зависит от дальнейшего использования созданного вывода журнала:
- Если вы храните сообщения журнала в базе данных, должен быть какой-то способ предотвратить внедрение SQL.
- Если вы просматриваете файлы журналов с помощью веб-анализатора журналов, должен быть какой-то способ предотвратить XSS.
- ...
Если мыисключил бы все эти потенциальные варианты использования, это фактически сделало бы простое чтение файлов журнала с помощью редактора, который, по моему мнению, является наиболее распространенным вариантом использования, гораздо более сложным.
Так что вам нужно будет решить, подходит ли для вашего случаяэто актуальная проблема или просто ложный положительный результат.
Еще один момент заключается в том, что все ваши другие зависимости должны будут выходить из своего журнала.сообщения для вашего варианта использования.Это означает, что более простым и всеобъемлющим решением было бы настроить его в реальной реализации регистратора, например, для Logback: https://logback.qos.ch/manual/layouts.html#replace.