Help:Sarif: Difference between revisions
m (minor fixes) |
m (minor fixes) |
||
(2 intermediate revisions by one other user not shown) | |||
Line 80: | Line 80: | ||
==== Импорт трасс ==== | ==== Импорт трасс ==== | ||
Конструкции SARIF сodeFlow и relatedLocations импортируются в трассы в концепции Svacer. | Конструкции SARIF <code>сodeFlow</code> и <code>relatedLocations</code> импортируются в трассы в концепции Svacer. | ||
Location в исходных конструкциях SARIF должен содержать номер строки. Если location задан через offset, то при импорте может получится некорректная строка. | |||
=== Экспорт === | === Экспорт === | ||
Line 108: | Line 110: | ||
--with-taxonomies Generate SARIF report with taxonomies (default: false) | --with-taxonomies Generate SARIF report with taxonomies (default: false) | ||
--help Show help (default: false) | --help Show help (default: false) | ||
Полный список опций может быть получен при выполнении команд: | |||
svacer sarif2 import --help | |||
svacer sarif2 export --help | |||
Пример экспорта с включением содержимого файлов в артефакты: | Пример экспорта с включением содержимого файлов в артефакты: | ||
svacer sarif2 export --host localhost --user admin --password admin --include-contents --project bash --out /tmp/out.sarif | svacer sarif2 export --host localhost --user admin --password admin --include-contents --project bash --out /tmp/out.sarif | ||
Экспорт в SARIF включает дополнительные данные в <code>properties</code> объект у соответствующего SARIF объекта. Дополнительные данные состоят из: | |||
* информация о проекте, ветке и снимке | |||
* информация о разметке (статус, severity, action, кем была выполнена и дата) | |||
* информация о детекторе (severity, reliability, warnClass и прочая информация) | |||
* дополнительные поля от маркера (mtid, invariant, function и т. д.) | |||
* тэги (метки) | |||
* комментарии | |||
Для генерации <code>fingerprints</code> используется <code>invariant</code> маркера. Для генерации <code>partialFingerprints</code> используется поле <code>details</code> у маркера. | |||
Трасса отображается в <code>codeFlows</code>. | |||
В качестве <code>logicalLocations</code> используется поле <code>function</code>. | |||
==== Оценка размера экспортированного файла ==== | |||
Снимок с примерно 34 тысячами предупреждений, содержащий разметку и комментарии для ядра Linux при экспорте с включением исходного кода производит SARIF файл размером 450Мб (в сжатом виде получается порядка 70Мб). | |||
Latest revision as of 15:18, 16 May 2025
Работа с SARIF из CLI
Для импорта и экспорта результатов в формате SARIF Svacer предоставляет набор команд svacer sarif2 import
и svacer sarif2 export
.
Основные возможности данных команд
Импорт
NAME: svacer sarif2 import - Import SARIF files to Svacer format USAGE: svacer sarif2 import [command options] <path> <path> ... <path> OPTIONS: --ssl Connect to the server using https protocol (default: false) --ssl-ca-certs value Trusted CA cert path. Example: /usr/local/certs/* , /usr/local/certs/ca.crt, /usr/local/certs/ca*.crt --user value Valid user name --password value Valid user password --host value Valid host name with running svace history server (default: localhost) [$SVACER_HOST_NAME] --port value Defines port for REST API (default: 8080) [$SVACER_API_PORT] --grpc value Defines port for gRPC API (default: 3002) [$SVACER_GRPC_PORT] --ldap_server value Server for LDAP authentication [$SVACER_LDAP_SERVER] --quick-stats Report quick stats about uploaded snapshots (default: false) --out-format value Define format of reported information. Values: text|json. Default: text. --quality-gate value Specify a quality gate. Format: stat_1:severity_1:N_1,...,stat_k:severity_k:N_k, stat takes values: new, missing, matched, same, total; severity takes the following values: all, critical, major, normal, minor, undefined, <detector name part>; N is a natural number. If the severity of the number N is exceeded, it will out a warning. Also, as a value, you can specify a json or yaml file in which the quality gate is specified. --quality-gate-exit-code value Specify the exit code of the application in the range from 0 to 125, which will be issued when the quality-gate is exceeded. The default is 0. --out-file value Target to print report information (by default stdout) --project-group value [ --project-group value ] Project group where put new project. To set multiple project groups, use this flag multiple times --if-no-group value Defines if there is no project group with specified name: no-action (ignore project group with warning), add (add new project group), error (throw an error). The default is no-action --if-no-branch name Defines if there is no branch: clone-{name|id} (clone the branch with given name|id), create-empty (create a new empty branch), return-error (throw an error), name or `ID` of the branch to be cloned. The default is clone-master --attach value [ --attach value ] Attach file(s) to the snapshot. To add multiple files, use this flag multiple times --field value [ --field value ] Adds custom field to the snapshot information. Format <field name>:<value>. <value> is treated as JSON string. Multiple occurrences of the same field are processed as array. --no-clean Do not clean intermediate directory with pre-processed data before import (default: false) --upload Upload data to the server (default: false) --project value Set explicit project name. Default value is a name of the directory containing .svace-dir --branch value Set branch name (default: master) --snapshot value Set explicit snapshot name (default: <import time>) --path-prefix value Defines mapping rule for path prefixes in format <file> or line prefix:replacement;prefix:replacement --store value Defines path to directory for pre-processed data. You may share the same directory for multiple projects. You can define remote store here to upload data to another server in a format remote:<host>:<port> (default: <current working dir>/.svacer-dir) --pattern value [ --pattern value ] List of patterns to match files. Pattern is matched against full path --uriBaseId value Specifies the absolute URI with respect to which that relative reference is interpreted (see 3.4.4 in SARIF spec). Format '<name>=<path>,<name>=<path>,... --base-dir value Base dir to resolve relative path in artifacts --include-contents Import/export artifact contents (source code) when it is available (default: false) --resolver value Defines path to file with custom path resolver. User should provide file containing function with signature: // Return (<resolved path>, true) if path is resolved. Return ("", false) if default (built-in) path resolver should be used // Function can use Go packages regexp, filepath, strings, fmt func ResolvePath (s string) (string, bool) --map-severity value Defines relation between SARIF and Svacer checker severity. Expected format <sarif level|*>:<svacer level>,<sarif level>:<svacer level>,... All values are case-insensitive. Asterisk matches any severity. All rules are applied from left to right Example: note:minor,error:critical,*:major --autoclean Remove .svacer-dir after successfull upload (default: false) --help Show help (default: false)
Пример импорта c включением содержимого файлов (при наличии его в самом sarif-файле или возможности найти файл в процессе импорта):
svacer sarif2 import --store /tmp/sarif --include-contents /path/to/sarif/file.sarif
Если sarif-файл содержит относительные пути, то можно указать опцию --base-dir
для поиска файлов относительно указанной директории.
Далее полученный intermediate store можно загрузить командой upload как и для импорта svres. Также можно скомбинировать import с upload:
svacer sarif2 import --upload --store /tmp/sarif --include-contents /path/to/sarif/file.sarif
Использования флага --resolver
В случае, если исходные файлы лежат в иных локациях и простым образом указать --base-dir
или --uriBaseId
нельзя (допустим, пути Windows-specific а импорт идет на Linux), то пользователь может указать параметр --resolver
с путем к файлу, где написана функция конверсии путей. Файл должен содержать Go функцию
func ResolvePath (s string) (string, bool) { // пользовательская логика преобразования пути. Возвращать "", false, если надо применить обычные правила }
Функция обрабатывается в ходе импорта Sarif, для выполнения используется функционал https://github.com/traefik/yaegi Пользователь может использовать пакеты fmt, regexp, strings
Мэппинг severity
Для задания правил отображения checker severity при импорте Sarif, пользователь может использовать флаг --map-severity
. Флаг ожидает значение в виде строки в формате <sarif level|*>:<svacer level>,<sarif level>:<svacer level>
Пример:
--map-severity note:minor,error:critical,*:major
Импорт трасс
Конструкции SARIF сodeFlow
и relatedLocations
импортируются в трассы в концепции Svacer.
Location в исходных конструкциях SARIF должен содержать номер строки. Если location задан через offset, то при импорте может получится некорректная строка.
Экспорт
NAME: svacer sarif2 export - Export snapshot(s) to SARIF format USAGE: svacer sarif2 export [command options] [arguments...] OPTIONS: --ssl Connect to the server using https protocol (default: false) --ssl-ca-certs value Trusted CA cert path. Example: /usr/local/certs/* , /usr/local/certs/ca.crt, /usr/local/certs/ca*.crt --user value Valid user name --password value Valid user password --host value Valid host name with running svace history server (default: localhost) [$SVACER_HOST_NAME] --port value Defines port for REST API (default: 8080) [$SVACER_API_PORT] --grpc value Defines port for gRPC API (default: 3002) [$SVACER_GRPC_PORT] --ldap_server value Server for LDAP authentication [$SVACER_LDAP_SERVER] --with-viewer-uri Add hostedViewerUri property to results. Works only if server is running with --public-url option (default: false) --project value Project name or ID. Default value is master --branch value Branch name or ID (default: master) --snapshot value Snapshot name or ID. Default value is latest snapshot (default: <latest>) --include-contents Import/export artifact contents (source code) when it is available (default: false) --out value, -o value Set explicit output filename (or "-" for stdout) --comment-template value [DEPRECATED]Set sarif result comments template --single-code-flow Generate SARIF report with single code flow (default: false) --with-taxonomies Generate SARIF report with taxonomies (default: false) --help Show help (default: false)
Полный список опций может быть получен при выполнении команд:
svacer sarif2 import --help svacer sarif2 export --help
Пример экспорта с включением содержимого файлов в артефакты:
svacer sarif2 export --host localhost --user admin --password admin --include-contents --project bash --out /tmp/out.sarif
Экспорт в SARIF включает дополнительные данные в properties
объект у соответствующего SARIF объекта. Дополнительные данные состоят из:
- информация о проекте, ветке и снимке
- информация о разметке (статус, severity, action, кем была выполнена и дата)
- информация о детекторе (severity, reliability, warnClass и прочая информация)
- дополнительные поля от маркера (mtid, invariant, function и т. д.)
- тэги (метки)
- комментарии
Для генерации fingerprints
используется invariant
маркера. Для генерации partialFingerprints
используется поле details
у маркера.
Трасса отображается в codeFlows
.
В качестве logicalLocations
используется поле function
.
Оценка размера экспортированного файла
Снимок с примерно 34 тысячами предупреждений, содержащий разметку и комментарии для ядра Linux при экспорте с включением исходного кода производит SARIF файл размером 450Мб (в сжатом виде получается порядка 70Мб).