哪些 Checkstyle 或 Findbugs 规则可检测常见漏洞?

信息安全 爪哇 源代码 代码审查
2021-09-02 11:05:00

寻找内置和自定义检查的经验。

我不需要参考商业源代码分析器。

4个回答

要拥有更完整的规则集,您可以使用 FindBugs 插件Find Security Bugs它包括 36 个新的探测器。当然,该插件会产生一些误报,但您始终可以禁用特定的检测器。

免责声明:我是工具提及的作者

checkstyle 根据编码标准检查代码 - 您可以使用 Sun/Oracle 标准,也可以使用您自己的标准。虽然它并没有真正找到漏洞,但是如果代码不遵循您的编码标准,漏洞将更难找到。

Findbugs会发现 sql 注入、硬编码的数据库密码、XSS 代码漏洞、不正确的 cookie 创建等等。它是可定制的,因此您可以添加更多自己的规则或从其他地方添加。

然而。这只是故事的一部分。在我看来,使用 checkstyle、pmd 和 findbugs 的真正好处是您可以使用开源工具Sonar直观地报告调查结果。这将为您提供代码质量的概览,以便您可以大量资源来修复最严重的违规代码。它使您可以直观地放大每个图书馆,然后找到最严重的违规者。这对于大型项目或您依赖各种开发团队的情况特别有用。

无,checkstyle 用于代码格式化和检查代码的内聚/耦合规则。即没有文件应该长于,没有方法可以长于等等。至于 findbugs 是寻找常见的软件错误,而不是特定于安全性。常见的检查是未使用的变量、省略的条件等。除了常见的 B/O 之外,很难检查软件是否存在安全漏洞。静态分析器的功能有限。

在移动代码漏洞方面(即您试图确保可信代码可以被不那么可信的代码安全使用,通常通过网络动态下载),FindBugs 发现了一些可变的静态漏洞。由于不了解"package.access"安全属性,它做了一些过度报告。它大量低于报告,因为它不是很好地检测访问修饰符(或 package.access)隐藏的可变静态何时可以间接访问,尽管它在该领域有所改进。

我认为有一些尝试来检测 SQL 注入之类的东西。IMO,如果您有任何注入漏洞,那么您将处于一个非常糟糕的起点。

据我所知,除了前面提到的可变静态检测之外,没有任何 Java 静态分析器能胜任。那和grepgrep -R java.lang.reflect. .例如)。话虽如此,以我的经验,一般代码质量是安全软件的基础,而静态分析器(包括由您的编译器完成的分析器)很可能发挥很小的作用。