打开调试日志记录时,apache httpclient 以明文形式记录密码

Posted

技术标签:

【中文标题】打开调试日志记录时,apache httpclient 以明文形式记录密码【英文标题】:apache httpclient logs passwords in cleartext when debug logging is turned on 【发布时间】:2013-07-30 18:51:55 【问题描述】:

当调试日志打开时,Apache httpclient 似乎以明文形式记录密码。

有没有办法禁用它?这样我就可以看到其余的调试日志,但看不到凭据?

【问题讨论】:

HttpClient 记录通过网络传输的所有内容。它不知道什么是密码,什么不是。 【参考方案1】:

在将密码发送到网络之前,在内存中创建密码的 SHA1 哈希。

MessageDigest md = MessageDigest.getInstance("SHA-1");
byte[] sha1hash = new byte[40];
md.update(text.getBytes("UTF-8"), 0, text.length()); // TODO verify the lengths are the same
sha1hash = md.digest();

http://www.mkyong.com/java/java-sha-hashing-example/

如果您绝对需要明文密码,您有多种选择:

    您可以禁用标头的日志记录或将其设置为高于调试的级别:Disable HttpClient logging

    您可以在发送密码之前动态禁用日志记录,然后重新打开:Dynamically configuring Apache Http client

    您可以实现自己的 Logger 处理程序/格式化程序或基本的子类之一,并在输出中搜索您的密码并将其替换为 XXXXXXXXX。然后将处理程序设置为您的类:https://hc.apache.org/httpcomponents-client-ga/logging.html

【讨论】:

如果请求的页面需要纯密码怎么办?【参考方案2】:

在 log4j.properties 集中

log4j.logger.httpclient.wire.level=WARN

【讨论】:

如果人们想调试怎么办?他们不应该这样做吗?

以上是关于打开调试日志记录时,apache httpclient 以明文形式记录密码的主要内容,如果未能解决你的问题,请参考以下文章

如何在 RSpec 测试中为 ActiveRecord 打开 SQL 调试日志记录?

JMeter-显示调试日志log

如何打开或关闭信息中心的调试/日志/告警等显示信息

内部错误 500 Apache,但日志中没有任何内容?

org.apache.log4j.Logger详解

LAMP架构(apache访问日志不记录静态文件,静态元素过期时间,apache日志切割)