2

我有一个 Java 源代码,我需要查询和应用安全策略 [例如应用 CWE] 我有几个想法,对于使用 AST 然后遍历树的初学者。其他包括使用正则表达式。除了 AST 或正则表达式之外,我是否可以将其他选项用于此类过程。

4

4 回答 4

2

AST 是一个不错的选择,比正则表达式好得多。

有许多可用的 Java 解析器。ANTLR 的 java 语法就是一个例子。

您还可以javac从 OpenJDK 改编编译器的源代码。

一些静态分析工具(如PMD)支持用户定义的规则,允许您执行许多检查而无需大量工作。

于 2010-06-09T20:18:19.910 回答
0

许多静态源代码分析 (SCA) 工具使用一组正则表达式来检测可能易受攻击的代码。Java有许多SCA 工具,我不知道最好的开源工具。我可以告诉你,Coverity是我用过的最好的 Java SCA 工具,它比正则表达式先进得多,因为它还可以检测竞争条件。

我可以告诉你的是,这种方法会产生很多误报和漏报。CWE 系统索引了数百个不同的漏洞,并且完全不可能覆盖所有这些漏洞。

于 2010-06-09T20:19:10.377 回答
0

有许多预先存在的工具可以完成您所要求的部分或全部工作。有些在源代码级别,有些通过解析字节码。

看看 - CheckStyle - FindBugs - PMD

所有这些都可以以一种或另一种方式扩展,因此除了他们拥有的许多标准检查之外,您可能还可以让他们检查您想要检查的内容

于 2010-06-09T20:23:19.577 回答
0

您要么想要获得专注于您感兴趣的漏洞的现有静态分析工具,要么想要获得用于构建自定义分析的强大基础的工具。

仅解析为 AST 并不能为您提供很多分析支持。您需要知道符号在哪里遇到(例如,范围、符号表、类型解析),并且您通常需要知道信息如何在组成的软件元素之间流动(继承图、调用图、控制流、数据流)系统。ANTLR 之类的工具不提供此功能;它们是解析器生成器。

我们的DMS Software Reengineering Toolkit及其Java Front End是为 Java 提供此信息的工具基础。

于 2010-06-09T20:46:51.170 回答