在Log4j XML配置文件中放置格式MsgNoLookup的位置
我使用一个XML文件配置我的Log4j。我应该在哪里添加格式MsgNoLookup=true?
<?xml version="1.0" encoding="UTF-8"?>
<!-- Upload files compare config -->
<configuration status="OFF">
<appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss} %p - %msg%n"/>
</Console>
<!-- http://logging.apache.org/log4j/2.x/manual/appenders.html#RollingFileAppender -->
<RollingFile name="File" fileName="logs/MyLogFile.log"
filePattern="logs/MyLogFile-%d{yyyy-MM-dd}.log"
ignoreExceptions="false">
<PatternLayout>
<Pattern>%d %p %c{1.} %m%n</Pattern>
</PatternLayout>
</RollingFile>
</appenders>
<Loggers>
<Root level="INFO">
<AppenderRef ref="File"/>
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</configuration>
<推荐答案-2021-44228 Log4外壳漏洞
如果可以,请按照Apache logging site上的安全详情建议升级到Log4j2+Java版本。与我最初的帖子相比,此站点已更改;请始终遵循来自阿帕奇网站的建议指南。之前,针对针对早期版本的Log4j2报告的JNDI查找漏洞,Apache站点建议了一些解决方法。
IMO:这是一个非常严重的漏洞,您不应该考虑这些解决方法,当您阅读本文时,它们可能也帮不上什么忙。升级Log4j JAR文件,并查看下面有关检查位置的说明。- 在启动VM时设置系统属性
log4j2.formatMsgNoLookups
,作为java -Dlog4j2.formatMsgNoLookups=true ...
。 - 将环境变量
LOG4J_FORMAT_MSG_NO_LOOKUPS
设置为True。 - 对于从2.0-Beta9到2.10.0的版本,缓解措施是从类路径中删除
org/apache/logging/log4j/core/lookup/JndiLookup.class
-请参阅log4j-core-*.jar
。 - 将某些版本的格式模式
%m
替换为%m{nolookups}
在2.14.0
的Java源代码上运行grep
时找不到LOG4J_FORMAT_MSG_NO_LOOKUPS
,因此不清楚这是否有帮助。
使用Log4j检查的一些地方
检查您使用的Java版本是否足够新:
java -version
扫描您的应用程序发布结构、应用程序服务器、开发环境以查找可能的旧版本Log4j:
find yourReleaseDir -type f -name log4j*jar
如果您不确定您使用的是哪个Log4j版本,请在ZIP工具中打开JAR文件并查看META-INFMANIFEST.MF
-可能有一行包含该版本的详细信息:
Log4jReleaseVersion: A.B.C
查看每个版本计算机上正在运行的进程,以查看是否有任何打开的文件句柄指向Log4j JAR文件:
lsof | grep log4j
还要扫描机器以验证Java VM是否为您所期望的版本。这可能会发现更多要处理的应用程序:
ps -ef | egrep "(java|jdk)" #OR: | grep -v grep
扫描应用程序服务器上的EAR和WAR归档文件,以验证容器归档文件中没有任何嵌入的Log4j JAR文件。您可以使用find
和unzip
命令来执行此操作,或者尝试使用我编写的ShowClassVersions
类来检测this answer中的Java编译器版本。这将打印出WAR和EAR文件中的JAR文件的名称:
java ShowClassVersions.java app_server_dir |grep log4j
app_server_dir/somewebapp.war => WEB-INF/lib/log4j2-core.jar
相关文章