惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

爱范儿
爱范儿
P
Palo Alto Networks Blog
月光博客
月光博客
H
Hackread – Cybersecurity News, Data Breaches, AI and More
I
InfoQ
aimingoo的专栏
aimingoo的专栏
腾讯CDC
T
Threatpost
D
DataBreaches.Net
Vercel News
Vercel News
F
Fortinet All Blogs
Engineering at Meta
Engineering at Meta
C
Cybersecurity and Infrastructure Security Agency CISA
Forbes - Security
Forbes - Security
U
Unit 42
C
Check Point Blog
Blog — PlanetScale
Blog — PlanetScale
O
OpenAI News
量子位
TaoSecurity Blog
TaoSecurity Blog
Microsoft Azure Blog
Microsoft Azure Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
V
Visual Studio Blog
Recorded Future
Recorded Future
云风的 BLOG
云风的 BLOG
Security Archives - TechRepublic
Security Archives - TechRepublic
The Last Watchdog
The Last Watchdog
S
Security Affairs
Attack and Defense Labs
Attack and Defense Labs
罗磊的独立博客
Stack Overflow Blog
Stack Overflow Blog
Microsoft Security Blog
Microsoft Security Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
V
V2EX
小众软件
小众软件
S
SegmentFault 最新的问题
www.infosecurity-magazine.com
www.infosecurity-magazine.com
W
WeLiveSecurity
AI
AI
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
博客园 - 聂微东
I
Intezer
Know Your Adversary
Know Your Adversary
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
P
Proofpoint News Feed
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
The Cloudflare Blog
博客园_首页
NISL@THU
NISL@THU
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания Автономность как точка невозврата: кто будет субъектом в цифровом будущем Обучение ИИ в «диких» условиях: как рутинные действия превращаются в датасеты Как измерить LLM для задач кибербеза: обзор открытых бенчмарков Где хранить код? Сравнение GitHub, GitLab и Bitbucket Математика объясняет, почему нормальное распределение встречается повсюду Почему ваш FinOps не работает: 12 тезисов от практиков Как подписать проектную документацию УКЭП с использованием бесплатных лицензий Pilot Адаптивное администрирование Sigla Vision Я грузил уран в бочки, а потом 20 лет строил ИТ в атомной отрасли Чем позвонить с Эвереста? История и обзор спутниковой связи. Часть 2 Как языковая модель помогает контролировать качество инструктажей по охране труда в металлургии Как не передать на desktop свой IP в РКН Анатомия SAP Privileges: как устроено управление правами в macOS MoneyDev: Сказка про три главных слова Обновлённый токенизатор видео K-VAE 2.0 от Сбера Как сделать диспетчеризацию дома на 1284 квартиры почти бесплатно Как мы разогнали железную дорогу Мы дали агентам рутину. Теперь надо решить — что делать с освободившимся временем Токсичный контент, промпт-хакинг и защита ИИ — всё о Guardrails для LLM Умный город начинается с точного взгляда: как «Фалькон Тех» меняет пространство к лучшему Навайбкодил приложение для анализа графов Почему Дюну так интересно читать? Упрощаем работу с рутиной или как стать Гендальфом Белым Деконструкция Go: CPU, RAM и что там происходит. Go Assembler база. Часть 1.1 Какие профессии исчезнут из-за ИИ, а какие появятся? И что с этим делать Как мы построили IT-отдел, где хочется расти: архитектурные встречи, прозрачные метрики и книжные подарки Rufler: Делаем из Claude Code автономный рой через один YAML-конфиг Sing-box и белый список приложений Как построить надёжный обмен сообщениями в микросервисах: лучшие практики для enterprise OpenAI строит MLM-пирамиду, а McKinsey и Accenture помогают ей в этом Дом, который не построил Фишер (Часть 2) «Сверхзвуковой математик» против «Вдумчивого логиста»: битва алгоритмов 3D-упаковки Мультимодальные модели – грубый и дорогой инструмент Разговоры ничего не стоят. Код тоже Проверки физических лиц: с кого начнет ФНС Топ-10 бесплатных нейросетей для создания видео в 2026 году Первые слои кода: как наши решения сегодня определяют архитектуру ИИ на десятилетия Разработка нового статического анализатора: PVS-Studio JavaScript Поиск уязвимостей ПО: базовый минимум или роскошный максимум Почему оценка персонала не работает как инструмент управления Как мы разработали ИИ-ассистента и сократили рутину продуктовой команды на 50% Как я ушел из найма, нажарил косточек и продал на маркетплейсах на 168 млн в год Когда 1С:ERP уже внедрена, а нормального производственного плана всё ещё нет Как я сделал Claude мультимодальным, подключив к нему Qwen Omni Как приглашение на вакансию мечты превращается в атаку Infrastructure as Code: философия и лучшие практики IaC Тестируем Yandex Code Assistant на задаче, в которой нужно хранить секреты nxs-universal-chart v3.0: новое поколение универсального Helm-чарта Callback Injection: Техника, которая отправила Microsoft Defender в глухой нокаут «Все идеи на стол»: митап как способ вывести проект из тупика Сегодня я узнал нечто новое о GPU благодаря багу в своей игре Как заставить LLM ̶ ̶г̶а̶л̶л̶ю̶ ̶ эволюционировать Карта событий как фундамент аналитики: практический кейс для E-commerce Что выбрать для AI: x86, ARM или RISC-V? Дайджест железа за март Роль соматических мутаций в развитии аутоиммунных заболеваний: путь к избирательной терапии Mythos от Anthropic — тревожный сигнал для всех, а не только для банков Guardrails для LLM на Java: как приручить промпт‑инъекции и токсичные ответы Green-VLA: как мы собрали VLA-модель для реального антропоморфного робота и не потеряли обобщение Финансовая гонка вооружений: почему умные люди добровольно в ней участвуют Эра ИИ-агентов наступила: выбираем лучшего цифрового сотрудника # Практический опыт внедрения WinCC Redundancy на производственном предприятии Сделал MVP за 3 дня, а потом неделю прикручивал оплату. Оно того стоило? Физика против Маска: почему Starship V3 может оказаться ещё одной катастрофой Нефть Венесуэлы: крупнейшие запасы в мире, но не крупнейшая нефтяная держава JPA 4. Переосмысление Hibernate Почему зеркальная фотокамера Nikon D5 десятилетней давности идеально подошла для миссии «Артемида-2» Проект «Уровень-Спутник» или как мы сделали платформу для гидрологов «Замедлиться, чтобы ускориться»: почему ИИ повышает цену ошибок в требованиях и архитектуре Как с нуля поднять трафик IT-компании на 1657% при бюджете 55 тыс. и выжить Pixel-perfect Downsampling — идеальная отрисовка 50 миллионов точек без потерь
А сейчас я покажу, откуда на вайбкод готовилось нападение
opensophy (R · 2026-05-01 · via Все публикации подряд на Хабре

А сейчас я покажу, откуда на вайбкод готовилось нападение

Уровень сложностиСредний

Время на прочтение11 мин

Охват и читатели27

Обзор

Часть 1 — С чего всё началось (и немного теории)

Введение

Вайбкод это круто, пока не открываешь первый отчёт сканера безопасности и не видишь 234 проблемы. В статье разберём, как выстроить пайплайн вокруг LLM-проекта: подключить SAST-инструменты, настроить Quality Gate как блокировщик деплоя и использовать модель для исправлений — не вместо инструментов, а поверх них. Покажу на реальном проекте с реальными цифрами. Будет полезно тем, кто активно использует LLM для написания кода, и специалистам в области appsec/devsecops.

Часть 1 — контекст, данные из отчёта DryRun Security и немного теории про DevSecOps.

Часть 2 — подключаем SonarCloud, настраиваем Quality Gate, интегрируем в CI/CD.

Часть 3 — первый скан реального проекта: 234 проблемы, как их разбирать и исправлять через Claude 4.6.

Часть 4 — добавляем Semgrep, смотрим, где инструменты расходятся и где ломается подход.

Начнём издалека, чтобы была понятна суть. В июле 2025 года инженер из команды Claude Code в Anthropic — Brian Cherny — написал в X следующее:

«Практически 100% нашего кода написано Claude Code + Opus 4.5. Лично для меня это уже 100% на протяжении двух с лишним месяцев — я даже не делаю правок вручную. Вчера я закрыл 22 пулл-реквеста, позавчера — 27, и каждый из них написан Claude полностью.» – Brian Cherny, @bcherny

Дальше он добавил: большинство индустрии придёт к похожей статистике в ближайшие месяцы. И что они уже используют claude -p на каждом PR для code review в свежем контексте, и т. д. — Claude может полноценно работать автономно. Но и сравнительно недавно, в марте 2026 года, компания DryRun Security опубликовала «The Agentic Coding Security Report» — небольшой, но очень показательный документ. Они взяли трёх кодинг-агентов — Claude (Sonnet 4.6), Codex (GPT 5.2) и Gemini (2.5 Pro) — и дали каждому одно и то же задание: написать два приложения с нуля, добавляя фичи через pull request’ы, как это делает реальная команда разработчиков. После каждого PR прогонялся сканер безопасности. Результаты оказались, мягко говоря, интересными. Согласно отчёту, 87% pull request’ов содержали хотя бы одну уязвимость и 143 проблемы безопасности суммарно в 38 сканах, а также другие проблемы безопасности. Выделили вот такой небольшой топик в таблицу повторяющихся проблем.

Класс уязвимости

Уровень

Кто допустил

Broken Access Control

Высокий

Все три агента

Hardcoded JWT secrets

Высокий

Все три агента

WebSocket Auth Bypass

Высокий

Все три агента

IDOR

Высокий

Все три агента

User Enumeration

Средний

Все три агента

XSS

Средний

Gemini + все в отдельных случаях

Race Conditions (TOCTOU)

Средний

Преимущественно Gemini

Что меня удивило: лучшие результаты показал Codex (я очень надеялся на Claude), но и у него остались незакрытые JWT-проблемы и отсутствие ревокации токенов.

Вывод из отчёта: LLM пишут код неплохо, но всё же стоит проверять его на безопасность и качество. Поэтому в этой статье мы поговорим о вайбкоде и его безопасности, как довести проект/код, сгенерированный моделью, до состояния, где он станет более качественным и безопасным, чем вообще без проверок :)

