警告记录安全信息

Warn on Logging security Info

我很担心有人将机密信息记录到 服务器日志中。 我在生产中看到了服务器日志。一些开发人员不小心记录了与安全相关的日志 密码、clientId、clientSecret 等信息

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

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

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

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

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

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

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

也许你应该试试对比工具。很好,我们用了很久。

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

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

他们的支持也不错

SonarLint 提供规则 S2068: Credentials should not be hard-coded,它针对硬编码凭据的使用,它似乎接近您想要实现的目标,尽管它可能不足以满足您的需求。

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

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

SonarLint 支持自定义规则,一旦包含它的自定义插件部署在 SonarQube 服务器上,就可以在企业级应用。该解决方案将允许您明确定义您想要的目标,并根据您的需求和企业具体情况微调规则。编写这样的规则并不难,在以下教程中有记录:Custom rules for Java.

另一种方法是创建一个自定义日志追加器,它会查找特定的告密模式(例如像 "password" 和 "passwd" 一样工作)并删除消息,或抛出错误。

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

对于这个解决方案,我不会屏住呼吸。除了您自己的日志记录之外,您还必须关注依赖项完成的日志记录。也就是说,您有两个方面需要处理:什么进入日志以及谁有权访问日志。

就日志中的内容而言,解决此问题的最佳工具是教育和协作(包括上述代码审查)。从编写日志记录的非功能性需求列表开始,其中包括解决记录内容和记录方式(标记、级别、敏感参数等)的安全性。我建议与同事一起定义这个列表,这样它就不会被称为 "Ravi's logging crusade" 而不是 "something we really need to do"。

一旦定义了该列表并且您获得了同事 and/or 管理层的支持,您就可以为支持您收集的非功能性日志记录要求列表的日志记录实现编写包装器。如果确实需要记录敏感参数,请提供一种非对称加密参数的方式,以便以后由 root 帐户检索:例如将加密密钥存储在只能由 root/container 访问的文件中。对于管理层,您可能需要花一些时间撰写价值主张,描述您的倡议为何对您的公司有价值。

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

关于问题的另一半,与您的 SysOps 团队一起定义职责分离规则。也就是说,软件工程师不应该访问正在执行日志记录的服务器。如果此时您的人员不足以支持这个概念,您可能需要发挥创意。