ИИ собрал сайт, где цену можно поменять в браузере. Как найти такие дыры до запуска
Нейросеть уверенно оставляет ключи в коде и доверяет браузеру цену товара. Разбираю девять разделов проверки из бесплатного навыка Vibe Security простыми словами и что посмотреть руками
В ролике я пообещал установку, девять разделов проверки простыми словами и что посмотреть руками. Сначала пример, с которого всё началось.
Товар за один цент
Блогер Dubibubi в ролике «9 навыков Claude, которыми я пользуюсь каждый день» (53 тысячи просмотров) описывает дыру, которую называет своей любимой.
Сайт с оплатой собран нейросетью. Когда покупатель нажимает «купить», страница сама сообщает серверу, сколько стоит товар. То есть цену называет браузер покупателя. Человек открывает инструменты разработчика, они есть в любом браузере, меняет 99 долларов на 1 цент и нажимает «купить». Платёжная система проводит платёж: ей сказали, что товар стоит цент.
По сути сайт спрашивает покупателя: «сколько вы хотели бы заплатить?».
Почему так получается
ИИ пишет рабочий код. Кнопка нажимается, оплата проходит, страница красивая. Но «работает» и «безопасно» это разные вещи, и вторую он по умолчанию не проверяет.
Типовые дыры, которые перечисляет блогер:
- ключи доступа к сервисам вписаны прямо в код, который видит любой посетитель;
- правила доступа к базе данных пропущены;
- данные входа пользователя лежат в хранилище браузера в открытом виде;
- цена определяется на стороне браузера.
Самая неприятная его мысль: ты не писал небезопасный код нарочно. Его уверенно написал ИИ, а ты уверенно нажал «одобрить».
Чем это ловят
Навык Vibe Security сделали Крис Рарок и команда Aloa. Он бесплатный, с открытой лицензией. Создан специально под ошибки, которые чаще всего вносят ИИ-помощники.
Главное отличие от запроса «проверь мой сайт на безопасность»: навык понимает, на чём собран проект. Если база на Supabase, он ищет дыры, типичные для Supabase. Если сайт на Next.js, проверяет его слабые места.
Dubibubi прогнал навык на своём проекте, который выложил за шесть недель до этого. Нашлось несколько критичных проблем.
Девять разделов проверки простыми словами
| Раздел | Что ищет | Чем грозит |
|---|---|---|
| Секреты | ключи и пароли в открытом коде | твоим ключом пользуются чужие, счёт приходит тебе |
| База данных | выключенные правила доступа | любой читает и правит чужие записи |
| Вход и права | непроверенные пропуска, данные входа в открытом виде | вход под чужим именем |
| Лимиты запросов | нет ограничений на чувствительные действия | перебор паролей, накрутка расходов |
| Оплата | цена с браузера, непроверенные уведомления об оплате | товар за цент, «оплата» без денег |
| Мобильное | ключи внутри приложения | то же, что с секретами |
| ИИ | открытые ключи моделей, небезопасная обработка ответа | чужие запросы за твой счёт |
| Выкладка | режим отладки на боевом сайте | посторонние видят внутренности |
| Доступ к данным | небезопасные запросы к базе | выгрузка или удаление базы |
Установка и запуск
Команда из описания навыка:
npx skills add https://github.com/raroque/vibe-security-skill --skill vibe-security
Второй способ: скопировать папку навыка в папку навыков проекта вручную.
Запуск: команда /vibe-security или обычный вопрос вроде «проверь код на проблемы с безопасностью».
Совет блогера: запускай после каждого крупного обновления, а не один раз.
Что проверить руками, если ты не программист
Навык полезен, но три вещи стоит понимать самому. Задай Claude эти вопросы про свой сайт и попроси ответить простыми словами.
1. Где считается цена?
Покажи, где в моём проекте определяется сумма платежа. Может ли покупатель повлиять на неё со своей стороны?
Правильный ответ: цена берётся на сервере из твоего списка товаров, а не приходит со страницы.
2. Где лежат ключи?
Найди все ключи и пароли в проекте. Какие из них попадают в код, который видит посетитель сайта?
Правильный ответ: ни одного секретного ключа в открытой части.
3. Что видит посторонний?
Представь, что ты посторонний человек без входа на сайт. Какие данные ты можешь получить и какие действия совершить?
Правильный ответ: только то, что и так публично.
Когда это касается тебя
| У тебя | Риск |
|---|---|
| Лендинг без форм и оплаты | почти нет |
| Форма заявки | утечка заявок, спам |
| Оплата на сайте | деньги и репутация |
| Личный кабинет | чужие данные клиентов |
| Бот с базой клиентов | утечка базы |
Если на сайте только текст и ссылка на мессенджер, можно не переживать. Как только появляются форма, оплата или вход, проверка обязательна.
Что делаю я
Мои сайты в основном статичные: страницы без базы и входа. Это сознательный выбор. Чем меньше движущихся частей, тем меньше ломать.
Там, где есть ключи, они лежат отдельно от проектов и не попадают в общий доступ. Оплату я бы принимал только через готовую платёжную страницу сервиса, а не через самодельную форму.
Перед запуском сайта с оплатой или формой прошу Claude сыграть за постороннего и найти, что можно сломать снаружи. Формулировка «найди, как это сломать» работает лучше, чем «проверь, всё ли хорошо».
Подробнее про то, что самоделкой делать нельзя, есть в статье люди делают программы под себя. Про ворота, которые не пускают недоделку: четыре ворот Shopify.
Частые вопросы
Навык заменяет специалиста по безопасности?
Нет. Он закрывает типовые ошибки. Для проекта с деньгами и личными данными клиентов нужен человек.
Мой сайт на конструкторе, мне это нужно?
На конструкторе за безопасность отвечает платформа. Проверка нужна тем, у кого сайт собран кодом.
Что делать, если ключ уже попал в открытый код?
Сразу отозвать его в сервисе и выпустить новый. Удалить из кода недостаточно: его могли успеть скопировать.
Продолжение в Telegram
Как я собираю сайты и что проверяю перед запуском, показываю каждый день в Telegram-канале: рилсы, статьи, воронки и все грабли по ходу. Подписывайся, там продолжение этой темы: t.me/Evgeniy_Tolstobrov
Это только фундамент. А дальше?
Как собрать первый скилл под себя, построить контент-завод, привести трафик и превратить подписчика в оплату — разбираю по шагам в Telegram. Честный дневник стройки с нуля.
📲 Зайти в канал и идти рядом 🔥