Задача. Небольшой бизнес по выгулу собак собрал приложение для записи с помощью ИИ-конструктора (React и Supabase). На демонстрации оно работало, но никто не проверял, что может сделать клиент, если отойдёт от обычного сценария.
Разбор. Десять находок, четыре из них критические. Таблица клиентов с адресами и телефонами была открыта всем. Секретный сервисный ключ лежал в коде для браузера. Цену записи отправлял браузер, поэтому прогулку можно было записать за £0. Любой мог сделать себя администратором, поправив данные своего профиля. На одного выгульщика можно было записать двоих сразу, а время хранилось как текст, поэтому 10:00 оказывалось раньше 9:00.
Исправление. Каждую проблему я сначала воспроизвела настоящей атакой на базу данных, потом исправила и атаковала снова: 16 из 16 проверок показывали проблему до исправления и ни одна после, а 20 из 20 обычных действий по-прежнему работают. Перенос данных останавливается, ничего не меняя, если встречает испорченные строки, и называет их, а прошлые злоупотребления, например запись за £0, попадают в список для владельца.
Проверено на PostgreSQL 18.3 со стандартными ролями Supabase. Бизнес и его исходный код вымышленные; проблемы типичные для сгенерированных приложений на Supabase, а интерфейс я проверяла чтением кода. Для вашего приложения первый шаг такой же: разбор доступа к данным, безопасности и сломанных сценариев с отчётом «до и после», $350, 3 дня. Исправления потом оцениваются по отчёту, по фиксированной цене за каждое.
