我使用 XML 文件配置 Log4j。我应该在哪里添加formatMsgNoLookups=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>
Run Code Online (Sandbox Code Playgroud)
Dun*_*ncG 44
CVE-2021-44228 Log4Shell 漏洞
\n如果可以,请按照Apache 日志站点上的安全详细信息的建议升级到 Log4j2 + Java 版本。自我原来的帖子以来,这个网站已经发生了变化;始终遵循 Apache 网站推荐的指南。
\nApache 站点之前针对 Log4j2 早期版本报告的 JNDI 查找漏洞提出了一些解决方法。
\nIMO:这是一个非常严重的漏洞,您不应该考虑这些解决方法,当您阅读本文时,它们可能无论如何都没有帮助。升级 Log4j JAR 文件并查看下面有关要检查的位置的注释。
\nlog4j2.formatMsgNoLookups
启动 VM 时设置系统属性,传递为\n java -Dlog4j2.formatMsgNoLookups=true ...
。LOG4J_FORMAT_MSG_NO_LOOKUPS
为 true。org/apache/logging/log4j/core/lookup/JndiLookup.class
对于从 2.0-beta9 到 2.10.0 的版本,缓解措施是从类路径中删除- 请参阅log4j-core-*.jar
。%m
对于%m{nolookups}
某些版本,将格式模式替换为在 Java 源代码上LOG4J_FORMAT_MSG_NO_LOOKUPS
运行时我找不到,因此 it\xe2\x80\x99s 不清楚这是否有帮助。grep
2.14.0
某些 JDK 版本可以缓解风险:由于应用于 LDAP 查找的默认值,大于 6u211、7u201、8u191 和 11.0.1 的 JDK 不会受到影响。尽可能升级。
\n检查 Log4j 使用情况的一些地方
\n检查您使用的 Java 版本是否足够新:
\njava -version\n
Run Code Online (Sandbox Code Playgroud)\n扫描您的应用程序发布结构、应用程序服务器、开发环境以查找可能的旧版本 Log4j:
\nfind yourReleaseDir -type f -name log4j\\*jar\n
Run Code Online (Sandbox Code Playgroud)\n如果您不确定在 ZIP 工具中打开 JAR 文件并查看哪个 Log4j 版本META-INF\\MANIFEST.MF
- 可能会有一行包含版本详细信息:
Log4jReleaseVersion: A.B.C\n
Run Code Online (Sandbox Code Playgroud)\n查看每台发布机器上正在运行的进程,看看是否有任何打开的 Log4j JAR 文件的文件句柄:
\nlsof | grep log4j\n
Run Code Online (Sandbox Code Playgroud)\n还可以扫描计算机以验证 Java VM 是否是您期望的版本。这可能会发现更多需要处理的应用程序:
\nps -ef | egrep "(java|jdk)" #OR: | grep -v grep\n
Run Code Online (Sandbox Code Playgroud)\n扫描应用程序服务器上的 EAR 和 WAR 存档,以验证容器存档内是否有\xe2\x80\x99t 任何嵌入式 Log4j JAR 文件。您可以使用find
和unzip
命令来执行此操作,或者尝试使用我编写的类来检测此答案ShowClassVersions
中的 Java 编译器版本。这将打印WAR和EAR文件中的 JAR 文件的名称:
java ShowClassVersions.java app_server_dir |grep log4j\napp_server_dir/somewebapp.war => WEB-INF/lib/log4j2-core.jar\n
Run Code Online (Sandbox Code Playgroud)\n
dpr*_*dpr 19
正如DuncG 所评论的,禁用 Log4j 查找的选项不是配置选项,而是系统属性
\nlog4j2.formatMsgNoLookups\n
Run Code Online (Sandbox Code Playgroud)\n根据您的环境(Spring、独立可执行文件、Tomcat Web 应用程序、\xe2\x80\xa6),系统属性的设置方式可能会有所不同。从 JAR 文件启动 Java 进程的最简单方法是添加
\n-Dlog4j2.formatMsgNoLookups=true\n
Run Code Online (Sandbox Code Playgroud)\n到你的命令行:
\njava -Dlog4j2.formatMsgNoLookups=true -jar myapp.jar\n
Run Code Online (Sandbox Code Playgroud)\n
小智 7
您可以这样做:%m{nolookups}
在布局中。
{nolookups}
log4j2.formatMsgNoLookups=true
是您在配置 XML 内容中设置属性的方式。
引用 Log4j 源码:
公共静态最终布尔 FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS = PropertiesUtil.getProperties().getBooleanProperty("log4j2.formatMsgNoLookups", false);
及其javadoc:
LOG4J2-2109 如果为 true,MessagePatternConverter 将始终按如下方式运行
%m{无查找}
已配置。
自从:
2.10
归档时间: |
|
查看次数: |
71271 次 |
最近记录: |