有关日志记录安全信息的警告



我非常担心人们将机密信息记录到服务器日志中。我已经在生产环境中看到了服务器日志。一些开发人员不小心记录了与安全相关的 密码、客户端 ID、客户端密钥等信息。

有没有办法,比如Eclipse插件或任何工具,在编写代码时警告开发人员?

`ex : log.info("usernam = " + username + "password = " + password) ;` // 
Warn that confidential info is getting logged.

我做了一些研究...我见过像sonarLint和FindBug这样的工具

。但是这些插件无法解决我的问题。

> SonarLint 提供了规则 S2068:凭据不应是硬编码的,它的目标是使用硬编码凭据,它似乎接近您尝试实现的目标,尽管它可能不足以满足您的需求。

然而,正如其他答案中所述,识别此类安全漏洞最终可能很困难,而强大的代码审查无疑是降低风险的好举措。

现在,如果您真的担心记录器的使用,已经知道潜在的问题以及哪些数据可能会泄漏,我建议您为 SonarQube 编写自己的 Java 自定义规则。

自定义规则由SonarLint支持,一旦包含自定义插件的自定义插件部署到SonarQube服务器上,就可以在企业级应用自定义规则。此解决方案将允许您明确定义要定位的内容,并根据您的需求和企业具体情况微调规则。编写此类规则并不难,并记录在以下教程中:Java 的自定义规则。

安全漏洞的出现方式有很多种。将数据记录到浏览器控制台只是其中之一。

据我所知,没有工具可以自动检测这些安全问题。程序员有责任不在页面上公开私人用户信息。

在这种情况下,建议是:切勿将密码(尤其是未加密的密码)记录到浏览器控制台!相反,请使用无法解密的算法加密数据库中的密码。

另一种方法是创建一个自定义日志追加器,用于查找某些指示模式(例如,像"password"和"passwd"一样工作)并删除消息或抛出错误。

但是,这可能是危险的。 如果坏人知道您正在这样做,他们可能会试图利用它来掩盖他们的踪迹,甚至使您的服务器崩溃。

我不会屏住呼吸寻找一些开箱即用的解决方案。除了您自己的日志记录之外,您还必须关注依赖项完成的日志记录。 也就是说,您有两个方面需要处理:日志中的内容以及谁有权访问日志。

就日志中的内容而言,解决此问题的最佳工具是教育和协作(包括上述代码审查)。 首先编写日志记录的非功能性要求列表,其中包括解决要记录的内容和如何记录(标记、级别、敏感参数等)的安全性。 我建议与同事一起定义这个列表,这样它就不会被称为"拉维的伐木十字军东征"而不是"我们真正需要做的事情"。

定义该列表并得到同事和/或管理层的支持后,您可以为日志记录实现编写包装器,以支持您组装的非功能性日志记录要求列表。 如果确实需要记录敏感参数,请提供一种非对称加密参数以供 root 帐户稍后检索的方法:例如存储在只能由 root/容器访问的文件中的加密密钥。对于管理层,您可能需要花一些时间撰写价值主张,描述为什么您的计划对您的公司有价值。

接下来与定义SLDC的人一起工作 - 确保对SDLC的更改是向外传达的。让他们为您的公司创建一个安全编码清单,上面有 1 项内容:所有日志记录都是使用 OurCompanySecureLogger 实现的。 现在,您可以开始实施该计划。 我建议在构建服务器上编写一个检查,查看依赖项,如果它找到对 log4j、slf4j、logback 等的直接引用,则构建失败。

关于问题的另一半,请与您的 SysOps 团队合作定义职责分离规则。 也就是说,软件工程师不应有权访问正在执行日志记录的服务器。 如果你在这一点上没有足够的人员来支持这个概念,你可能不得不发挥创造力。

也许你应该尝试对比工具。它很好,我们一直在使用它。

它负责处理所有更新的 owasp 前 10 个问题。

非常适合在企业应用程序中查找安全漏洞。

他们的支持也很好。

最新更新