根据HP Fortify文档,静态代码分析器首先将源代码转换为中间格式,然后扫描已翻译的代码并生成漏洞报告。
它说可以使用以下Ant代码完成翻译:
<antcall target="compile">
<param name="build.compiler" value="com.fortify.dev.ant.SCACompiler"/>
</antcall>
这将调用您的“编译”目标,但强制它使用SCAC编译器而不是常规的javac编译器。
我已经在我们的Java代码上运行Fortify,它会生成漏洞报告。但是我没有在任何地方看到中间文件。我在常规javac编译器生成的Java类文件和SCACompiler生成的Java类文件之间运行了差异,它们完全相同。中间文件是否存储在其他地方,或者Fortify在执行扫描后会自动删除它们吗?
答案 0 :(得分:5)
中间文件不是类或目标文件。它们是NST(规范化语法树)文件,HP Fortify使用的专有格式(这在书中讨论&#34;使用静态分析进行安全编程&#34;。使用构建ID进行翻译时,例如:
sourceanalyzer -b test ant
然后它将存储在项目工作目录中。在Windows中,通常是:
%USERPROFILE%\AppData\Local\Fortify\sca<version>\build\test
或在其他平台上:
~/.fortify/sca<version>/build/test
这将包含NST的规范化路径,如在翻译期间执行的那样。然后,如果需要,可以使用这些扫描多次,但应该清理&#34;如果扫描一个单独的新(或更新)代码库。
对于ant集成,我认为这取决于哪个版本的Ant,以及你的翻译方式,但这种方式我认为它只是调用sourceanalyzer.jar文件(包含com.fortify.dev.ant.SCACompiler
类)以便挂钩到JVM并按照构建创建扫描所需的NST文件。我不相信它实际上是javac的单独版本,尽管它可能会使用<SCA installation directory>/jre/
下的单独版本。
答案 1 :(得分:2)
Lavamunky对于工作目录的默认路径是正确的。您可以在以下位置更改此信息:
1. FortifyInstallRoot\Core\config\fortify.properties: com.fortify.WorkingDirectory
2. FortifyInstallRoot\Core\config\fortify-sca.properties: com.fortify.sca.ProjectRoot
请注意,您需要使用/作为路径分隔符,而不是配置文件中的\。在这些路径指定的文件夹内,模式为:sca \ build \。
您还可以在运行时指定这些:
sourceanalyzer -b MyBuild -Dcom.fortify.WorkingDirectory=C:\Fortify\Work -Dcom.fortify.sca.ProjectRoot=C:\Fortify\Work
工作文件的路径是:
C:\Fortify\Work\sca<version>\build\MyBuild\