Большинство уязвимостей начинается с ошибок в коде. Использование небезопасных, устаревших функций, выход за границы, переполнения — все это примеры ошибок, допускаемых разработчиками и приводящих к появлению уязвимостей.
Для обнаружения таких ошибок в коде используются специальные средства SAST (Static Application Security Testing). Это инструменты статического анализа безопасности приложений, которые позволяют выявлять уязвимости в исходном коде программы без её запуска. Проверки SAST относятся к методу «белого ящика», так как для анализа необходим доступ к исходному коду приложения.
Существует множество различных как коммерческих, так и бесплатных решений, предназначенных для анализа исходного кода. Одним из наиболее распространенных инструментов SAST является SonarQube.
SonarQube стал важнейшим инструментом в мире разработки программного обеспечения, позволяющим разработчикам обеспечить качество, безопасность и сопровождение своего кода. Независимо от того, опытный вы разработчик или новичок в этой области, SonarQube предоставляет простую в использовании платформу для статического анализа кода, которая может значительно улучшить качество вашей кодовой базы.
В этой статье мы подробно рассмотрим SonarQube, объясним, что это такое, в чем его преимущества и как его настроить. Мы также продемонстрируем, как вы можете использовать SonarQube с FastAPI для проверки качества кода. Итак, давайте приступим!
Что такое SonarQube?
SonarQube — это платформа с открытым исходным кодом для непрерывной проверки качества кода. Она обеспечивает автоматический анализ вашего кода для выявления ошибок, уязвимостей безопасности, запахов кода и других проблем с качеством. SonarQube поддерживает широкий спектр языков программирования, включая Java, Python, JavaScript, C# и другие, что делает его универсальным инструментом для команд, работающих на различных технологических стеках.
Ключевые особенности SonarQube:
Статический анализ кода: SonarQube анализирует исходный код, не выполняя его. Он проверяет наличие таких проблем, как ошибки, уязвимости в системе безопасности, дублирование кода и многое другое.
Ворота качества: SonarQube использует ворота качества для определения стандартов, которым должен соответствовать ваш код, чтобы пройти анализ. Это помогает гарантировать, что новые изменения кода не приведут к появлению новых проблем с качеством.
Интеграция с CI/CD: SonarQube хорошо интегрируется с инструментами непрерывной интеграции (CI), такими как Jenkins, GitLab CI и Travis CI. Это позволяет командам автоматизировать анализ кода в рамках конвейера CI/CD.
Поддержка множества языков: SonarQube поддерживает более 27 языков программирования, что делает его отличным решением для команд, работающих с несколькими технологиями.
SonarQube предлагает множество преимуществ, которые помогут улучшить качество кода, в том числе:
Обнаружение ошибок: SonarQube автоматически обнаруживает ошибки и потенциальные проблемы, помогая разработчикам выявлять ошибки на ранних этапах цикла разработки.
Уязвимости безопасности: Выявляет недостатки и уязвимости в системе безопасности, обеспечивая безопасность вашей кодовой базы.
Дублирование кода: SonarQube помогает обнаружить дублированный код, поощряя разработчиков писать многократно используемый и поддерживаемый код.
Smell code: Выделяет области, где код может быть чище, легче читаем и эффективнее.
Автоматизируя проверку кода, SonarQube экономит время и усилия по сравнению с ручной проверкой кода. Разработчики могут быстро выявлять и устранять проблемы, не тратя время на отладку сложных проблем. Интеграция с конвейерами CI/CD упрощает процесс, облегчая мониторинг и поддержание качества кода в течение длительного времени.
Установка SonarQube с помощью Docker
Использование SonarQube с Docker делает процесс установки более быстрым и простым, не нужно беспокоиться о настройке зависимостей вручную. Вот пошаговое руководство по настройке SonarQube с помощью Docker:
Cоздайте новый каталог под названием setup‑sonarqube:
mkdir setup‑sonarqube cd setup‑sonarqube
Создайте файл docker‑compose.yml
В каталоге setup‑sonarqube создайте файл docker‑compose.yml со следующим содержимым:
версия: "3.7"
services:
sonarqube:
image: sonarqube:latest
container_name: sonarqube
ports:
- "9000:9000"
environment:
- SONAR_ES_BOOTSTRAP_CHECKS_DISABLE=true
- SONAR_WEB_CONTEXT=/
volumes:
- sonarqube_data:/opt/sonarqube/data
- sonarqube_logs:/opt/sonarqube/logs
- sonarqube_extensions:/opt/sonarqube/extensions
тома:
sonarqube_data:
sonarqube_logs:
sonarqube_extensions:
В той же директории, где находится файл docker‑compose.yml, выполните следующую команду для запуска SonarQube:
docker-compose up -d
Это запустит SonarQube в режиме демона, и вы сможете получить доступ к нему на http://localhost:9000 для дальнейшей настройки.
Откройте браузер и перейдите на http://localhost:9000.
По умолчанию используются следующие учетные данные:
Имя пользователя: admin
Пароль: admin
После первого входа в систему вам будет предложено изменить пароль.
Проверка качества кода с помощью SonarQube для FastAPI
Теперь, когда SonarQube запущен, давайте проверим, как анализировать код FastAPI на предмет проблем с качеством.
Предварительно необходимо, чтоб был настроен проект FastAPI. Вы можете создать простое приложение, следуя официальному руководству по FastAPI. Также необходимо, чтобы в вашей системе были установлены Python, pip и pytest для запуска модульных тестов.
Далее установите SonarQube Scanner. Для этого загрузите последнюю версию SonarQube Scanner со страницы загрузки Sonarscanner. Распакуйте загруженный zip/tar‑файл. Добавьте каталог bin распакованной папки в переменную окружения PATH вашей системы.
Например:
export PATH=$PATH:/path/to/sonar-scanner/bin
Для Windows:
Загрузите версию для Windows с веб‑сайта SonarQube.
Распакуйте zip‑файл в папку и добавьте папку bin в системную переменную PATH.
Далее создайте файл конфигурации (sonar‑project.properties) в корне каталога вашего проекта. Этот файл будет содержать настройки, которые позволят сканеру узнать, как анализировать ваш FastAPI‑проект.
# sonar-project.properties
# SonarQube project configuration
sonar.projectKey=my-fastapi-project
sonar.projectName=My FastAPI Project
sonar.projectVersion=1.0
# Source code information
sonar.sources=app
sonar.language=python
# Exclude specific files/folders (optional)
sonar.exclusions=**/tests/**,**/__pycache__/**
# SonarQube server URL and authentication token
sonar.host.url=http://localhost:9000
sonar.token=pskfsk12333k2k2j2j2kk12k2kk3k3ddswwrfxcvgf
Для того, чтобы сгенерировать указанный в файле токен необходимо перейти в раздел «User» → «My Account» — он находится в правом верхнем углу профиля.
Выбрать вкладку «Security» и сгенерировать токен
Убедитесь, что файл sonar.sources указывает на папку с исходным кодом вашего проекта FastAPI.
Запуск сканера SonarQube
После установки сканера SonarQube и настройки файла sonar‑project.properties вы можете запустить сканер для анализа вашего проекта FastAPI.
Из каталога проекта выполните команду:
sonar-scanner
Это запустит анализ и отправит результаты на ваш сервер SonarQube. Вы можете проверить результаты на приборной панели SonarQube по адресу http://localhost:9000.
Настройка интеграции CI/CD
Если вы хотите автоматизировать анализ в конвейере CI/CD, вы можете интегрировать сканер SonarQube с такими инструментами, как Jenkins, GitHub Actions или GitLab CI.
Например, в рабочем процессе GitHub Actions для автоматизации анализа можно использовать действие sonarsource/sonarcloud‑github‑action.
Просмотр результатов
После завершения сканирования перейдите на приборную панель SonarQube (http://localhost:9000) и войдите в систему, используя свои учетные данные. Вы увидите результаты анализа, включая: баги, уязвимости, smell code, тестовое покрытие, дублированный код. Эта информация поможет вам определить области для улучшения вашего кода FastAPI.
Заключение
SonarQube — это полезный инструмент для поддержания и улучшения качества кода в командах разработчиков. Автоматизируя статический анализ кода, SonarQube помогает разработчикам выявлять проблемы на ранней стадии, обеспечивать безопасность и эффективность кода. Установка SonarQube с помощью Docker упрощает процесс инсталляции, а интеграция с таким проектом на Python, как FastAPI, гарантирует, что ваши приложения будут построены на прочном фундаменте высококачественного кода без ошибок.
Независимо от того, работаете ли вы над небольшим проектом или являетесь частью большой команды, SonarQube может предоставить вам информацию, необходимую для того, чтобы поднять ваш код на новый уровень.
Выстроить надёжный пайплайн проверки — только половина задачи. Вторая — убедиться, что разработчики не будут его обходить, зависимости не станут точкой входа, а безопасность — тормозом. Если вам близка идея DevSecOps, и вы хотите глубже понять, как встроить его в процессы, приходите на открытые уроки:
29 июля в 20:00. Страх и ненависть при работе с зависимостями (SCA)
Как автоматизировать контроль, обновление и проверку компонентов, чтобы избежать хаоса и уязвимостей.13 августа в 20:00. Awareness в DevSecOps
Что делать, если главный риск — это не код, а человек. Повышаем осознанность команды и снижаем уязвимости.21 августа в 20:00. От идеи до воплощения – как обезвредить программный код?
Интеграция SAST, SCA и DAST в CI/CD — теория и демонстрация в одном уроке.
Готовы проверить свои скиллы в DevSecOps? Пройдите вступительный тест и узнайте, где пробелы в знаниях.
Комментарии (2)
rakovskij_stanislav
25.07.2025 10:02Конфиг docker compose с русскими словами "версия" и "тома"... Нейромсье знает толк...
kivsiak
Для fastapi, pyright (mypy, pyrefly, когданить ty) + ruff - дешево, бесплатно и интегрируется со всем чем только можно