我非常担心人们会将机密信息记录到服务器日志中。 我已经看到生产中的服务器日志。一些开发人员不小心记录了安全相关 密码,clientId,clientSecret等信息。
有没有办法,比如Eclipse插件或任何工具,在编写代码时警告开发人员?
`ex : log.info("usernam = " + username + "password = " + password) ;` //
Warn that confidential info is getting logged.
我做了一些研究......我见过像sonarLint和FindBug这样的工具
但是那些插件无法解决我的问题。
答案 0 :(得分:7)
SonarLint提供规则S2068: Credentials should not be hard-coded,其目标是使用硬编码凭据,它似乎接近您要实现的目标,尽管它可能不足以满足您的需求。
然而,正如其他答案中所述,识别此类安全漏洞最终可能会很困难,强有力的代码审查无疑是降低风险的良好举措。
现在,如果您真的担心记录器的使用,已经知道潜在的问题,以及可能泄漏的数据,我建议您为SonarQube编写自己的Java自定义规则。
SonarLint支持自定义规则,一旦包含它的Custom Plugin部署在SonarQube服务器上,就可以在企业级应用。此解决方案允许您明确定义要定位的内容,并根据您的需求和企业细节微调规则。编写此类规则并不难,并在以下教程中进行了说明:Custom rules for Java。
答案 1 :(得分:3)
安全漏洞的出现方式有很多种。将数据记录到浏览器控制台只是其中之一。
据我所知,没有可以自动检测这些安全问题的工具。程序员有责任不在页面上公开私人用户信息。
在这种情况下,建议是:永远不要将密码(特别是未加密的密码)记录到浏览器控制台!而是使用无法解密的算法加密数据库中的密码。
答案 2 :(得分:1)
对于这个问题,我不会屏住呼吸。除了您自己的日志记录之外,您还必须关注依赖项所做的日志记录。也就是说,您需要处理两个方面:日志中的内容以及可以访问日志的人员。
就日志而言,解决此问题的最佳工具是教育和协作(包括上述代码审查)。首先编写一个日志记录的非功能性需求列表,其中包括解决登录内容和记录方式(标记,级别,敏感参数等)的安全性。我建议与同事一起定义这个列表,这样它就不会被称为" Ravi的伐木运动"而不是"我们真正需要做的事情"。
一旦定义了该列表,并且您获得了同事和/或管理层的支持,您就可以为日志实现编写包装器,以支持您组装的非功能性日志记录要求列表。如果确实需要记录敏感参数,请提供一种方法,使参数不对称地加密,以便以后通过root帐户检索:例如存储在只能由root / container访问的文件中的加密密钥。对于管理层,您可能需要花一些时间撰写价值主张,描述您的计划为何对您的公司有价值。
接下来与定义SLDC的人一起工作 - 确保对SDLC的更改是向外传达的。让他们为您的公司创建一个安全编码清单,在其上实现1个项目:所有日志记录都是使用OurCompanySecureLogger实现的。现在,您可以开始执行该计划。我建议在构建服务器上编写一个查看依赖项的检查,如果它找到对log4j,slf4j,logback等的直接引用,则会使构建失败。
关于问题的另一半,与您的SysOps团队合作,定义职责分离规则。也就是说,软件工程师不应该访问正在执行日志记录的服务器。如果你现在没有足够的人员来支持这个概念,你可能需要发挥创意。
答案 3 :(得分:0)
可能你应该尝试对比度工具。它很好,我们长期使用它。
它负责所有更新的owasp十大问题。
非常适合在企业应用程序中找到安全漏洞。
他们的支持也很好。
答案 4 :(得分:0)
另一种方法是创建一个自定义日志追加器,用于查找某些告诉模式(例如"密码"" passwd")并删除消息,或抛出一个错误。
但是,这可能很危险。如果坏人知道你这样做,他们可能会试图利用它来掩盖他们的踪迹,甚至崩溃你的服务器。