Куда HP Fortify помещает промежуточные файлы?
Согласно документации HP Fortify, Static Code Analyzer сначала переводит исходный код в промежуточный формат, а затем сканирует переведенный код и создает отчет об уязвимости.
Он говорит, что перевод может быть выполнен с использованием следующего кода Ant:
<antcall target="compile">
<param name="build.compiler" value="com.fortify.dev.ant.SCACompiler"/>
</antcall>
Это вызовет вашу цель "compile", но заставит ее использовать SCACompiler вместо обычного компилятора javac.
Я запустил Fortify для нашего Java-кода, и он создает отчеты об уязвимостях. Но я не вижу промежуточных файлов нигде. Я провел различие между файлами классов Java, которые создавал обычный компилятор javac, и файлами классов Java, которые создавал SCACompiler, и они были точно такими же. Промежуточные файлы хранятся где-то еще или Fortify автоматически удаляет их после выполнения сканирования?
2 ответа
Промежуточные файлы не являются классами или объектными файлами. Это файлы NST (нормализованного синтаксического дерева), проприетарный формат, используемый HP Fortify (это обсуждается в книге "Безопасное программирование со статическим анализом". При переводе с использованием идентификатора сборки, например:
sourceanalyzer -b test ant
Затем он будет сохранен в рабочем каталоге проекта. В Windows обычно:
%USERPROFILE%\AppData\Local\Fortify\sca<version>\build\test
или на других платформах:
~/.fortify/sca<version>/build/test
тогда он будет содержать канонизированный путь к NST, как было выполнено во время перевода. Затем их можно использовать для сканирования несколько раз, если это необходимо, но их следует "очистить" при сканировании отдельной новой (или обновленной) кодовой базы.
Что касается интеграции с Ant, я думаю, что это зависит от того, какая версия Ant и как вы переводите, но так я думаю, что он просто вызывает файл sourceanalyzer.jar (который содержит com.fortify.dev.ant.SCACompiler
class), чтобы подключиться к JVM и выполнить сборку для создания файлов NST, необходимых для сканирования. Я не верю, что это на самом деле отдельная версия Javac, хотя, возможно, есть отдельная версия под <SCA installation directory>/jre/
который он может использовать.
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\