我们目前遇到了一个有趣的问题,即错误日志的清理被打印到我们的服务器日志中。我们设置了适当的全局错误处理,并具有自定义错误消息,这些消息作为来自OSGi java servlet的响应发送回。
我们使用 dockerized 容器作为自动缩放的服务器实例,因此我们正在考虑设置日志聚合器并将异常存储在云中的数据库中,这样我们还可以跟踪有关异常的指标,并确定我们如何改进开发过程以减少某些类型的错误等。
我做了一些关于应该如何做到这一点的研究,我发现了这个。OWASP 日志记录表作弊。它提到永远不应该记录密码以及其他一些事情。这就引出了我的问题:
如何在不使用一些卡顿的文本处理或手动掩盖所有潜在情况的情况下正确清理我的日志?
堆栈跟踪示例:
pkg.exceptions.CustomException: some registration error
ERROR: duplicate key value violates unique constraint "x_username_org_id_key"
Detail: Key (username, org_id)=(SOME EMAIL, 1) already exists.
Query: with A as (some query) insert into someTable (..values...) Parameters: [X, X, X, X, X, SOME_EMAIL, THE_PASSWORD]
at somepkg.etc
这是由于用户名冲突而发生的注册系统中非常常见的错误。当然,有一些方法可以通过确保在不尝试插入之前不占用用户名并单独处理该情况来避免这种特定情况,但这只是许多其他情况中的一种。
在环顾四周寻找解决方案后,似乎没有解决问题的明显方法,我想知道是否每个人都简单地实施了自己的日志清理器版本?如果存在一些麻烦的字符串,我们可以简单地清除堆栈跟踪,但这不是最好的解决方案。有什么建议吗?
如果您只存储和传递密码哈希,则无需清理密码日志。如果必须在代码中临时保留密码,请使用char[]
s 而不是String
s。一般来说,这是一种更安全的方法,被认为是最佳做法。标准库 API 都使用字符数组作为密码。