Приступим!

Чтобы прочувствовать тот «вайб» вайбкодера, нужно стать им. Но поскольку ещё и параллельно нужно решать проблемы, я их объединил, и так получилась идея создания Opensophy Hub — статической платформы для документации с набором Markdown-блоков, dev-панелью, интерактивными таблицами, UI-компонентами и live-редактором.

Небольшая теория

Просветимся немного в терминологию devsecops-процесса. Что такое Quality Gate и зачем он нужен? Если очень просто, это набор правил, которые код обязан пройти, прежде чем идти дальше по цепочке пайплайна.

Туда входит следующее:

  1. Покрытие тестами не ниже N%.

  2. Отсутствие новых уязвимостей.

  3. Никаких критичных code smell’ов.

  4. Приемлемая оценка надёжности (например, не ниже B).

В процессе разработки, поскольку проект open-source и хочется бесплатной проверки качества, выбираем облачный SAST-инструмент: SonarQube Cloud, который проверяет код на каждый push. Если Quality Gate не пройден, GitHub Actions останавливает процесс, и деплой просто не происходит, пока проблемы не исправлены.

Методы ИИ-интеграции в этом кейсе

Поскольку мы говорим о проекте, который в основном пишет LLM, мы должны избежать эффекта, когда одинаковая модель «пишет код = делает оценку», иначе услышите от модели: «ОЙ. А ОКАЗЫВАЕТСЯ ТЫ ТУТ ПРАВ И ТУТ РЕАЛЬНО УЯЗВИМОСТЬ. СОРИ». Поэтому можно пойти по такому подходу: Claude Sonnet 4.5 пишет код, а Claude Sonnet 4.6 исправляет уязвимость. Сейчас может появиться вопрос: «Так это же одинаковые модели, не?» Не совсем. Хоть и по отчёту от DryRun Security Claude не в «лучших» (а лучший там Codex), я предпочитаю всё же Claude и её свежие модели (в нашем случае Sonnet 4.5 и Sonnet 4.6 — это разные модели по качеству). И наверное, личная неприязнь к Codex — это то, что она делает много лишнего в процессе либо не слушает. Как пример: во время исправлений она зачем-то исправляет код там, где вообще не должна трогать! (Она мне так тёмную тему сделала почти синего цвета.) И ещё не любит писать код полностью, хотя получила полный доступ к информации о проекте, и т. д. У Claude таких проблем нет.

