{"meta":{"title":"Настройка анализа с помощью пакетов CodeQL","intro":"Пакеты CodeQL можно использовать для выполнения запросов CodeQL , поддерживаемых другими людьми, или для совместного использования созданных запросов CodeQL .","product":"Безопасность и качество кода","breadcrumbs":[{"href":"/ru/code-security","title":"Безопасность и качество кода"},{"href":"/ru/code-security/tutorials","title":"Tutorials"},{"href":"/ru/code-security/tutorials/customize-code-scanning","title":"Настройка сканирования кода"},{"href":"/ru/code-security/tutorials/customize-code-scanning/customizing-analysis-with-codeql-packs","title":"Настройка анализа"}],"documentType":"article"},"body":"# Настройка анализа с помощью пакетов CodeQL\n\nПакеты CodeQL можно использовать для выполнения запросов CodeQL , поддерживаемых другими людьми, или для совместного использования созданных запросов CodeQL .\n\nВы можете настроить анализ CodeQL путем скачивания пакетов, созданных другими пользователями, и запуская их в базе кода. Дополнительные сведения см. в разделе [Пакеты запросов CodeQL](/ru/code-security/concepts/code-scanning/codeql/codeql-query-packs).\n\n## Скачивание и использование пакетов запросов CodeQL\n\nПрежде чем использовать пакет запросов CodeQL для анализа базы данных, необходимо скачать все пакеты, необходимые для GitHub Container registry. Это можно сделать с помощью флага `--download``codeql database analyze` в рамках команды или запуска `codeql pack download`. Если пакет недоступен, необходимо использовать GitHub App или personal access token для проверки подлинности. Дополнительные сведения и пример см. в разделе [Загрузка результатов анализа CodeQL на GitHub](/ru/code-security/codeql-cli/getting-started-with-the-codeql-cli/uploading-codeql-analysis-results-to-github#uploading-results-to-github).\n\n| Вариант                                                                            |                                                                                                                                                                                                          Обязательно                                                                                                                                                                                                         | Usage                                                                                                                                                                                                                                                                                                                                                                                                  |\n| ---------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |\n| <code><span style=\"white-space: nowrap;\">\\<scope/name\\@version:path></span></code> |                                                    <svg version=\"1.1\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" class=\"octicon octicon-check\" aria-label=\"Required\" role=\"img\"><path d=\"M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z\"></path></svg>                                                   | Укажите область и имя одного или нескольких пакетов запросов CodeQL для скачивания с помощью разделенного запятыми списка. При необходимости включите версию для скачивания и распаковки. По умолчанию скачивается последняя версия пакета. При необходимости добавьте путь к запросу, каталогу или набору запросов для выполнения. Если путь не включен, выполните запросы этого пакета по умолчанию. |\n| <code><span style=\"white-space: nowrap;\">--github-auth-stdin</span></code>         | <svg version=\"1.1\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" class=\"octicon octicon-x\" aria-label=\"x icon\" role=\"img\"><path d=\"M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z\"></path></svg> | Передайте интерфейс командной строки GitHub App или personal access token, созданные для проверки подлинности с помощью REST API GitHubиз хранилища секретов с помощью стандартных входных данных. Это не требуется, если команда имеет доступ к переменной среды `GITHUB_TOKEN`, заданной с помощью этого маркера.                                                                                    |\n\n> \\[!NOTE]\n> Если вы указываете определенную версию пакета запросов, помните, что указанная версия может в конечном итоге стать слишком старой для последней версии CodeQL для эффективного использования. Чтобы обеспечить оптимальную производительность, если необходимо указать точные версии пакета запросов, следует повторно определить, какие версии закрепляются при обновлении используемой версии CodeQL CLI.\n>\n> Дополнительные сведения о совместимости пакетов см. в разделе [Ссылка на пакеты запросов CodeQL](/ru/code-security/reference/code-scanning/codeql/codeql-cli/codeql-query-packs#codeql-pack-compatibility).\n\n### Базовый пример загрузки и использования пакетов запросов\n\nВ этом примере выполняется команда `codeql database analyze` с параметром `--download`, чтобы:\n\n1. Скачать последнюю версию пакета `octo-org/security-queries`.\n2. Скачать версию `octo-org/optional-security-queries` пакета, которая была бы *совместима* с версией 1.0.1 (в данном случае это версия 1.0.2). Дополнительные сведения о совместимости SemVer см. в [документации по семантическому диапазону версий npm](https://github.com/npm/node-semver#ranges).\n3. Выполните все запросы по умолчанию в `octo-org/security-queries`.\n4. Выполнение только запроса `queries/csrf.ql` из `octo-org/optional-security-queries`\n\n```shell\n$ echo $OCTO-ORG_ACCESS_TOKEN | codeql database analyze --download /codeql-dbs/example-repo \\\n    octo-org/security-queries \\\n    octo-org/optional-security-queries@~1.0.1:queries/csrf.ql \\\n    --format=sarif-latest --output=/temp/example-repo-js.sarif\n\n> Download location: /Users/mona/.codeql/packages\n> Installed fresh octo-org/security-queries@1.0.0\n> Installed fresh octo-org/optional-security-queries@1.0.2\n> Running queries.\n> Compiling query plan for /Users/mona/.codeql/packages/octo-org/security-queries/1.0.0/potential-sql-injection.ql.\n> [1/2] Found in cache: /Users/mona/.codeql/packages/octo-org/security-queries/1.0.0/potential-sql-injection.ql.\n> Starting evaluation of octo-org/security-queries/query1.ql.\n> Compiling query plan for /Users/mona/.codeql/packages/octo-org/optional-security-queries/1.0.2/queries/csrf.ql.\n> [2/2] Found in cache: /Users/mona/.codeql/packages/octo-org/optional-security-queries/1.0.2/queries/csrf.ql.\n> Starting evaluation of octo-org/optional-security-queries/queries/csrf.ql.\n> [2/2 eval 694ms] Evaluation done; writing results to octo-org/security-queries/query1.bqrs.\n> Shutting down query evaluator.\n> Interpreting results.\n```\n\n### Прямое скачивание пакетов CodeQL\n\nЕсли вы хотите скачать пакет CodeQL без его немедленного запуска, можно использовать команду `codeql pack download`. Это полезно, если вы хотите избежать доступа к Интернету при выполнении запросов CodeQL. При выполнении анализа CodeQL можно указать пакеты, версии и пути так же, как и в предыдущем примере:\n\n```shell\necho $OCTO-ORG_ACCESS_TOKEN | codeql pack download <scope/name@version:path> <scope/name@version:path> ...\n```\n\n### Скачивание пакетов CodeQL из нескольких реестров контейнеров GitHub\n\nЕсли пакеты CodeQL находятся в нескольких реестрах контейнеров, необходимо указать CodeQL CLI, где найти каждый пакет. Дополнительные сведения см. в разделе [Параметры настройки рабочих процессов для сканирования кода](/ru/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/customizing-your-advanced-setup-for-code-scanning#downloading-codeql-packs-from-github-enterprise-server).\n\n## Указание запросов, выполняемых в пакете CodeQL\n\nОписатели запросов используются `codeql database analyze` и другими командами, которые работают с набором запросов.\nПолная форма описателя запроса:`scope/name@range:path`\n\n* ```\n          `scope/name` — это полное имя пакета CodeQL.\n  ```\n* ```\n          `range`\n          [— это диапазон](https://docs.npmjs.com/cli/v6/using-npm/semver#ranges) semver.\n  ```\n* ```\n          `path` — это путь к одному запросу, каталогу с запросами или файлу набора запросов.\n  ```\n\nПри указании `scope/name`значения `range` и `path` необязательными. Если опущена `range` последняя версия указанного пакета, используется. Если не указано, `path` используется набор запросов по умолчанию указанного пакета.\n\nЭто `path` может быть один из: `.ql` файл запроса, каталог, содержащий один или несколько запросов, или `.qls` файл набора запросов. Если не указано имя пакета, необходимо указать `path`имя пакета, которое будет интерпретировано относительно рабочего каталога текущего процесса. Шаблоны glob не поддерживаются.\n\nЕсли указать и то `scope/name` , и `path`другое `path` не может быть абсолютным. Он считается относительным к корню пакета CodeQL .\n\n### Примеры описателей запросов\n\n* ```\n          `codeql/python-queries` — Все запросы в наборе запросов по умолчанию последней `codeql/python-queries` версии пакета.\n  ```\n\n* ```\n          `codeql/python-queries@1.2.3` — Все запросы в наборе запросов по умолчанию версии `1.2.3``codeql/python-queries` пакета.\n  ```\n\n* ```\n          `codeql/python-queries@~1.2.3` — Все запросы в наборе запросов по умолчанию последней версии `codeql/python-queries` пакета, >= `1.2.3` и < `1.3.0`.\n  ```\n\n* ```\n          `codeql/python-queries:Functions` — Все запросы в каталоге в `Functions` последней `codeql/python-queries` версии пакета.\n  ```\n\n* ```\n          `codeql/python-queries@1.2.3:Functions` — Все запросы в каталоге `Functions` в версии 1.2.3 `codeql/python-queries` пакета.\n  ```\n\n* ```\n          `codeql/python-queries@1.2.3:codeql-suites/python-code-scanning.qls` — Все запросы в каталоге `codeql-suites/python-code-scanning.qls` в версии 1.2.3 `codeql/python-queries` пакета.\n  ```\n\n* ```\n          `suites/my-suite.qls` — все запросы в `suites/my-suite.qls` файле относительно текущего рабочего каталога.\n  ```\n\n> \\[!TIP]\n> Набор запросов по умолчанию стандартных пакетов запросов CodeQL `codeql-suites/<lang>-code-scanning.qls`. Несколько других полезных наборов запросов также можно найти в каталоге `codeql-suites` каждого пакета. Например, `codeql/cpp-queries` пакет содержит следующие наборы запросов:\n>\n> *\n\n```\n          `cpp-code-scanning.qls` — Запросы сканирования стандартного кода для C++. Набор запросов по умолчанию для этого пакета.\n```\n\n> *\n\n```\n          `cpp-security-extended.qls` — Запросы из набора по умолчанию `cpp-code-scanning.qls` для C++, а также запросы с более низкой степенью серьезности и точностью.\n```\n\n> *\n\n```\n          `cpp-security-and-quality.qls` — запросы из `cpp-security-extended.qls`, а также возможности обслуживания и запросов надежности.\n```\n\n> Источники этих наборов запросов можно просмотреть в [репозитории](https://github.com/github/codeql/tree/main/cpp/ql/src/codeql-suites) CodeQL . Наборы запросов для других языков похожи.\n\n## Использование пакетов моделей для анализа вызовов пользовательских зависимостей\n\nВы можете включить опубликованные пакеты моделей в анализ code scanning с параметром `--model-packs` . Рассмотрим пример.\n\n```shell\n$ codeql database analyze /codeql-dbs/my-company --format=sarif-latest \\\n  --model-packs my-repo/my-java-model-pack \\\n  --output=/temp/my-company.sarif codeql/java-queries\n```\n\nВ этом примере соответствующие запросы в стандартном пакете `codeql/java-queries` запросов будут использовать сведения о зависимости из пакета модели, `my-repo/my-java-model-pack`чтобы проверить уязвимости в коде, который вызывает эти зависимости.\n\nВ анализе можно указать несколько опубликованных пакетов модели.\n\nДополнительные сведения о написании собственных пакетов модели см. в разделе [Создание и работа с пакетами CodeQL](/ru/code-security/codeql-cli/using-the-advanced-functionality-of-the-codeql-cli/creating-and-working-with-codeql-packs#creating-a-model-pack).\n\n### Сведения о опубликованных пакетах\n\nПри публикации пакета для использования в анализе `codeql pack create` или `codeql pack publish` команда проверяет, завершен ли содержимое, а также добавляет в него дополнительные фрагменты содержимого:\n\n* Для пакетов запросов копия каждого пакета библиотеки, от которой она зависит, в точных версиях, с которыми она была разработана. Пользователям пакета запросов не нужно скачивать эти пакеты библиотек отдельно.\n\n* Для пакетов запросов предварительно скомпилированные представления каждого из запросов. Они выполняются быстрее, чем компилировать источник QL для запроса при каждом анализе.\n\nБольшинство этих данных находятся в каталоге с именем `.codeql` в опубликованном пакете, но предварительно скомпилированные запросы находятся в файлах с суффиксом `.qlx` рядом с `.ql` источником для каждого запроса. При анализе базы данных с запросом из опубликованного пакета CodeQL загружает эти файлы вместо `.ql` источника. Если необходимо изменить содержимое опубликованного \\_\\_ пакета, обязательно удалите все `.qlx` файлы, так как они могут предотвратить изменения в `.ql` файлах."}