【发布时间】:2022-01-02 20:44:58
【问题描述】:
如果完整的堆栈跟踪由日志框架(此处为 Java Util Logging)记录,Java 堆栈跟踪可能包含敏感信息(在我的情况下是密码)。
如何避免记录此类敏感信息,而不会丢失日志文件中堆栈跟踪中的其他重要信息?
例子:
package javalogspassword;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;
public class JavaLogsPassword {
private static final Logger LOG = Logger.getLogger(JavaLogsPassword.class.getName());
public static void main(String[] args) {
Connection conn;
try {
conn = DriverManager.getConnection("jdbc:mysql://localhost/test?"
+ "user=root&password=");
LOG.log(Level.FINER, "Connected");
try (Statement statement = conn.createStatement()) {
// this statement contains a syntax error
statement.execute("ALTER USER test IDENT BY '*Choose-a-good-password*'");
}
conn.close();
} catch (SQLException ex) {
// password '*Choose-a-good-password*' will be logged
LOG.throwing(JavaLogsPassword.class.getName(), "main", ex);
}
}
}
记录器配置:logging.properties:
handlers= java.util.logging.FileHandler
.level= INFO
java.util.logging.FileHandler.pattern = java%u.log
javalogspassword.level = FINER
运行jar的命令:
java -Djava.util.logging.config.file=logging.properties -jar dist/JavaLogsPassword.jar
生成的文件java0.log 包含密码。
【问题讨论】:
-
@UrvashiSoni 这是非常糟糕的建议。任何敏感信息都在消息中(显然),并且不可能在堆栈跟踪或异常类型中。您的建议正好相反:泄露敏感信息并删除有用的非敏感信息。
-
@rzwitserloot 点已被占用。评论已删除。谢谢。
标签: java mysql security passwords stack-trace