本文总结了代码可靠性报告系列的第四部分,重点介绍了Java、JavaScript和Python等编程语言中常见的安全问题。针对每种语言,分别指出了诸如Java中激活调试功能、JavaScript中无所作为的代码以及Python中使用明文协议等问题,并提供了相应的修复建议。
译自:What's the top bug in your language? Find out in The State of Code: Languages report
作者:Anirban Chatterjee
本文探讨了由四部分组成的报告系列的第 4 卷。单击 此处 从头开始。
在过去的几周里,Sonar 的 代码状态 报告系列帮助开发团队探索了软件开发的真实状态。我们发现了在数十亿行代码中发现的最常见的可靠性错误、安全漏洞和可维护性问题。本文介绍了该系列的第四篇也是最后一篇报告,我们将从通用原则转向开发团队每天使用的编程语言中的具体挑战。
此分析不是基于调查,而是基于开发人员在工作中遇到的实际问题的具体数据。我们的发现来自对 Sonar 2024 年过去六个月的海量数据集的分析,其中包括:
- 超过 79 亿行代码。
- 来自超过 40,000 个组织的超过 970,000 名开发人员的贡献
- 对 Java、JavaScript、TypeScript、Python、C#、C++ 和 PHP 的分析
以下是我们发现的一些最常见的特定于语言的问题、它们为何会给开发团队带来问题,以及如何在它们进入生产环境之前修复它们。
顶级 Java 问题:交付激活了调试功能的代码
Java 代码中最常见的安全问题之一是在生产环境中启用了调试功能。这种情况通常发生在开发人员使用堆栈跟踪打印等功能进行故障排除时,忘记在部署前将其删除——这是一个很容易犯的错误,但后果很严重。
- 为什么这是一个问题:对于开发人员、管理人员和企业领导者来说,这是一个关键的安全风险。泄露的堆栈跟踪和其他调试信息为攻击者提供了一个路线图,暴露了有关应用程序框架和架构的敏感细节。这种情报扩大了攻击面,并可能将一次小入侵变成灾难性的破坏。在开发周期的后期修复这些问题会导致时间损失和代价高昂的延误。
- 如何修复它:关键是确保在最终生产版本中关闭所有与调试相关的设置。依赖手动审查很容易出错,尤其是在时间紧迫的情况下。SonarQube 自动化了此检查,系统地检测对生产环境不安全的调试功能。通过将其集成到 CI/CD 管道中,您可以使用质量门来自动阻止部署此代码,从而保护您的应用程序免于无意中向攻击者提供他们需要的信息。
顶级 JavaScript 问题:无所作为的代码
JavaScript 中最常见的错误是存在没有副作用且不改变程序控制流的语句。通常是不完整的重构或简单打字的迹象,这种死代码会完全改变应用程序的逻辑。一个经典的例子是“if”语句后跟一个单独的分号,这会悄无声息地导致条件被忽略,并且下一个代码块会无条件地运行。
- 为什么这是一个问题:对于开发人员来说,这是一个令人沮丧的错误。代码乍一看是正确的,但行为却出乎意料,导致浪费大量时间进行调试。对于管理人员来说,这是一个生产力杀手。它代表一个可以预防的错误,它会造成不稳定并消耗宝贵的开发人员周期,而这些周期本应花在创新上。这些“无所作为”的语句会增加维护时间和开销,因为团队会追查逻辑错误。
- 如何修复它:最好的防御是了解 JavaScript 细微之处的静态分析器。SonarQube 会在您编写代码时标记这些无用但可能危险的语句,从而在开发人员的 IDE 中直接提供实时反馈。这确保了代码按预期运行,并防止这些细微的错误破坏项目。
顶级 Python 问题:使用明文协议
在 Python 应用程序中经常观察到的一个关键安全风险是使用未加密的明文协议,如 FTP 和 HTTP。使用未加密的通道相当于在明信片上发送登录凭据,使应用程序容易受到数据盗窃、恶意软件和恶意重定向的攻击。
- 为什么这是一个问题:对于开发人员来说,使用不安全的协议会造成一个巨大的且不合理的安全漏洞。对于企业领导者来说,这是一个直接的威胁。它不仅会带来数据泄露的风险,还会因违反数据保护规定而导致巨额经济处罚,并造成严重的声誉损害。使应用程序永久暴露于数据盗窃和未经授权访问的风险远远超过了任何感知到的便利。
- 如何修复它:所有数据传输都必须使用安全、加密的协议。SonarQube 的安全分析会自动检测 Python 代码中不安全协议(如 FTP、Telnet 和 HTTP)的使用。通过在开发生命周期的早期识别这些漏洞,Sonar 使团队能够构建设计上安全的应用程序,并确保所有传输通道的安全。
使用每种编程语言构建安全代码
理解和解决这些常见的陷阱不仅仅是为了避免错误,而是为了掌握行业的工具。这一点从未像现在这样重要,尤其是在 AI 编码助手生成的代码比以往任何时候都多的时候。这些工具学习的人工编写代码的质量对于确保安全可靠的软件未来至关重要。
这些发现仅仅是个开始。我们的新报告对这三种主要语言以及 TypeScript、C#、C++ 和 PHP 的顶级问题进行了更深入的分析。
下载代码状态:语言报告,立即查看:
- 软件开发人员使用的最流行的编程语言中最常见的错误和安全问题。
- 每种语言中最常见的可维护性问题(又名代码异味)的分解。
- 可操作的解决方案,可帮助您消除这些特定于语言的问题。