Важно: модель здесь не заменяет сами инструменты анализа, такие как SonarQube Cloud, — они остаются основными. Потому что инструмент даёт конкретику — где проблема, в какой строке, какого она типа и насколько критична. Модель уже работает поверх этого списка, а не пытается «на глаз» оценить код целиком. В этом и есть ключевой момент всего подхода.

Часть 2 – Подключение SonarQube Cloud и настройка Quality Gate

Наверное, избыточно рассказывать про то, как проходить регистрацию в SonarQube Cloud — мы перейдём сразу к делу. После регистрации проекта в SonarQube Cloud и первичного сканирования переходим в Administration -> Analysis method — там будут перечислены все доступные варианты интеграции: Automatic analysis, GitHub Actions, CircleCI, Manual.

Для каждого из этих вариантов SonarQube Cloud предоставляет готовые инструкции прямо в интерфейсе — Administration -> Analysis method. После выбора нужного метода там будет пошаговый гайд с конкретными командами и конфигурационными файлами под ваш стек.

Текст

Вот тут настройки выбора анализа.

Для проекта я выбрал автоматический анализ. На первый взгляд может показаться, что GitHub Actions — очевидный выбор: больше контроля, явная интеграция в пайплайн. Но для большинства проектов, особенно на старте, автоматический анализ предпочтительнее, и всё дело в простой настройке. «Нажал — и всё готово». Прям vibestyle!

