Flow Lab

Приложение на Bolt показывало все расчёты клиентов посторонним. Нашла и исправила в тот же день

Bolt собрал приложение для расчётов и предоплаты по одному запросу. Моя внешняя проверка примерно за минуту показала: любой, у кого есть публичная ссылка, может без входа прочитать все 8 расчётов клиентов. После исправления посетитель без входа видит 0 строк.

Демо я сделала сама, это не заказ клиента. Harbor Lane Mobile Detailing — вымышленный бизнес. Все имена, телефоны и адреса в приложении выдуманы, настоящие деньги через него не проходят. Приложение Bolt собрал с нуля.

Снимок экрана: приложение на Bolt показывало все расчёты клиентов посторонним. Нашла и исправила в тот же день
8 из 8расчётов клиентов мог прочитать посторонний, с телефоном и домашним адресом
Около минутыпонадобилось внешней проверке, чтобы это найти
0 строкможно прочитать без входа после исправления
В тот же деньот находки до исправления и повторной проверки
Кейс

Задача. Выездной детейлинг автомобилей отправляет клиенту расчёт ссылкой. Клиент открывает её на телефоне, соглашается и вносит предоплату, а владелец видит все статусы в панели управления. Я попросила Bolt собрать это с нуля одним запросом. Результат выглядел готовым: панель управления, список расчётов и аккуратная страница для клиента.

Проверка. Прежде чем считать приложение готовым, я смотрю на него глазами постороннего человека, у которого есть только публичная ссылка. Мой скрипт берёт из кода страницы адрес базы данных и публичный ключ (браузер каждого посетителя и так его получает) и без входа запрашивает строки из каждой таблицы. Он только читает и считает строки, а не выводит их содержимое. Весь прогон занял около минуты.

Около минутыпонадобилось внешней проверке, чтобы это найти

Находка. Bolt сделал таблицу расчётов доступной для чтения всем. Посторонний мог выгрузить 8 из 8 расчётов с именем, телефоном, почтой и домашним адресом каждого клиента, а ещё личную ссылку, по которой клиент соглашается и платит. Таблица настроек тоже была открыта, и любой мог создать учётную запись в базе данных приложения, не подтверждая почту.

Внешняя проверка до и после исправления. Она считает строки и называет столбцы, но никогда не выводит значения.
Внешняя проверка до и после исправления. Она считает строки и называет столбцы, но никогда не выводит значения.

Исправление. Я описала исправление для Bolt одним запросом. Чтение расчётов и настроек без входа убрано. Страница клиента теперь загружает один расчёт через функцию базы данных, которая проверяет ссылку, а согласие, отказ и оплата идут через функции, которые проверяют ссылку, срок действия и статус расчёта. После этого я отключила регистрацию новых пользователей в настройках Bolt Database и сделала так, чтобы по неизвестной ссылке показывалось «Quote not found» («Расчёт не найден»).

Результат. Та же проверка, повторённая в тот же день: таблицы расчётов и настроек без входа отвечают ошибкой 401 и возвращают 0 строк. Личная ссылка клиента по-прежнему открывает его расчёт на телефоне шириной 390 px и на экране компьютера, а панель владельца работает как раньше. Перед публикацией этой страницы я ещё раз запустила проверку, результат тот же.

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

Следующий шаг

Сделали приложение в Bolt или Lovable?

Пришлите мне публичную ссылку. Проверка за один день стоит от $150: что может прочитать посторонний, что ломается на телефоне и что исправить в первую очередь. Если исправление небольшое, могу сделать его на той же неделе.