我有一个Java源代码,我需要查询并应用安全策略[例如,应用CWE] 我有几个想法,对于使用AST的初学者,然后通过树旅行。其他包括使用正则表达式。 我可以使用除AST或正则表达式之外的任何选项进行此类处理。
答案 0 :(得分:2)
AST是一个不错的选择,比正则表达式要好得多。
有许多可用的Java解析器。 ANTLR's java grammar就是一个例子。
您还可以调整javac
compiler from OpenJDK.
某些静态分析工具(如PMD)支持用户定义的规则,这些规则允许您执行许多检查而无需大量工作。
答案 1 :(得分:0)
许多静态源代码分析(SCA)工具使用正则表达式集合来检测可能易受攻击的代码。有许多SCA tools for Java,我不知道最好的开源。我可以告诉你Coverity是我使用过的最好的Java SCA工具,它比正则表达式更先进,因为它也可以检测竞争条件。
我可以告诉你的是,这种方法会产生很多误报和漏报。 CWE系统对不同漏洞的HUNDREDS进行索引,覆盖所有漏洞完全是完全不可能的。
答案 2 :(得分:0)
有许多预先存在的工具可以完成您要求的部分或全部工作。一些在源代码级别,一些在解析字节代码。
看一看 - CheckStyle - FindBugs - PMD
所有这些都可以通过这种或那种方式扩展,因此除了他们的许多标准检查之外,您可以让他们检查您要检查的内容
答案 3 :(得分:0)
您要么想要获得一个专注于您感兴趣的漏洞的现有静态分析工具,要么想要一个具有强大基础的工具来构建自定义分析。
只是解析为AST并不能为您提供大量的分析支持。您需要知道哪些符号表示遇到的位置(例如,范围,符号表,类型解析),并且您经常需要知道信息如何在构成系统的软件元素之间流动(inheritance graphs, calls graphs, control flows, data flows)。像ANTLR这样的工具不提供这个功能;它们是解析器生成器。
具有此Java可用信息的工具基础是我们的DMS Software Reengineering Toolkit及其Java Front End。