---
metadata:
  - name: generator
    content: Diplodoc Platform v5.63.0
alternate:
  - https://vibe.sourcecraft.dev/portal/docs/en/sourcecraft/tutorials/custom-security-analyzers.md
  - https://vibe.sourcecraft.dev/portal/docs/ru/sourcecraft/tutorials/custom-security-analyzers.md
  - href: https://vibe.sourcecraft.dev/portal/docs/ru/sourcecraft/tutorials/custom-security-analyzers.md
    type: text/markdown
    title: Markdown version
  - href: https://vibe.sourcecraft.dev/portal/docs/ru/llms.txt
    rel: describedby
title: Настройка пользовательского анализатора безопасности в SourceCraft
description: В этом практическом руководстве вы настроите пользовательский анализатор безопасности в репозитории SourceCraft.
---
> **Documentation Index:** Fetch the complete configuration index at https://vibe.sourcecraft.dev/portal/docs/ru/llms.txt


<!-- source: ru/_tutorials/security/custom-security-analyzers.md -->
# Настройка пользовательского анализатора безопасности в SourceCraft

В этом практическом руководстве вы настроите SourceCraft так, чтобы платформа не только помогала писать код, но и проверяла его на уязвимости и мисконфигурации. Для этого вы подключите к [репозиторию](https://vibe.sourcecraft.dev/portal/docs/ru/sourcecraft/concepts/index.md#repos) анализатор кода и линтер, а также интегрируете результаты сканирования напрямую в [предложение изменений](https://vibe.sourcecraft.dev/portal/docs/ru/sourcecraft/concepts/index.md#pr) (pull request).

Чтобы настроить пользовательский анализатор в репозитории SourceCraft:

1. [Создайте репозиторий](#create-repository).
1. [Настройте анализатор](#config-ci-cd).
1. [Создайте предложение изменений](#create-pr).
1. [Проверьте результат](#check-ci-cd).

Если созданные ресурсы вам больше не нужны, [удалите их](#clear-out).


## Создайте репозиторий {#create-repository}

Создайте репозиторий в SourceCraft и включите сканирование безопасности.

{% list tabs group=instructions %}

- Интерфейс SourceCraft {#src}

  1. Откройте [главную страницу сервиса](https://sourcecraft.dev).
  1. На панели слева нажмите ![image](../../_assets/console-icons/plus.svg) **Создать репозиторий**.
  1. В открывшемся окне выберите ![image](../../_assets/console-icons/archive.svg) **Пустой репозиторий**.
  1. В блоке **Сведения о новом репозитории**:
      * В поле **Владелец** выберите [организацию](https://vibe.sourcecraft.dev/portal/docs/ru/sourcecraft/concepts/index.md#org).
      * В поле **Название** укажите название репозитория.

          Название должно быть уникальным в пределах организации и может содержать следующие [ASCII-символы](https://ru.wikipedia.org/wiki/ASCII): строчные и заглавные буквы латинского алфавита, цифры, запятые, дефисы и подчеркивания.

          Под названием отображается адрес, по которому репозиторий будет доступен.

  1. В блоке **Настройки** включите опцию **Сразу добавить README**.
  1. Нажмите **Создать репозиторий**.
  1. Дождитесь создания репозитория, затем на его странице в разделе ![image](../../_assets/console-icons/gear.svg) **Настройки репозитория** перейдите в секцию ![image](../../_assets/console-icons/shield.svg) **Безопасность**.
  1. Включите опцию **Сканирование репозитория**.

{% endlist %}


## Настройте анализатор {#config-ci-cd}

Настройте CI/CD для запуска пользовательского анализатора безопасности. Для этого создайте конфигурационный файл, который определяет два пайплайна: для запуска линтера [Golangci-lint](https://golangci-lint.run/) и инструмента статического анализа кода [Semgrep](https://semgrep.dev/).

Для интеграции с SourceCraft результаты работы анализаторов должны быть представлены в формате [SARIF](https://sarif.info/) (Static Analysis Results Interchange Format). Этот формат позволяет стандартизировать представление результатов статического анализа и интегрировать их в интерфейс платформы.

{% list tabs group=instructions %}

- Интерфейс SourceCraft {#src}

  1. На вкладке ![image](../../_assets/console-icons/house.svg) **Домой** перейдите в раздел ![image](../../_assets/console-icons/layout-tabs.svg) **Ваша мастерская** → ![image](../../_assets/console-icons/archive.svg) **Репозитории**.
  1. Выберите созданный ранее репозиторий.
  1. На странице репозитория в разделе ![image](../../_assets/console-icons/code.svg) **Код** перейдите в секцию ![image](../../_assets/console-icons/archive.svg) **Обзор**.
  1. Нажмите ![image](../../_assets/console-icons/plus.svg) **Новый** → ![image](../../_assets/console-icons/file.svg) **Файл**.
  1. В открывшемся окне укажите путь с именем файла `.sourcecraft/ci.yaml` и нажмите **Создать файл**.
  1. Вставьте код:

      ```yaml
      on:
        pull_request:
          - workflows: [ security-pipeline1, security-pipeline2 ]
            filter:
              source_branches: [ "**" ]
              target_branches: [ "main", "develop" ]

        push:
          - workflows: [ security-pipeline ]
            filter:
              branches: [ "main", "develop" ]

      workflows:
        security-pipeline1:
          tasks:
            - name: golangci-lint-security-scan
              cubes:
                - name: env
                  script:
                    - env
                # Step 1: Run your security scanner
                - name: run-security-scanner
                  image:
                    name: golangci/golangci-lint:v2.5.0-alpine
                  script:
                    - cd $SOURCECRAFT_WORKSPACE
                    - golangci-lint run --output.sarif.path $SOURCECRAFT_WORKSPACE/result.sarif || true

                # Step 2: Optional - Debug/validate results
                - name: validate-scan-results
                  script:
                    - cat $SOURCECRAFT_WORKSPACE/result.sarif

                # Step 3: Upload results to SourceCraft
                - name: upload-sarif-to-sourcecraft
                  image:
                    name: sourcecraft/scan-result-uploader:0.6.0
                  script:
                    - export APPSEC_CUSTOM_ENGINE_NAME="golangci-lint"
                    - /app/bin/scan-result-uploader

        security-pipeline2:
          tasks:
            - name: semgrep-security-scan
              cubes:
                - name: env
                  script:
                    - env
                # Step 1: Run your security scanner
                - name: semgrep-scan
                  image:
                    name: semgrep/semgrep:latest
                  script:
                    - semgrep --config=auto --sarif --output $SOURCECRAFT_WORKSPACE/result.sarif $SOURCECRAFT_WORKSPACE || true

                # Step 2: Optional - Debug/validate results
                - name: validate-scan-results
                  script:
                    - cat $SOURCECRAFT_WORKSPACE/result.sarif

                # Step 3: Upload results to SourceCraft
                - name: scan-result-uploader
                  image:
                    name: sourcecraft/scan-result-uploader:0.6.0
                  script:
                    - export APPSEC_CUSTOM_ENGINE_NAME="Semgrep OSS"
                    - /app/bin/scan-result-uploader
      ```

  1. В правом верхнем углу нажмите **Сохранить изменения**.
  1. В открывшемся окне:
      1. В поле **Сообщение об изменениях** укажите комментарий:

          ```text
          Настройка анализатора безопасности
          ```

      1. В блоке **Ветка изменений** выберите `Сохранить непосредственно в ветку: main`.
      1. В блоке **Действие после сохранения изменений** выберите `Просто сохранить`.
      1. Нажмите **Сохранить изменения**.

{% endlist %}


## Создайте предложение изменений {#create-pr}

Создайте тестовый файл и предложение изменений, которое автоматически запустит проверки безопасности.

В этом примере для теста используется код из проекта OWASP Juice Shop — это намеренно уязвимое веб‑приложение, созданное для обучения информационной безопасности. Вы можете ознакомиться с ним в репозитории [juice-shop](https://github.com/juice-shop/juice-shop) на GitHub.

{% list tabs group=instructions %}

- Интерфейс SourceCraft {#src}

  1. На вкладке ![image](../../_assets/console-icons/house.svg) **Домой** перейдите в раздел ![image](../../_assets/console-icons/layout-tabs.svg) **Ваша мастерская** → ![image](../../_assets/console-icons/archive.svg) **Репозитории**.
  1. Выберите созданный ранее репозиторий.
  1. На странице репозитория в разделе ![image](../../_assets/console-icons/code.svg) **Код** перейдите в секцию ![image](../../_assets/console-icons/archive.svg) **Обзор**.
  1. Нажмите ![image](../../_assets/console-icons/plus.svg) **Новый** → ![image](../../_assets/console-icons/file.svg) **Файл**.
  1. В открывшемся окне укажите имя и путь файла, например, `routes/redirect.ts` и нажмите **Создать файл**.
  1. Скопируйте и вставьте код из [соответствующего файла](https://github.com/juice-shop/juice-shop/blob/master/routes/redirect.ts) репозитория juice-shop.
  1. В правом верхнем углу нажмите **Сохранить изменения**.
  1. В открывшемся окне:
      1. В поле **Сообщение об изменениях** укажите комментарий:

          ```text
          Тестовый код для анализатора безопасности
          ```

      1. В блоке **Ветка изменений** выберите `Создать новую ветку для этих изменений` и укажите название ветки `test-analyzer`.
      1. В блоке **Действие после сохранения изменений** выберите `Сохранить и создать новое предложение изменений`.
      1. Нажмите **Сохранить изменения**.

  1. На открывшейся странице **Предложить изменения** в правом верхнем углу нажмите **Опубликовать предложение изменений**.

      В результате вы увидите страницу предложения изменений с запущенными проверками. Обновите ее и дождитесь завершения проверок `security-pipeline1` и `security-pipeline2`.

{% endlist %}


## Проверьте результат {#check-ci-cd}

Проверьте результат работы анализатора безопасности. Результаты сканирования отображаются на странице предложения изменений и содержат следующую информацию:

* Комментарии и предупреждения от имени пользователя, создавшего предложение изменений.
* Список результатов от настроенных анализаторов и линтеров.
* Подробное описание найденных ошибок с указанием места в коде.

{% list tabs group=instructions %}

- Интерфейс SourceCraft {#src}

  1. На вкладке ![image](../../_assets/console-icons/house.svg) **Домой** перейдите в раздел ![image](../../_assets/console-icons/layout-tabs.svg) **Ваша мастерская** → ![image](../../_assets/console-icons/archive.svg) **Репозитории**.
  1. Выберите созданный ранее репозиторий.
  1. На странице репозитория в разделе ![image](../../_assets/console-icons/code.svg) **Код** перейдите в секцию ![image](../../_assets/console-icons/code-pull-request.svg) **Предложения изменений**.
  1. Выберите предложение изменений `test-analyzer`.
  1. В разделе **Активность** изучите комментарии от `SourceCraft Security Bot`.

      Пример комментария по результатам проверки:

      ```text
      ...
      res.redirect(toUrl)
      ...

      🔒 [Semgrep OSS] has found the potential problem

      ⚠️ Problem: The application redirects to a URL specified by user-supplied input query that is not
      validated. This could redirect users to malicious locations. Consider using an allow-list approach
      to validate URLs, or warn users they are being redirected to a third-party website.

      Short Description: Semgrep Finding: javascript.express.security.audit.express-open-redirect.express-open-redirect

      Full Description: The application redirects to a URL specified by user-supplied input $REQ that is
      not validated. This could redirect users to malicious locations. Consider using an allow-list
      approach to validate URLs, or warn users they are being redirected to a third-party website.
      ```

{% endlist %}


## Как удалить созданные ресурсы {#clear-out}

Если созданный репозиторий вам больше не нужен, [удалите](https://vibe.sourcecraft.dev/portal/docs/ru/sourcecraft/operations/repo-delete.md) его.


## Полезные ссылки {#see-also}

* [Настроить CI/CD для развертывания приложения в Yandex Serverless Containers с помощью GitHub Actions](https://vibe.sourcecraft.dev/portal/docs/ru/sourcecraft/tutorials/ci-cd-sourcecraft-github-actions.md)
* [Настроить CI/CD между SourceCraft и Yandex Cloud Functions](https://vibe.sourcecraft.dev/portal/docs/ru/sourcecraft/tutorials/ci-cd-sourcecraft-functions.md)
* [Настроить в SourceCraft сервисное подключение к Yandex Cloud](https://vibe.sourcecraft.dev/portal/docs/ru/sourcecraft/operations/service-connections.md)
* [Интеграция с GitHub Actions в SourceCraft](https://vibe.sourcecraft.dev/portal/docs/ru/sourcecraft/concepts/gh-actions.md)
<!-- endsource: ru/_tutorials/security/custom-security-analyzers.md -->