GitHub Actions имеет смысл, если вам нужно жёстко заблокировать деплой при непрохождении Quality Gate. Automatic analysis работает асинхронно: SonarQube Cloud анализирует код и сообщает результат, но не может остановить уже запущенный деплой. Если между пушем и завершением анализа проходит хотя бы минута — деплой уйдёт вперёд. А с GitHub Actions можно выстроить цепочку, которая блокирует деплой: push -> sonarqube job -> build -> deploy, где build не запустится, пока sonarqube не завершится с успехом.

Если Quality Gate не прошёл, в логах GitHub Actions появится примерно следующее:

ERROR QUALITY GATE STATUS: FAILED
Error: Action failed: The process '...sonar-scanner' failed with exit code 3

И ссылка на дашборд SonarQube Cloud с конкретными проблемами.

Текст

Демонстрация работы Quality Gate (не прошёл качество кода)

Настройка Quality Gate в SonarQube Cloud

По умолчанию SonarQube Cloud применяет Sonar way — стандартный Quality Gate. Для большинства проектов он вполне адекватен. Посмотреть и кастомизировать его можно в Policies -> Quality Gates.

Стандартные условия Sonar way для нового кода:

Метрика

Порог

Security Rating

A

Reliability Rating

A

Maintainability Rating

A

Coverage

≥ 80%

Duplicated Lines

≤ 3%

Для вайбкод-проекта первичная проверка может показать от 50 до 200+ проблем. Поэтому готовьтесь к марафону на пару часов, где, например, Coverage сразу убьёт Quality Gate. Его, конечно, на первое время можно убрать и оставить Security и Reliability Rating на уровне A — это разумная планка для любого проекта. Затем можно уже подключать условие по Coverage, но это по вашему усмотрению.

В дальнейшем мы расширим SAST-инструменты, показав проблему такого процесса, когда LLM полностью работает с отчётами. В рекомендации ещё для полноценной проверки можно добавить инструменты SCA (Snyk или GitHub Dependabot) и DAST (HostedScan) — примеры в скобках имеют бесплатные тарифы.

Часть 3 — Реальная проверка кода Hub, отчёты, исправления через Claude 4.6

Итак. Допустим, ваш проект уже готов к релизу, SonarQube Cloud подключён, и вы только что посмотрели на результаты первого анализа:

Текст

234 проблемы в коде!!

Жёсткий stonks, да? Это результат для проекта, когда впервые запускаешь анализ после долгой разработки (это прям база базовая, поэтому не страшитесь). Если смотреть на факты: большинство из этих 234 проблем — code smell’ы. Явные баги в проекте сравнительно редкие, но качество кода страдает именно из-за них и возможных мест, где требуется рефакторинг по мнению анализа. Поэтому нужно знать, что здесь написано в файле, иначе, если понимаем не до конца, что именно модель сгенерировала в конкретном месте, можем задеть важную часть системы/функции и т. п.

Пример, как можно устранить проблемы

Работать с проблемами и устранять их можно через любой интерфейс — IDE, API, CLI. Лично мне удобнее веб-версия Claude: можно одновременно видеть ход рассуждений модели, прикладывать скриншоты и сразу получать готовый файл. К тому же базовый план бесплатный.

