Отдел тестирования компании будет регулярно сканировать код на предмет обнаружения Уязвимости. безопасности,Экспорт Excel
помещатьприезжатьгруппа,Лицо, ответственное за каждый проект, несет ответственность за его исправление (обновление версии компонента).,По каким-то причинам не подлежит ремонту,нужно указать причины(Некоторые версии компонентовполагатьсявышеиз JDK
версия, в то время как JDK
Его нельзя продвигать). Проект, за который я отвечаю, основан на Spring Boot 2.7.18
,этополагатьсяиз logback
версия 1.2.12
,существовать Уязвимость безопасности CVE-2023-6378
Я действительно отказываюсь исправлять эту вещь.,При ремонте нужно оценить точки удара,При тестировании необходимо охватить все: обновление основных компонентов — это не что иное, как рефакторинг;,Разработка и тестирование должны быть полностью измерены. Ключевые моментыда,Ремонт не учитывается как выпуск продукции.,Если он сломан, вам придется взять на себя вину.,Я могудаиспытал кровьизурокиз:Мне сказали по возможности не двигаться. Если вам придется внести коррективы, может случиться производственная авария.,В любом случае, я все еще говорю, что да
Если вы не можете двигаться, не двигайтесь. Если вы сделаете улучшения, производительности не будет. Если возникнут проблемы, вам придется взять на себя вину. Это неблагодарно, но это не значит, что вы не можете убежать. .
Даже если я не хочу,но тоже пришлось ремонтировать,Компания придает большое значение Уязвимость безопасности.,В конце концов, вы должны оставить своим клиентам очень профессиональный имидж. Поскольку нет способа избежать этого,Тогда примите это спокойно,Полная оценка точек воздействия,Сделайте комплексный тест
Как это исправить, должен знать каждый, удали spring-boot-starter-logging
Зависимости: введите новые зависимости версий, как показано ниже.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<artifactId>spring-boot-starter-logging</artifactId>
<groupId>org.springframework.boot</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>${logback.version}</version>
</dependency>
обновить Какая версия до заслуживает внимательного рассмотрения. В любом случае вам придется обновиться, так почему бы не обновить до Последняя версия?Уязвимость Безопасности мало, да и лазеек пока нет. Это тоже неправда, потому что logback
полагаться JDK
Версия,чиновникИнструкции следующие
Потому что проект опираетсяиз JDK
версия 8, так что будем logback
обновить до 1.3 из Последняя версияданаиболее подходящийиз;logback 1.3.x
полагатьсяиз SLF4J
версия 2.0.x
,такфинальный pom.xml
Отрегулируйте следующим образом
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<logback.version>1.3.14</logback.version>
<slf4j.version>2.0.7</slf4j.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<artifactId>spring-boot-starter-logging</artifactId>
<groupId>org.springframework.boot</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>${logback.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
</dependencies>
Кажется довольно простым, не так ли? Никаких ошибок при компиляции не сообщается, после запуска все проходит гладко, что самое неприятное; bug
Вот оно
Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/impl/StaticLoggerBinder
at org.springframework.boot.logging.logback.LogbackLoggingSystem.getLoggerContext(LogbackLoggingSystem.java:304)
at org.springframework.boot.logging.logback.LogbackLoggingSystem.beforeInitialize(LogbackLoggingSystem.java:118)
at org.springframework.boot.context.logging.LoggingApplicationListener.onApplicationStartingEvent(LoggingApplicationListener.java:238)
at org.springframework.boot.context.logging.LoggingApplicationListener.onApplicationEvent(LoggingApplicationListener.java:220)
at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:178)
at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:171)
at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:145)
at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:133)
at org.springframework.boot.context.event.EventPublishingRunListener.starting(EventPublishingRunListener.java:79)
at org.springframework.boot.SpringApplicationRunListeners.lambda$starting$0(SpringApplicationRunListeners.java:56)
at java.util.ArrayList.forEach(ArrayList.java:1249)
at org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:120)
at org.springframework.boot.SpringApplicationRunListeners.starting(SpringApplicationRunListeners.java:56)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:299)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1300)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1289)
at com.qsl.Application.main(Application.java:15)
Caused by: java.lang.ClassNotFoundException: org.slf4j.impl.StaticLoggerBinder
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 17 more
Что ты будешь делать в это время? В духе быстрого решения bug
В принципе, мы можем проверить проблему только онлайн.
java.lang.ClassNotFoundException: org.slf4j.impl.StaticLoggerBinder
Посмотрите, сможете ли вы найти решение; но после всей проверки проблема не может быть решена после различных попыток, если проблема не решена. logback
версия понижена до 1.2.x
,Может быть последнимиз 1.2.13
да Есть довольно много Уязвимость безопасностииз
Тогда нет другого пути, кроме как отследить причину проблемы. Если вы найдете причину, вы сможете назначить подходящее лекарство. Проблема возникает снова: как проверить причину? Самый прямой и эффективный способ — начать с информации о стеке исключений.
щелчок левой кнопкой мыши LogbackLoggingSystem.java:304
,тогда приходиприезжать spring-boot-2.7.18
исходный код
Используется здесь StaticLoggerBinder
,Скольжение вверх LogbackLoggingSystem
изimport
часть,StaticLoggerBinder
Полный путь к классу:
org.slf4j.impl.StaticLoggerBinder
logback 1.2.12
есть такой класс
но logback 1.3.14
Мало того, что этого класса не существует, так еще и есть org
Пакеты больше не существуют
Итак, причина найдена?
spring-boot-2.7.18 полагаться org.slf4j.impl.StaticLoggerBinder, в то время как logback 1.3.14 Нет такого класса
Так как же назначить правильное лекарство? Не только ты в замешательстве, я тоже в замешательстве
Скорректируйте свое мышление. Мы точно не первые, кто столкнулся с этой проблемой, верно? spring-boot
Официальный вопрос, давайте поищем org/slf4j/impl/StaticLoggerBinder
Нажмите,Есть официальные ответы,Я даю это всемпереводитьодин раз;спрашивающийда LSmyrnaios
,Он дал некоторую предысторию
logback 1.3.x на основе Java 8,1.4.x на основе Java-11, в то время как Spring Boot только в 3.x.x Интегрировано в logback 1.4.x(на основе Java-11) Java-8 Пользователь забыт в соответствии с logback Документация, журнал регистрации Поддерживать одновременно 1.3.x и 1.4.x, то есть вход в систему 1.3.x да 'активный', Весна Boot 2.7.x следует интегрировать это Рассмотрим следующий случай: У меня есть приложение Java-8, которое использует logback v.1.3.6, работает без проблем Теперь я хочу интегрировать приложение в Spring Boot v.2.7.9, при запуске возникает следующая ошибка: (Стек исключений такой же, как и тот, с которым мы столкнулись, поэтому он не показан) похоже на да Spring Boot Использовал slf4j 1.7.x,нода logback 1.3.x Использовал slf4j 2.0.x, так что StaticLoggerBinder Класс отсутствует Итак, вы можете Spring Boot >= 2.7.x and < 3 Поддерживается в версии logback 1.3.x ? Заранее спасибо.
Похоже на это,У этого парня та же проблема, что и у нас, с трудоустройством.,предложить из Требования такие же, как и у нас.,да Не да Смотри приехать из надежды?
чиновник scottfrederick
дал ответ
переводить Просто придида
LSmyrnaios Спасибо за ваш контакт. Spring Boot 2.7.x полагаться Logback 1.2.x。 Уже вСторонняя политика обновленияобъяснено в,我们Нет会在 2.7.x Обновление с версии Вернитесь в 1.3.х. Как вы упомянули, мы собираемся не просто обновить Logback приезжать 1.3.x, вам также необходимо SLF4J обновить до 2.0.x, вот вопрос, почему мы этого не делаем 2.7.x обновлениеизобсуждать,Итак, мы выпускаем патчи
Инструкции по обновлению сторонних провайдеров следующие:
Проще говоря, да: сторонние зависимости от уровня исправления, которые могут быть Spring Boot
из Обновление в патчной версии, при этом обновление сторонних опирается на минорную или мажорную версию из может быть выполнено только в Spring Boot
обновление с минорной или основной версии. Не могу быть там Spring Boot
из Обновление сторонней версии осуществляется из минорной или мажорной версии в патч-версии. Здесь под патч-версией можно понимать минорную версию, то есть да 1.2.x
в x
,И второстепенные или важные версии,нода 1.x.x
в первую очередь x
,Это то, что мы называем большой версией
о scottfrederick
,他可Нетда Spring Boot
обычного Contributor
,Его можно причислить к шестому брату в списке.
он сказализвозвращатьсяда Очень авторитетныйиз;о Он упомянулприезжатьизобсуждать,будем смотреть позже,Сначала поставь токиз Закончил чтение。спрашивающий LSmyrnaios
Сказал снова
переводить Просто придида
Скотт Фредерик, мы просто пошли обсуждать, и я хотел спросить Изду, можно ли да Spring Boot Следующая большая версия (например. 2.8.0, если планируется) будет SLF4J обновить до 2.0.x,logback обновить до 1.3.x Это для большого количества Java 8 Очень важно для пользователей, которым нужны последние новости безопасности и исправления ошибок для своих производственных систем. заранее спасибо
scottfrederick
объяснятьиз Нам это очень подходитизожидать,Давайте посмотрим вниз。wilkinsona
дал ответ
переводить Просто придида
В настоящее время планов по выпуску Spring Boot 2.8 нет.
Слова лаконичны и лаконичны, но основной посыл таков: да. Spring Boot 2.x.x
Сразуда Нетподдерживать Logback 1.3.x
,полныйиз Волевой и сексуальный。тыда Нетдамне интересно это своеволиеиз Чувакда ВОЗ?Люди могутда Spring Boot
Лучший брат в списке! ! !
Тебе не кажется, что для него естественно быть своенравным? Давайте продолжим смотреть вниз,ASarco
Сказал что-то
переводить Просто придида
Теперь вопрос logback 1.2.12 существовать Уязвимость безопасности CVE-2023-6378, для 2.7.x пользователей Shabi не имеют вывода
Этот парень выразил свой гнев,Все они идут прямо к национальной квинтэссенции(SB
)Понятно,Тогда да очень злится.
SB да Spring Boot Аббревиатура не является квинтэссенцией китайской нации. Не вводите себя в заблуждение! ! !
против ASarco
Вопрос, кто-то дал ответ позже, можно обновить Logback
приезжать 1.2.13
чтобы исправить уязвимость cve-2023-6378
,И у нас нет выбора,может быть только Logback
от 1.3.14
降приезжать 1.2.13
,финальныйиз pom.xml
Как показано ниже
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<logback.version>1.2.13</logback.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<artifactId>spring-boot-starter-logging</artifactId>
<groupId>org.springframework.boot</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>${logback.version}</version>
</dependency>
</dependencies>
так,1.2.13
из Уязвимость Безопасность все еще существует. Мы объясним это следующим образом после сканирования в следующий раз.
Не исправить, Весна. Boot 2.7.x Официально не планирую поддерживать Logback 1.3.x, если не обновлено Spring Boot приезжать 3.x.x (Интегрированное изда Logback 1.4.x), вам также необходимо JDK обновить до 11
возвращаться记得前面提приезжатьизчтообсуждать?,Потому что это длиннее,Позвольте мне выделить для вас несколько ключевых моментов.
1、wilkinsona
Упомянутое приезжать Logback
один раз commit,这次提交移除Понятно StaticLoggerBinder
от 1.3.0-alpha0
Версия была удалена StaticLoggerBinder
,так Spring Boot 2.7.x
не может быть интегрирован Logback 1.3.x
любая версия
2、snicoll
(Второй брат в списке) Упомянутое приезжать Очень важныйизточка
Spring Boot
из LoggingSystem
да можно отключить или изменить из
-Dorg.springframework.boot.logging.LoggingSystem=none
3、wilkinsona
Упомянутое приезжать spring.factories
в ApplicationListener
,Его приоритет выше, чем org.springframework.boot.context.logging.LoggingApplicationListener
,Может использоваться для установки свойств системы в ответ на ApplicationStartingEvent
4、wilkinsona
против cmuchinsky
предложить из
для spring boot 2.7, да можно ли обновить ogbackLoggingSystemlogback быть совместимым Logback 1.3 и 1.2, например отражение
дал ответ, что считает это маловероятным и поддерживает Logback 1.4
Требуемые изменения слишком обширны, чтобы их можно было параллелизировать путем отражения 1.2 и 1.3/1.4
5、zhaolj214
Прочитав исходный код, я нашел решение.
@SpringBootApplication
public class Spring5Application {
public static void main(String[] args) {
System.setProperty("org.springframework.boot.logging.LoggingSystem", "none");
SpringApplication.run(Spring5Application.class, args);
}
}
А насчет того, правильно это или нет, мы попробуем еще раз в следующей статье.
6、wilkinsona
объяснять明Понятно可以自定义日志:howto.logging
Подвести итог下来Сразуда:против Spring Boot 2.7.x
,чиновникне поддержит Logback 1.3.x
,новозвращатьсяда Может быть настроен поизпуть впередподдерживать Logback 1.3.x
,Как настроить,и насколько это эффективно,Давайте послушаем разбивку в следующий раз
Logback
1.3 полагаться JDK 8,1.4 полагаться JDK 11;Spring Boot
2.7.x полагаться Logback 1.2.x
,и 3.x.x полагаться Logback 1.4.x
。也Сразуобъяснять Spring Boot
пропущен Logback 1.3.x
Spring Boot
Чиновник также дал ответ, в соответствии Политика сторонних рекомендаций (обновление минорной версии до минорной версии, обновление основной версии до мажорной версии), 2.7.x не поддержит Logback 1.3.x
,и 3.x.x просто поддержите напрямую Logback 1.4.x
Spring Boot 2.7.x
поддерживать Logback 1.3.x
也Нетда Нет可以,Необходимо настроить конфигурацию,Есть еще некоторые ограничения,Более подробную информацию можно найти в следующей статье.