Используйте контрольный список безопасности Claude Code, чтобы быстро и конкретно проверить аутентификацию, валидацию входных данных, обращение с секретами и поверхности для инъекций в веб‑приложениях.

Лёгкая проверка безопасности — это быстрый обзор (обычно 30–60 минут), цель которого — найти очевидные, высокоэффективные проблемы до релиза. Это не полный аудит. Представьте это как обход безопасности: вы просматриваете те пути, которые чаще всего дают сбои в реальных приложениях, и ищете доказательства, а не догадки.
Этот контрольный список Claude Code фокусируется на областях, которые чаще всего ломаются в повседневных веб‑приложениях:
Он не пытается доказать отсутствие багов, моделировать сложных угрозщиков или заменить тесты на проникновение.
«Конкретные находки» означают, что каждая запись содержит доказательства, по которым разработчик сможет действовать немедленно. Для каждой находки зафиксируйте:
ИИ — помощник, а не авторитет. Используйте его для поиска, суммаризации и предложений тестов. Затем проверяйте, читая код и, по возможности, воспроизводя запросы. Если модель не может указать конкретные места и шаги, относитесь к утверждению как к неподтверждённому.
Быстрая проверка работает, только если вы сужаете цель. Прежде чем попросить Claude Code что‑то просмотреть, решите, что вы пытаетесь доказать сегодня и что не проверяете.
Начните с 1–3 реальных сценариев пользователя, где ошибки стоят денег, раскрывают данные или дают власть. Хорошие кандидаты: вход в систему, сброс пароля, оформление заказа и экраны редактирования администратора.
Далее назовите активы, которые нужно защитить. Будьте конкретны: учётные записи пользователей, операции с платежами, персональные данные, операции только для админов.
Затем запишите ваши предположения об угрозах простыми словами. Вы защищаетесь от любопытного пользователя, запускающего клики, внешнего атакующего со скриптами или инсайдера с частичным доступом? Ответ меняет то, что считается «достаточно хорошо».
Наконец, определите критерии «пройдено» и «провалено», чтобы spot‑check завершился находками, а не ощущениями. Простые правила работают:
Если вы не можете описать, как выглядит провал, область всё ещё слишком размытa.
Проверка сработает только если модель смотрит в правильные места. Соберите небольшой набор кода и заметок, чтобы обзор выдал доказательства, а не догадки.
Начните с передачи критического для безопасности пути: точки входа запросов и кода, который решает, кто пользователь и что ему разрешено. Включите достаточный объём окружающего кода, чтобы показать, как данные текут.
Практичный пакет обычно включает:
Добавьте пару строк с информацией об окружении, чтобы предположения были явными: сессии vs JWT, где живут токены (cookie или заголовок), поведение обратного прокси или API‑шлюза, очереди/cron‑воркеры и любые «только внутренние» эндпоинты.
Перед тем как искать баги, попросите инвентаризацию: точки входа, привилегированные эндпоинты и хранилища данных, с которыми работают. Это предотвращает пропуски поверхностей.
Также согласуйте формат вывода, который вынуждает давать конкретные находки. Простая таблица работает хорошо: Находка, Серьёзность, Затронутый эндпоинт/файл, Доказательства (точный фрагмент или диапазон строк), Сценарий эксплуатации, Предложение исправления.
Разбейте по времени:
Цель — не идеальное покрытие. Это небольшой набор проверяемых находок.
Держите приложение открытым, пока читаете. Пройдитесь по UI и посмотрите, какие запросы отправляются. Заметки должны указывать на конкретные эндпоинты, параметры и источники данных.
Рабочий процесс, уместный в одной сессии:
Полезная привычка: для каждого «кажется в порядке» запишите, как бы вы это сломали. Если вы не можете описать способ взлома, вероятно, вы не проверили это достаточно тщательно.
Аутентификация — момент, когда приложение решает: «этот запрос принадлежит этому человеку». Быстрая проверка не требует чтения каждой строки. Нужно найти место, где устанавливается личность, и проверить обходные пути и пути отказа.
Найдите границу доверия: где личность впервые создаётся или принимается? Это может быть cookie сессии, JWT Bearer токен, API‑ключ или mTLS на краю. Попросите Claude Code указать точный файл и функцию, которая превращает «аноним» в user id, и перечислить все другие пути, которые это же делают.
Проверки аутентификации, на которые стоит взглянуть:
Практический пример: если письма для сброса пароля возвращают «аккаунт не найден», это быстрая проблема перечисления. Даже при нейтральном сообщении, различия по таймингу могут выдавать ту же информацию — проверьте время ответа.
Авторизация — вопрос, который приносит наибольший вред при ошибках: «Разрешено ли этому пользователю выполнить это действие над этим ресурсом?» Быстрая проверка должна намеренно пытаться сломать это предположение.
Опишите роли и права простым человеческим языком. Держите это понятно:
Затем проверьте, что каждое чувствительное действие проверяет авторизацию на сервере, а не только в интерфейсе. Кнопки могут быть скрыты, маршруты — заблокированы в клиенте, но атакующий всё ещё может вызвать API напрямую.
Быстрый скан, который обычно находит реальные проблемы:
Классический запах IDOR прост: запрос вроде GET /projects/{id}, где {id} контролируется пользователем, и сервер загружает ресурс без проверки, что он принадлежит текущему пользователю или тенанту.
Промпт, который заставит дать реальный ответ:
«Для этого эндпоинта покажите точный код решения о доступе и перечислите конкретные условия, при которых пользователь из другого orgId сможет получить доступ. Если таких нет, объясните почему, с указанием файлов и функций.»
Большинство быстрых проблем веб‑приложений начинается с пропуска: приложение принимает входные данные, которых разработчик не ожидал. Рассматривайте «вход» как всё, чем может управлять пользователь или другая система, даже если это кажется безобидным.
Начните с перечисления входов для проверяемого эндпоинта:
Валидация должна происходить как можно ближе к точке входа в приложение, а не глубоко в бизнес‑логике. Проверьте базовые вещи: тип (строка vs число), максимальная длина, обязательность и формат (email, UUID, дата).
Для известных значений, таких как роли, статусные поля или направления сортировки, предпочитайте allowlist. Это сложнее обойти, чем «блокировать несколько плохих значений».
Также проверьте обработку ошибок. Если приложение отклоняет вход, не возвращайте сырой ввод в ответе, логах или UI. Именно так мелкие баги в валидации превращаются в утечки данных или помощников для инъекций.
План «плохого ввода» для рискованных эндпоинтов (логин, поиск, загрузка, админ‑действия):
Пример: параметр сортировки, принимающий любую строку, может превратиться в фрагмент SQL позже. Allowlist вроде "date" или "price" предотвращает такой класс ошибок заранее.
Большинство быстрых ревью находят проблемы в одних и тех же местах: где входные данные интерпретируются как код, запрос, путь или URL. Здесь вы ищете моменты «ввод пересекает границу доверия».
Прослеживайте данные от точек входа (query params, заголовки, cookie, загрузки, админ‑формы) до того места, где они используются.
Ищите эти паттерны и требуйте конкретного места вызова и примера полезной нагрузки для каждого:
ORDER BY, и построители IN (...), которые склеивают пользовательские значенияconvert, которые получают флаги от пользователяТакже следите за десериализацией и инъекциями шаблонов. Всё, что парсит пользовательский JSON, YAML или шаблонные строки, может скрывать риск, особенно если поддерживаются кастомные типы, выражения или серверный рендеринг.
Если функция принимает URL, имя файла или форматированный текст, предполагайте возможность злоупотребления, пока не докажете обратное кодовыми путями и тестами.
Проблемы с секретами часто громко проявляются, если знать, где смотреть. Сфокусируйтесь на том, где секреты живут и куда они случайно копируются.
Типичные места появления секретов:
Потом требуйте конкретного ответа: если секрет раскрыт сегодня, что будет дальше? Хорошая система имеет путь ротации (выдача нового ключа), отзыва (деактивация старого) и быструю процедуру деплоя. Если ответ «мы поменяем позже», трактуйте это как находку.
Принцип наименьших привилегий — ещё одно быстрое улучшение. Инциденты усугубляются из‑за чрезмерных прав. Ищите пользователей БД, которые могут удалять таблицы, токены третьих сторон с управленческими правами или ключи, используемые в разных окружениях. Предпочитайте по одному ключу на сервис/окружение с минимальным набором прав.
Быстрые промпты для spot‑check, которые можно скопировать в Claude Code:
Наконец, подтвердите защитные меры: блокируйте секреты в системе контроля версий (pre‑commit/CI проверки) и убедитесь, что бэкапы или снимки не содержат открытых учётных данных. Если платформа поддерживает снимки и откаты, проверьте, что секреты внедряются во время выполнения, а не вшиваются в образ.
Незначительные промпты дают расплывчатые ответы. Заставьте модель взять на себя обязательство: точные места, трассировка, repro и что опровергло бы вывод.
Используйте по одному шаблону за раз, затем попросите переработать после того, как вы подтвердите или отклоните деталь.
Если вывод всё ещё кажется расплывчатым, зафиксируйте его:
«Отвечай только: путь файла, имя функции, рискованная строка и одно предложение об эффекте.»
Эндпоинты обновления профиля часто скрывают ошибки контроля доступа. Вот небольшой кейс, который можно пройти через чеклист.
Сценарий: API‑эндпоинт обновляет профиль пользователя:
PATCH /api/profile?accountId=123 с JSON вроде { "displayName": "Sam" }.
Вы просите Claude Code найти обработчик, проследить использование accountId и доказать, проверяет ли сервер владение.
Что часто всплывает:
accountId из строки запроса и обновляет этот аккаунт без проверки, что он совпадает с залогиненным пользователем.displayName обрезается, но accountId не валидируется как целое число."... WHERE account_id=" + accountId.Хороший отчёт будет конкретным:
accountId; SQL формируется из ненадёжного вводаaccountId от клиента, использовать id аутентифицированного пользователя на сервере; параметризовать запросaccountIdПосле патча быстро повторно проверьте:
accountId и подтвердите отказ.Самый быстрый путь пропустить уязвимость — доверять тому, что кажется соблюдённым в UI. Скрытая или отключённая кнопка — не проверка прав. Если сервер всё равно принимает запрос, любой может повторить его с другим user ID, ролью или напрямую через API.
Ещё одна частая ошибка — расплывчатая постановка задачи. «Сделай ревью безопасности» обычно даёт общий отчёт. Spot‑check нуждается в жёсткой области (какие эндпоинты, какие роли, какие данные) и строгом формате вывода (имя файла, функция, рискованная строка, минимальный repro).
То же правило для ИИ‑вывода: не принимайте утверждения без указаний. Если находка не содержит конкретного места в коде и пошагового способа триггера, считайте её неподтверждённой.
Эти ловушки повторяются:
Если вы замечаете, что постоянно добавляете фильтры для новых краёв, остановитесь. Исправление обычно проще и раньше: валидируйте ввод на границе и сделайте проверки авторизации явными и централизованными, чтобы все пути их использовали.
Это не заменяет полный ревью, но ловит ошибки, которые проскакивают, когда все устали. Сосредоточьтесь на том, что можно быстро доказать: запрос, страницу или строку лога.
Пять быстрых spot‑checks, которые обычно окупаются:
Запишите топ‑3 исправления, которые вы можете выпустить на этой неделе, а не список желаний. Пример: (1) добавить rate limiting для логина и сброса пароля, (2) принудительно проверять владение на эндпоинте «get by id» на сервере, (3) ограничить длину ввода и отклонять неожиданные символы в поле поиска.
Spot‑check даёт результат только если находки влияют на то, что вы выпускаете. Относитесь к этому чеклисту как к небольшому повторяемому шагу сборки, а не к одноразовой спасательной операции.
Преобразуйте каждую находку в задачу в бэклоге, понятную и с доказательствами:
Выберите ритм, соответствующий риску и размеру команды. Для многих команд лучше — каждой релиз. Если релизы частые, делайте 30–60‑минутное ревью ежемесячно и короткую проверку перед релизом.
Упростите повторение, создав переиспользуемый пакет промптов и шаблон чеклиста. Держите промпты сфокусированными на конкретных результатах: покажи маршрут, проверку, падающий запрос и ожидаемое поведение. Храните пакет там, где команда уже работает, чтобы он не терялся.
Если вы строите приложения через чат, встраивайте чеклист в планирование. Добавляйте короткую заметку о «безопасных предположениях» для аутентификации/авторизации, вводов и секретов, а затем запускайте spot‑check сразу после первой рабочей версии.
Платформы вроде Koder.ai (koder.ai) хорошо вписываются в эту привычку, потому что позволяют быстро итератировать, сохраняя контрольные точки ревью. Использование снимков состояния и откатов вокруг рискованных изменений упрощает выпуск исправлений безопасности без остановки, если что‑то ломается.