Шаг 1. Пишем промпт

SonarQube Cloud сообщает о проблемах в коде. Проверь и полностью исправь файл. Твоя задача – сделать код максимально простым, читаемым и оптимизированным. При этом учитывай, что необходимо проверять предупреждения на ложные срабатывания (false positive).
Примечание: все комментарии должны быть на русском языке. Не добавляй лишние комментарии – только по функционалу. Никаких комментариев об исправлениях.

Почему такие требования к комментариям: если не указать явно, модель склонна добавлять пометки вида // FIX: исправлен nested ternary или // SONAR: S3358. Это мусор в коде — он иногда не несёт функциональной ценности и захламляет историю. К примеру, модель исправила код, но не до конца или сделала другие ошибки при изменении файла, из-за чего в нашем случае код будет ещё больше из-за комментариев = больше затрат токенов. Поэтому в идеале нужно давать файл/код с минимальными комментариями, которые прям нужны. Также стоит учесть, что LLM при исправлении может добавить NOSONAR-комментарий, из-за чего вероятно реальная проблема, например XSS, может оставаться в проекте.

Шаг 2. Код

Копируем содержимое файла/код, либо если у вас Claude подключён к GitHub — вставляем код с проблемами в чат через репозиторий. В моём случае файл был большой, и Claude автоматически переключает его в режим pasted — это нормально, контекст сохраняется.

Шаг 3. Скриншоты проблем

Переходим в SonarQube Cloud -> Issues или в Security Hotspots (если говорить по приоритету, то лучше решить сразу Security Hotspots), делаем скриншоты нужных проблем и прикладываем к сообщению:

Текст

Примерно получается так по шагам.

Важный момент: одна и та же проблема может встречаться в файле несколько раз. Например, Prefer globalThis over window у меня было 9 вхождений. Если все они видны на скриншоте — отлично. Если нет — возможно, стоит явно указать в промпте: «исправь все вхождения этой проблемы по всему файлу».

По этой же схеме проходим через Security Hotspots и остальные категории issues — делаем до тех пор, пока список не опустеет.

Текст

Спустя пару часов исправлений

В результате получаем код, который прошёл статический анализ и соответствует заданному Quality Gate. Это не значит, что он идеален, — но это значит, что он объективно лучше, чем до проверки.

Часть 4 – Внедряем дополнительные инструменты и разбираем их подводные камни

Допустим, предыдущие части пройдены: SonarQube Cloud подключён, CI/CD настроен, проблемы исправлены. Теперь усилим покрытие и добавим ещё один SAST-инструмент — Semgrep.

SonarQube Cloud хоть и покрывает многие проблемы, но всё же он ориентирован прежде всего на качество кода, тогда как для проверки безопасности предпочитают комбо инструментов. Второй инструмент для этого — Semgrep: он сфокусирован на поиске уязвимостей и больше на безопасность. При этом, как и SonarQube Cloud, он предоставляет бесплатный облачный тариф.

Регистрация и настройка Semgrep

Регистрация аналогична SonarQube Cloud. Подмечу только по интерфейсу: найденные проблемы отображаются в разделе Code, тогда как управление проектами и повторный запуск сканирований — в разделе Projects.

Запуск сканирований

В Semgrep доступно два режима анализа: стандартный (на основе правил) и «ИИ-режим». Поэтому в идеале запускаем оба режима — они могут выявить пересекающиеся, но не идентичные наборы проблем.

Текст

2 варианта скана

Сюрприз!

Здесь начинается главная проблема подхода. После того как SonarQube Cloud показал чистый результат, Semgrep обнаружил 25 проблем в тех же файлах.

Это демонстрирует, почему несколько сканеров дополняют друг друга: каждый инструмент работает по своему набору правил и эвристик, и зоны покрытия у них пересекаются лишь частично.

Текст

SonarQube Cloud чистый

Текст

Semgrep показывает 24 проблемы в проекте

Задача усложняется: нужно исправить то, что нашёл Semgrep, не сломав при этом то, что уже устроило SonarQube Cloud. Это принципиальный момент при работе с несколькими сканерами — исправление под один инструмент может вызвать новые предупреждения в другом.

Попытаемся дать эту таску Claude.

Текст

Выдаём задачу LLM-ке

Итог: модель возвращает исправленный файл. Коммитим, запускаем повторное сканирование и… ничего. Проблемы никуда не делись.

