Сайт из Lovable, Bolt или Cursor: что проверить до показа клиенту

Собрали сайт или приложение с помощью ИИ и скоро показывать заказчику? Девять проверок без знания кода и готовый запрос для Lovable, Bolt или Cursor.

· 6 мин чтения · Без технических знаний

Перед тем как отправить клиенту ссылку на сайт из Lovable, Bolt или Cursor, проверьте три вещи. Открывается ли он у постороннего человека и на телефоне. Нет ли в нём секретных ключей, которые видит любой посетитель. И нельзя ли без входа прочитать чужие данные: заявки, заказы, профили. На всё уходит около получаса, и почти всё делается в браузере.

Почему у сайтов, собранных ИИ, одни и те же слабые места

ИИ-конструктор старается, чтобы всё заработало. Заработало — задача выполнена. О том, что при этом оказалось на виду, он не думает, пока его прямо не спросят. Отсюда типичные проблемы:

  • Превью — ещё не сайт. В редакторе вы вошли в свой аккаунт, и многое работает «через вас». У постороннего человека опубликованная версия может вести себя иначе.
  • Ключ кладут рядом с кодом. Чтобы подключить нейросеть или оплату, нужен ключ — по сути, пароль от платного сервиса. Быстрее всего вписать его прямо в код страницы. Но этот код скачивает каждый посетитель, а значит, и ключ тоже.
  • База доверяет всем. Приложения из Lovable и Bolt часто хранят данные в Supabase — онлайн-базе данных. В ней есть защита на уровне строк (Row Level Security, RLS): правила, кто какие записи может читать. Если она выключена или правило разрешает всё всем, заявки ваших клиентов может прочитать любой. Публичный ключ базы для этого есть у каждого: он лежит в коде сайта, и так задумано.
  • Каждая правка — новая версия. Один промпт может переписать полсайта и вернуть ошибку, которую вы уже исправили.

Проверка перед показом: девять шагов

Вам понадобятся компьютер, телефон и полчаса.

  1. Откройте опубликованный адрес в режиме инкогнито. Не превью в редакторе, а ту ссылку, которую получит клиент. В Chrome это «Новое окно в режиме инкогнито»: Ctrl+Shift+N, на Mac — Cmd+Shift+N. Здесь вы не вошли ни в Lovable, ни в Bolt, ни на сам сайт. Если видите белый экран или бесконечную загрузку, то же самое увидит и клиент.
  2. Пройдите сайт как клиент — с телефона. Выключите Wi-Fi, откройте ссылку, нажмите все кнопки, откройте меню. Текст не должен вылезать за край экрана, а кнопки — налезать друг на друга. Если страница грузится долго, вставьте адрес в PageSpeed Insights: бесплатный сервис Google покажет, что именно тормозит.
  3. Проверьте, куда уходят заявки. Отправьте заявку через форму и убедитесь, что она дошла: на почту, в таблицу или в Telegram. Форма может показать «Спасибо!» и при этом никуда ничего не отправить.
  4. Попробуйте открыть закрытые страницы без входа. Скопируйте адрес админки, личного кабинета или списка заявок и вставьте его в окно инкогнито. Должна открыться страница входа. Если открылось содержимое, его видит любой, кто знает или угадает адрес.
  5. Запустите встроенную проверку конструктора. В Lovable откройте раздел безопасности проекта (Security). Быстрая проверка (Quick scan) запускается сама, когда вы открываете окно публикации, а глубокую (Deep scan) нужно запустить вручную: она просматривает весь код приложения. Разберите всё, что помечено как Critical. Подробности — в документации Lovable, она на английском. В Bolt и Cursor попросите ИИ провести такую проверку запросом из раздела ниже.
  6. Поищите секретные ключи в коде сайта. Откройте опубликованный сайт и нажмите F12 (на Mac — Cmd+Option+I): откроются инструменты разработчика. Перейдите на вкладку «Источники» (в английской версии — Sources) и нажмите Ctrl+Shift+F (на Mac — Cmd+Option+F): откроется поиск сразу по всем файлам сайта. По очереди поищите sk-proj-, sk-ant-, sk_live_ и sb_secret_. Если что-то нашлось, это ключ, который видит каждый посетитель: его нужно перевыпустить и убрать из кода. Публичный ключ Supabase (anon или publishable) в коде — это нормально. Учтите: старый секретный ключ Supabase (service_role) выглядит так же, как безопасный ключ anon, — длинная строка, начинающаяся с eyJ. На глаз их не различить, это сделают сканер или ИИ по запросу ниже.
  7. Загляните в базу. Если приложение работает на Supabase и у вас есть вход в его панель, откройте Advisors → Security Advisor. Если там написано, что у таблицы выключен RLS, эта таблица открыта для всех. Если база подключена через Lovable Cloud и отдельного входа в Supabase нет, базу смотрит быстрая проверка Lovable из шага 5. Не хотите разбираться сами — отдайте эту проверку ИИ запросом ниже.
  8. Поправьте название и превью ссылки. Отправьте ссылку на сайт себе в Telegram или WhatsApp. Если в карточке название шаблона, имя конструктора или пустое место, клиент увидит то же самое. Это же название стоит и во вкладке браузера.
  9. Если форма собирает имя, телефон или почту, подумайте о персональных данных. Если сайтом будут пользоваться граждане России, закон о персональных данных (152-ФЗ) требует опубликовать политику обработки персональных данных и получить согласие человека. С сентября 2025 года согласие нужно оформлять отдельно от других документов; на практике это отдельная галочка под формой со ссылкой на текст согласия. Закон также требует собирать и хранить такие данные в базах на территории России, а у Supabase российского региона нет. Кроме того, оператору данных, как правило, нужно заранее подать уведомление в Роскомнадзор. Это не юридическая консультация: тексты и место хранения данных лучше обсудить с юристом заказчика до запуска.

