В этом практическом руководстве вы настроите SourceCraft так, чтобы платформа не только помогала писать код, но и проверяла его на уязвимости и мисконфигурации. Для этого вы подключите к репозиторию анализатор кода и линтер, а также интегрируете результаты сканирования напрямую в предложение изменений (pull request).
Чтобы настроить пользовательский анализатор в репозитории SourceCraft:
Название должно быть уникальным в пределах организации и может содержать следующие ASCII-символы: строчные и заглавные буквы латинского алфавита, цифры, запятые, дефисы и подчеркивания.
Под названием отображается адрес, по которому репозиторий будет доступен.
В блоке Настройки включите опцию Сразу добавить README.
Нажмите Создать репозиторий.
Дождитесь создания репозитория, затем на его странице в разделе Настройки репозитория перейдите в секцию Безопасность.
Включите опцию Сканирование безопасности.
Настройте анализатор
Настройте CI/CD для запуска пользовательского анализатора безопасности. Для этого создайте конфигурационный файл, который определяет два пайплайна: для запуска линтера Golangci-lint и инструмента статического анализа кода Semgrep.
Для интеграции с SourceCraft результаты работы анализаторов должны быть представлены в формате SARIF (Static Analysis Results Interchange Format). Этот формат позволяет стандартизировать представление результатов статического анализа и интегрировать их в интерфейс платформы.
Интерфейс SourceCraft
На вкладке Домой перейдите в раздел Ваша мастерская → Репозитории.
Выберите созданный ранее репозиторий.
На странице репозитория в разделе Код перейдите в секцию Обзор.
Нажмите Новый → Файл.
В открывшемся окне укажите путь с именем файла .sourcecraft/ci.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-scancubes:-name:envscript:-env# Step 1: Run your security scanner-name:run-security-scannerimage:name:golangci/golangci-lint:v2.5.0-alpinescript:-cd$SOURCECRAFT_WORKSPACE-golangci-lintrun--output.sarif.path$SOURCECRAFT_WORKSPACE/result.sarif||true# Step 2: Optional - Debug/validate results-name:validate-scan-resultsscript:-cat$SOURCECRAFT_WORKSPACE/result.sarif# Step 3: Upload results to SourceCraft-name:upload-sarif-to-sourcecraftimage:name:sourcecraft/scan-result-uploader:0.6.0script:-exportAPPSEC_CUSTOM_ENGINE_NAME="golangci-lint"-/app/bin/scan-result-uploadersecurity-pipeline2:tasks:-name:semgrep-security-scancubes:-name:envscript:-env# Step 1: Run your security scanner-name:semgrep-scanimage:name:semgrep/semgrep:latestscript:-semgrep--config=auto--sarif--output$SOURCECRAFT_WORKSPACE/result.sarif$SOURCECRAFT_WORKSPACE||true# Step 2: Optional - Debug/validate results-name:validate-scan-resultsscript:-cat$SOURCECRAFT_WORKSPACE/result.sarif# Step 3: Upload results to SourceCraft-name:scan-result-uploaderimage:name:sourcecraft/scan-result-uploader:0.6.0script:-exportAPPSEC_CUSTOM_ENGINE_NAME="SemgrepOSS"-/app/bin/scan-result-uploader
В правом верхнем углу нажмите Сохранить изменения.
В открывшемся окне:
В поле Сообщение об изменениях укажите комментарий:
Настройка анализатора безопасности
В блоке Ветка изменений выберите Сохранить непосредственно в ветку: main.
В блоке Действие после сохранения изменений выберите Просто сохранить.
Нажмите Сохранить изменения.
Создайте предложение изменений
Создайте тестовый файл и предложение изменений, которое автоматически запустит проверки безопасности.
В этом примере для теста используется код из проекта OWASP Juice Shop — это намеренно уязвимое веб‑приложение, созданное для обучения информационной безопасности. Вы можете ознакомиться с ним в репозитории juice-shop на GitHub.
Интерфейс SourceCraft
На вкладке Домой перейдите в раздел Ваша мастерская → Репозитории.
Выберите созданный ранее репозиторий.
На странице репозитория в разделе Код перейдите в секцию Обзор.
Нажмите Новый → Файл.
В открывшемся окне укажите имя и путь файла, например, routes/redirect.ts и нажмите Создать файл.
В правом верхнем углу нажмите Сохранить изменения.
В открывшемся окне:
В поле Сообщение об изменениях укажите комментарий:
Тестовый код для анализатора безопасности
В блоке Ветка изменений выберите Создать новую ветку для этих изменений и укажите название ветки test-analyzer.
В блоке Действие после сохранения изменений выберите Сохранить и создать новое предложение изменений.
Нажмите Сохранить изменения.
На открывшейся странице Предложить изменения в правом верхнем углу нажмите Опубликовать предложение изменений.
В результате вы увидите страницу предложения изменений с запущенными проверками. Обновите ее и дождитесь завершения проверок security-pipeline1 и security-pipeline2.
Проверьте результат
Проверьте результат работы анализатора безопасности. Результаты сканирования отображаются на странице предложения изменений и содержат следующую информацию:
Комментарии и предупреждения от имени пользователя, создавшего предложение изменений.
Список результатов от настроенных анализаторов и линтеров.
Подробное описание найденных ошибок с указанием места в коде.
Интерфейс SourceCraft
На вкладке Домой перейдите в раздел Ваша мастерская → Репозитории.
Выберите созданный ранее репозиторий.
На странице репозитория в разделе Код перейдите в секцию Предложения изменений.
Выберите предложение изменений test-analyzer.
В разделе Активность изучите комментарии от SourceCraft Security Bot.
Пример комментария по результатам проверки:
...
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.
Как удалить созданные ресурсы
Если созданный репозиторий вам больше не нужен, удалите его.