// docs / security guides / lovable checklist
Lovable security checklist: 25 items before launch
Lovable is a fast path from idea to a published full-stack app on Supabase and Vite. This checklist targets the risks that come with that stack: RLS that must be enabled and tightened on every table Lovable creates, test keys from integrations, import.meta.env leaking env vars into the Vite bundle, GitHub sync exposing secrets, and missing security headers. 25 items across secrets, database, auth, headers, deployment, and Lovable-specific gotchas.
PRE = pre-deploy (audit your source). DEPLOY = at deploy time. POST = post-deploy verification.
Секреты и ключи API (5 шт.)
Интеграция Lovable с торговой площадкой и сборка Vite могут привести к утечке переменных env в клиентский пакет, если не соблюдать осторожность.
- PRE — Audit
import.meta.envreferences. Vite отображает все переменные с префиксомVITE_какimport.meta.env.VITE_*в клиенте. Никогда не используйтеVITE_SUPABASE_SERVICE_KEYилиVITE_STRIPE_SECRET. Вместо этого используйте маршрутизацию через конечную точку только для сервера. - Интеграции PRE — Replace Lovable marketplace test keys with live restricted keys. Lovable Stripe / Resend / и т. д. иногда поставляются с ключами
sk_test_*илиpk_test_*. Прежде чем начать работу, замените их активными ключами с ограниченным доступом, которые ограничивают ущерб в случае компрометации. - PRE — Check the
.envfile is not committed. Lovable создает файл.envс ключами интеграции. Бегиgit ls-files .env. Если оно отслеживается, немедленно удалите его:git rm --cached .envи добавьте в.gitignore. - PRE — Verify GitHub sync doesn't expose service keys. Если Lovable синхронизируется с GitHub, убедитесь, что рабочий процесс GitHub Действия или настройки Vercel не отображают секреты в журналах сборки. Проверьте свои действия → Запуски рабочего процесса → щелкните запуск → посмотрите, распечатан ли какой-либо секрет.
- POST — Run Secrets in JavaScript Bundles on the deployed app. Сборка Vite Lovable может привести к утечке ключей в
import.meta.env. Пассивное сканирование их найдет.
Контроль доступа к базе данных (5 позиций)
Every table Lovable creates needs RLS enabled and tightened before production.
- PRE — Enable RLS on every public table. In Supabase Studio, Tables → for each
public.*table → the RLS toggle must be ON, with policies for each command. - PRE — Write explicit policies per table and role. Минимум: SELECT позволяет пользователю читать только те строки, где
user_id = auth.uid(). Lovable иногда генерирует таблицы без политик; вы должны добавить их. - PRE — Check Lovable's generated policies, not just the toggle. A policy such as
USING (true)keeps RLS "on" while letting every caller through. Scope each policy toauth.uid(). (FORCE ROW LEVEL SECURITYonly affects the table owner; it does not fix an open policy.) - DEPLOY — Re-verify RLS is enforced after deploy. Откройте Supabase Studio после развертывания. Переключатель RLS каждой таблицы должен быть ON. Если нет, ваша миграция не применялась.
- POST — Run a FixVibe scan on the deployed app. Check the Supabase Row-Level Security result: it shows any table an anonymous visitor can read with your public key.
Аутентификация и сеансы (4 шт.)
Lovable имеет аутентификацию Supabase Auth. Риск заключается в том, как Lovable соединяет их вместе.
- PRE — Ensure all API routes use
getUser(), notgetSession().getSession()считывает непроверенный файл cookie;getUser()подтверждает Supabase. НайдитеgetSession()в обработчиках API и замените его. - PRE — Check Lovable's generated auth handlers for token expiry. Токены Magic-link должны иметь срок действия, определяемый сервером. По умолчанию — 1 час. Не меняйте значение, если это не необходимо.
- PRE — Audit the sign-in redirect guard. Параметр запроса
nextдолжен начинаться с/, а не//. Если он отсутствует, добавьте охрану вручную. - POST — Test logout destroys the session. Войдите, выйдите из системы, проверьте файлы cookie (Инструменты разработчика → Приложение → Файлы cookie). Файл cookie сеанса необходимо удалить.
Заголовки HTTP и CSP (3 шт.)
Подсистема Vite Lovable не добавляет CSP по умолчанию. Статические хосты требуют явной настройки заголовка.
- PRE — Add security headers via your host's config. Vercel:
vercel.jsonheadersмассив. Netlify:_headersфайл. Включите CSP, HSTS, X-Frame-Options, X-Content-Type-Options. - PRE — CSP must not have
'unsafe-inline'inscript-src. Используйте одноразовые номера или хеши. Сборка Vite Lovable будет работать со строгим CSP. - POST — Run HTTP Security Headers on the deployed URL. Проверка сообщает об отсутствии заголовков и предоставляет рекомендации по исправлению для конкретной платформы.
Гигиена развертывания (5 пунктов)
Lovable hosts published apps itself (Lovable docs). If you export the code and deploy it to Vercel, Netlify or Cloudflare Pages instead, each host handles headers and env vars differently.
- DEPLOY — Scope env vars to Production only. Vercel: Настройки → Переменные среды → область действия каждой до Production. Никогда не делитесь тестовыми ключами Stripe с Preview.
- DEPLOY — Verify build logs don't echo secrets. Проверьте журналы сборки вашего поставщика развертывания. Если какой-либо секрет напечатан, он скомпрометирован.
- DEPLOY — Add security headers to
vercel.jsonor_headers. Для Vercel используйте конфигурациюheaders. Для Netlify / Cloudflare используйте файл_headersв общедоступном каталоге. - POST — Test a Vercel Preview link in a private browser window. Убедитесь, что CSP nonce обновлен для каждого запроса и присутствуют заголовки.
- POST — Rotate any test key that ever shipped to production. Даже если это клавиша
sk_test_*, поверните ее после того, как увидите ее в производстве.
Lovable-специфичные ошибки (3 шт.)
Шаблоны, уникальные для каркаса Lovable и процесса развертывания:
import.meta.envis Vite-specific and all-or-nothing. Vite специально предоставляет переменныеVITE_*в клиентском пакете. В Vite нет концепции серверного окружения без отдельной границы API. По умолчанию Lovable требует большого количества клиентов; вы должны добавить маршруты API для конфиденциальных операций.- GitHub sync can auto-commit without review. Если Lovable синхронизируется обратно на GitHub, убедитесь, что рабочий процесс не запускается автоматически без вашего согласия. В противном случае вредоносное обновление может попасть в файл main.
- Static-host headers are a different beast than middleware. Vercel, Netlify и Cloudflare Страницы обрабатывают заголовки по-разному. Если вы меняете хосты, еще раз проверьте, применена ли конфигурация вашего заголовка — платформа может не выдать вам ошибку, если заголовок не поддерживается.
Следующие шаги
Просмотрите general vibe coding security checklist, чтобы найти 51 предмета для перекрестных инструментов. Затем см. step-by-step hardening для более подробной информации о CSP, RLS и аутентификации.
