Экранировать HTML при входе в систему

У нас есть проект Spring, использующий Logback с SLF4J. Я работал над предотвращением ковки бревен в нашем проекте. Я использовал owasp.security-logging-logback для замены символов CRLF в журнале.

шаблон: %d ${LOG_LEVEL_PATTERN: -% 5p} ${PID: -} --- [%15.15t]% -40.40logger{39}:% crlf(%m%ex)% n

Наряду с этим мы также хотим добавить защиту XSS, избегая HTML, который присутствует в регистрируемых сообщениях. Мне не удалось найти какой-либо метод для введения в шаблон escape-кода HTML.

log4j имеет шаблон преобразования %encode{} . Есть ли что-то подобное в SLF4J? Если нет, не могли бы вы подсказать мне, как найти решение этой проблемы?

1 ответ

Решение

Мне не удалось найти существующую библиотеку или инструмент, который мог бы интегрироваться с логбэком и кодировать символы HTML. Итак, я создал настраиваемый MessageConverter для логбэка.

      import org.apache.commons.text.StringEscapeUtils;
import ch.qos.logback.classic.pattern.MessageConverter;

public class HtmlContentEncoderMessageConverter extends MessageConverter {
    @Override
    public String convert(ILoggingEvent event) {
        return StringEscapeUtils.escapeHtml4(super.convert(event));
    }
}

Я добавил этот конвертер в конфигурацию логбэка в logback-spring.xml,

      <conversionRule conversionWord="htmlEncode" converterClass="<path_to_class>.HtmlContentEncoderMessageConverter">

И, наконец, использовал это слово преобразования в шаблоне ведения журнала в application.properties ,

      logging.pattern.console: %d ${LOG_LEVEL_PATTERN:-5%p} ... %crlf(%htmlEncode{%m%ex})

Журналы без конвертеров сообщений,

      This is a
test quote with HTML
< testTag >.

Журналы с преобразователями сообщений crlf и htmlEncode ,

      This is a_test quote with HTML_&lt testTag &gt

Другие проверенные методы,

  • Я попытался использовать OWASP Security Logging Logback, но регистрация OWASP имела приоритет над logback, что означает, что мне пришлось бы заменить все функции ведения журнала функциями ведения журнала OWASP Security. Это потребовало слишком много работы, поэтому от этого метода отказались.
Другие вопросы по тегам