【问题标题】:Password sanitization within stacktraces & errors堆栈跟踪和错误中的密码清理
【发布时间】:2020-05-09 03:39:39
【问题描述】:

我们目前遇到了一个有趣的问题,即清理打印到我们服务器日志中的错误日志。我们设置了适当的全局错误处理,并有自定义错误消息作为响应从我们的 OSGi java servlet 发回。

我们使用 dockerized 容器作为自动扩展的服务器实例,因此我们正在考虑设置日志聚合器并将我们的异常存储在云中的数据库中,这样我们还可以跟踪有关异常的指标并确定我们如何可以改进我们的开发过程以减少某些类型的错误等。

我做了一些关于应该如何做的研究,我found this。 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

这是由于用户名冲突而发生的注册系统中的一个非常常见的错误。当然,可以通过确保在不尝试插入之前不使用用户名并单独处理该案例来避免这种特定案例,但这只是许多其他案例中的一个案例。

环顾四周寻找解决方案后,似乎没有明显的方法来解决问题,我想知道那里的每个人是否都简单地实现了他们自己的日志清理程序版本?如果存在一些麻烦的字符串,我们可以简单地清除堆栈跟踪,但这不是最好的解决方案。有什么建议吗?

【问题讨论】:

    标签: java security logging error-handling sanitization


    【解决方案1】:

    如果您只存储和传递密码哈希,则无需清理密码日志。如果必须在代码中临时保留密码,请使用char[]s 而不是Strings。一般来说,这是一种更安全的方法,被认为是最佳实践。标准库 API 都使用字符数组作为密码。

    【讨论】:

      猜你喜欢
      • 2018-09-19
      • 1970-01-01
      • 2016-03-07
      • 2010-09-17
      • 1970-01-01
      • 1970-01-01
      • 2011-08-07
      • 2017-06-25
      • 2016-06-21
      相关资源
      最近更新 更多