Если сайт уже работает и вопрос шире — всё ли в порядке с безопасностью вообще, — вот как проверить сайт на безопасность без программиста.

Готовый запрос для Lovable, Bolt или Cursor

Просьба «сделай безопасно» обычно даёт уверенный ответ и мало реальных правок. Конкретный список работает лучше. Вставьте этот текст в чат конструктора и подставьте свои данные в квадратных скобках:

Перед показом клиенту проверь приложение и исправь найденное.
Сначала покажи, что нашёл по каждому пункту, и только потом меняй код.

- Найди в коде секретные ключи: service_role, sb_secret_, sk_live_,
  ключи OpenAI и Anthropic, любые секреты в переменных VITE_ или
  NEXT_PUBLIC_. Перенеси вызовы, которым они нужны, на сервер
  (Supabase Edge Function или серверный маршрут) и скажи,
  какие ключи мне нужно перевыпустить.
- Включи Row Level Security на всех таблицах в схеме public.
  Пользователь читает и меняет только свои строки.
  Без входа можно читать только эти таблицы: [список или «никакие»].
- Страницы [админка, кабинет, заявки] должны открываться только
  после входа. Проверь это на сервере, а не только в интерфейсе.
- Проверь, что форма заявки действительно отправляет данные
  [на почту / в таблицу / в Telegram], и покажи, где это происходит.
- Поставь нормальные title, description и картинку для превью ссылки.
- Под формой добавь отдельную галочку согласия на обработку
  персональных данных (по умолчанию не отмеченную) со ссылкой
  на текст согласия, а в подвал — ссылку на политику обработки
  персональных данных. Без галочки форма не отправляется.

После правок пройдите шаги 1, 4 и 6 ещё раз: ИИ иногда сообщает, что всё исправил, когда исправил не всё.

Что сказать клиенту

Говорите честно и конкретно: «Сайт проверен по списку. Открывается у постороннего и на телефоне, закрытые страницы требуют входа, секретных ключей в коде нет, база закрыта правилами доступа, заявки доходят». Не обещайте, что сайт невозможно взломать: этого не может пообещать никто. Лучше сразу договоритесь, кто и как будет проверять сайт после каждой новой правки.

Каждая правка — новая проверка: ScanYourSite

Бесплатная проверка ScanYourSite делает внешнюю часть этого списка за вас: без регистрации, примерно за минуту. Она смотрит на опубликованный сайт как посетитель — не входит в аккаунты и не отправляет формы — и находит:

  • секретные ключи в коде, который получает браузер (OpenAI, Anthropic, Stripe, Supabase service_role и другие): показывает их замаскированными и называет файл, а ключ service_role отличает от безопасного ключа anon;
  • с каким проектом Supabase работает сайт;
  • недостающие заголовки безопасности, проблемы с HTTPS и срок действия сертификата;
  • ошибки и незагрузившиеся скрипты, которые видит настоящий браузер;
  • title, description и превью ссылки — в том числе после того, как страница отрисовалась;
  • счётчики аналитики, которые работают, когда на странице не найден известный сервис согласия на cookie, и есть ли ссылка на политику конфиденциальности.

Отчёт выстраивает находки по серьёзности. В бесплатной версии три самые важные объяснены простыми словами — с исправлением и готовым промптом для вашего ИИ-инструмента. Ссылка https://scanyoursite.app/ru?check=vash-sajt.ru с вашим адресом открывает страницу проверки с уже заполненным полем, а запускаете проверку вы сами, кнопкой. Её удобно поставить в конец промпта, чтобы после исправлений перепроверить сайт.

Проверка таблиц Supabase и поиск открытых файлов .env и .git есть только на Pro и только после того, как вы подтвердите, что сайт ваш: записью в DNS, файлом на сайте или метатегом на главной странице. Проверка таблиц считает строки, доступные постороннему, но никогда не читает их содержимое. Pro ($19 или €19 в месяц, три сайта) проверяет сайт каждый день и объясняет все находки. Он замечает каждую выкладку новой версии, проверяет её за несколько минут и пишет, только когда сломалось что-то новое. Бесплатный аккаунт следит за одним сайтом: проверка раз в неделю, сводка на почту и предупреждение перед окончанием сертификата. Подробнее о проверке приложений из Lovable — на отдельной странице.

Проверьте свой сайт за минуту

Бесплатно и без регистрации. Один отчёт по важности: что исправить — простыми словами — и готовые решения, которые можно передать тому, кто ведёт ваш сайт, или вставить в ваш ИИ-инструмент.

Бесплатно, без регистрации. Базовая проверка делает только те запросы, которые выполняет обычный браузер.

Для вайбкодеров