Это нередкая ситуация: Semgrep работает по строгим паттернам, и если исправление семантически корректно, но не соответствует ожидаемому паттерну правила — сканер по-прежнему будет его отмечать. В таких случаях стоит попробовать использовать встроенный ИИ-автофикс самого Semgrep, который сделает pull request нам в репо, и проблема снимется.

Автофикс через Semgrep

Чтобы Semgrep мог делать правки напрямую в репозиторий, нужно выдать ему права на read and write Content доступ к содержимому репозитория. После этого инструмент сам создаёт pull request с исправлениями — остаётся только проверить и смержить.

Текст

Автофикс с помощью ИИ-режима.

Подмечу как пример: в ходе работы через pull request была обнаружена одна некритичная проблема, которая при ближайшем рассмотрении оказалась false positive (коммит). Это тоже часть процесса: ни один сканер (пока что) не даёт нулевого уровня ложных срабатываний, и умение их идентифицировать — такой же навык, как и исправление реальных уязвимостей.

Это небольшое напоминание о том, что стоит следить за результатами сканов после каждого коммита от Semgrep и других инструментов, во время которых может сломаться функциональность или стать ещё хуже.

Итоги

Мы смогли сделать вайб-проект намного чище и безопаснее, чем до его проверки, прошли путь от «LLM написал код и задеплоил» до воспроизводимого пайплайна, где каждый коммит проходит через несколько слоёв проверки. Это:

  • снижает количество уязвимостей и code smell’ов;

  • даёт структурированный отчёт вместо абстрактного «код плохой»;

  • встраивается в пайплайн и работает автоматически на каждый коммит.

Но нет гарантий, что SAST-анализ ловит всё. Архитектурные проблемы вроде WebSocket Auth Bypass остаются за его пределами. И текущая схема, где агент генерирует -> инструмент анализирует -> агент исправляет, — не замена code review, а лишь бафф для проекта, где код пишет в основном LLM. И лучше иметь её, чем не иметь ничего.

Про проблемы:

  1. Галлюцинации при повторных исправлениях. Codex у меня не прижился, и тому есть конкретная причина. На третьей-четвёртой итерации он начинает чудить: уязвимость формально закрыта, но где-то в другом месте файла что-то изменилось. Однажды после его правок тёмная тема стала синей. Не тёмно-синей, а прям синей. Я потратил время, чтобы понять, откуда это вообще взялось. Поэтому для длинных сессий с большим количеством файлов — Codex мой личный антирекомендейшн. С Claude такого не было, хотя она тоже не святая: если контекст раздувается, модель может попросить скинуть код заново, иначе начнёт работать по памяти о диалоге, а не по реальному файлу.

  2. «А докажи». Бывает такая ситуация: пентестер говорит «вот уязвимость», модель говорит «это false positive». Кто прав? Разбираться можно долго. Самый быстрый способ закрыть вопрос — попросить пентестера показать воспроизводимый эксплойт. Обычно после этого дискуссия заканчивается сама. Если пентестера нет и вы работаете соло — просите модель показать хотя бы команды, которыми теоретически можно активировать уязвимость. Если она не может — возможно, и правда false positive.

  3. Человек в процессе всё ещё нужен. LLM декларирует уязвимость. Не доказывает её, не воспроизводит, не показывает реальный вектор атаки — просто говорит «вот проблема». Это не то же самое, что её реально найти. Поэтому если вы соло без бэкграунда в безопасности — стоит хотя бы базово разобраться в теме, чтобы не принимать вывод модели на веру там, где она может ошибаться.

Что ещё стоит попробовать:

Если есть подозрение, что с архитектурой что-то не так, — можно дать модели полный доступ к кодовой базе и попросить провести security review без привязки к конкретным файлам. Это работает, но готовьтесь к тому, что после такого анализа начнётся новый цикл правок, а значит, снова придётся запускать сканеры.

Из интересных связок, которые я не рассматривал подробно: CodeFactor + SonarQube Cloud. Они покрывают немного разные классы проблем, CodeFactor шумнее по false positive, но иногда ловит то, что SonarQube пропускает.

И последнее — почему только облако. Просто хотелось показать, что это доступно без сервера, без настройки инфраструктуры, бесплатно, прямо сейчас. Если проект попадает под бесплатные тарифы — это нулевой порог входа для нормального анализа.

© 2026 ООО «МТ ФИНАНС»