Ломайте код и план до релиза четырьмя проходами
Adversarial-ревью кода или плана: попытка 'сломать' решение, найти уязвимости, race conditions, edge-кейсы. Используйте как дополнение к обычному ревью для критичных компонентов.
Как агент работает
Первый проход смотрит на решение глазами злонамеренного пользователя: SQL-инъекции в каждом поле ввода, XSS в каждом выводе, IDOR через подмену идентификатора в запросе, обход авторизации и доступ к чужим ресурсам, подделка межсайтовых запросов, загрузка исполняемого файла под видом картинки и тысяча запросов в секунду в обход rate limiting.
Второй проход ищет гонки: что будет, если два процесса делают одно и то же одновременно. Двойной клик по кнопке оплаты, две открытые вкладки с одной формой, параллельные запросы к одному ресурсу, read-modify-write без блокировки, обновление кеша прямо во время чтения — классы дефектов, которые не видны в обычном прогоне и всплывают только под нагрузкой.
Третий проход подаёт данные на краю допустимого: пустая строка, null и undefined, максимально длинная строка вроде десяти мегабайт текста в поле имени, отрицательные числа там, где ожидаются положительные, Unicode с эмодзи, RTL-текстом и zero-width символами, даты 29 февраля, 2099 год и epoch 0, коллекции из нуля, одного и миллиона элементов.
Четвёртый проход выключает инфраструктуру по одному узлу: база данных недоступна, Redis упал, внешний API отвечает пятисотой, сеть теряется в середине запроса, кончился диск, кончилась память, DNS не резолвится, истёк сертификат. Проверяется не наличие обработчика, а поведение системы в этот момент — что видит пользователь и в каком состоянии остаются данные.
Это дополнение к обычному ревью, а не замена ему: обычное проверяет, что код делает задуманное, а adversarial-проход пытается его сломать, поэтому его имеет смысл тратить на критичные компоненты — оплату, авторизацию, интеграции. На вход годится и код, и pull request, и ещё не реализованный план решения, а разбор плана обходится дешевле всего.
Примеры задач
«Сломать» код перед релизом
Агент атакует решение как злонамеренный пользователь: инъекции в поля ввода, XSS в выводе, подмена ID в запросах, обход авторизации, загрузка исполняемых файлов.
Гонки и параллельность
Двойной клик на оплату, две вкладки с одной формой, read-modify-write без блокировки — сценарии, в которых код ломается только под нагрузкой.
Граничные условия и сбои инфраструктуры
Пустые строки и null, 10 МБ текста в поле имени, 29 февраля, эмодзи и RTL — плюс поведение при падении БД, Redis и внешних API.
Вопросы и ответы
Чем это отличается от обычного код-ревью?
Обычное ревью проверяет, что код делает то, что задумано. Adversarial-ревью пытается его сломать — четырьмя проходами: злонамеренный пользователь, гонки, граничные условия, сбои инфраструктуры.
Что подать на вход?
Код, pull request или план/архитектуру решения. Ревью плана до написания кода дешевле всего — уязвимости находятся до того, как их реализовали.
В каком виде приходит результат?
Список найденных проблем, каждая — со сценарием эксплуатации, оценкой серьёзности и предложением фикса. Не «код в целом ок», а конкретные точки отказа.
Четыре прохода
Проход 1: Злонамеренный пользователь
Что если пользователь СПЕЦИАЛЬНО пытается сломать систему?
- SQL-инъекции в каждом поле ввода
- XSS в каждом выводе
- IDOR: подмена ID в запросах
- Rate limiting: 1000 запросов в секунду
- Файлы: загрузка .exe вместо .jpg
- Авторизация: доступ к чужим ресурсам
- CSRF: подделка межсайтовых запросов
Проход 2: Race conditions
Что если два процесса делают одно и то же одновременно?
- Двойной клик на кнопку оплаты
- Два tab'а с одной формой
- Параллельные запросы к одному ресурсу
- Read-modify-write без блокировки
- Кеш обновляется во время чтения
Проход 3: Граничные условия
Что если данные на краю допустимого?
- Пустая строка, null, undefined
- Максимально длинная строка (10MB текста в поле имени)
- Отрицательные числа где ожидаются положительные
- Unicode: эмодзи, RTL-текст, zero-width символы
- Дата: 29 февраля, 2099 год, epoch 0
- Список: 0 элементов, 1 элемент, 1 000 000 элементов
Проход 4: Инфраструктурные сбои
Что если инфраструктура подводит?
- БД недоступна
- Redis упал
- Внешний API возвращает 500
- Сеть потеряна в середине запроса
- Диск заполнен
- Память закончилась
- DNS не резолвится
- Сертификат истёк
Похожие навыки
Попробуйте этот навык
Зарегистрируйтесь и используйте навык «Adversarial-ревью» бесплатно.