← BACK TO UPDATES

POR QUE TODO PROJETO LOVABLE PRECISA DE TESTE DE SEGURANÇA

Construir com IA é incrivelmente rápido, mas seus projetos Lovable estão seguros? Este é tudo que você precisa saber para proteger suas aplicações geradas por IA.

0
Apps escaneados
0
Vulnerabilidades encontradas
0
Desenvolvedores confiam no VibeEval

TESTE SEU PROJETO LOVABLE AGORA

Digite a URL do seu app Lovable em produção para checar vulnerabilidades.

Dado rápido: Mais de 76% das aplicações web têm ao menos uma vulnerabilidade séria. Quando você está construindo rápido com IA, teste de segurança fica ainda mais crítico.

O risco escondido no desenvolvimento com IA

Me entenda bem — o Lovable é incrível. Dá para construir aplicações inteiras em horas que antes levavam semanas. Mas tem uma coisa de que ninguém fala: quando você está se movendo nessa velocidade, a segurança costuma ficar para trás.

Ferramentas de segurança tradicionais não foram feitas para código gerado por IA. Elas deixam passar os padrões e vulnerabilidades que emergem quando uma IA escreve boa parte da sua aplicação. Por isso construímos o Scanner de Segurança Lovable.

O que torna projetos Lovable diferentes?

Assistentes de código com IA como o Lovable revolucionaram a forma de construir aplicações web. Mas também introduzem considerações de segurança únicas que scanners tradicionais não capturam:

  • Vulnerabilidades por padrão: a IA às vezes gera padrões de código que funcionam perfeitamente mas contêm falhas sutis de segurança
  • Pontos cegos em integrações: quando a IA conecta serviços e APIs diferentes, brechas de segurança podem surgir entre componentes
  • Riscos de iteração rápida: a velocidade do desenvolvimento com IA pode fazer a dívida de segurança crescer mais rápido do que uma revisão manual consegue pegar

Problemas reais que encontramos em projetos Lovable

Depois de escanear muitos apps Lovable, identificamos vários padrões comuns que desenvolvedores precisam observar:

CONTORNOS DE AUTENTICAÇÃO

Fluxos de autenticação incompletos que permitem acesso não autorizado a rotas protegidas.

EXPOSIÇÃO DE CHAVES DE API

Credenciais sensíveis acidentalmente expostas no código client-side ou em repositórios públicos.

VAZAMENTO DE DADOS

Dados de usuário ou informações internas expostas sem querer através de respostas de API.

FALHAS DE VALIDAÇÃO

Validação ausente permite que entradas maliciosas cheguem ao backend.

Os 6 fluxos de vibe coding que mais quebram

“Vibe coding” — entregar um app funcionando conversando com uma IA e nunca lendo metade do código gerado — tem um formato previsível. Em mais de 1.430 scans Lovable, os mesmos seis fluxos respondem pela maioria dos criticals. Se você endurecesse só esses, eliminaria a maior parte dos bugs que impactam produção em apps gerados por IA.

01 / SIGNUP + SESSÃO

Anon key usada em chamadas de usuário logado. JWT guardado no localStorage sem refresh. Reset de senha que envia e-mail para endereços controlados pelo atacante porque o endpoint de update confia no client.

02 / UPLOAD DE ARQUIVO

Bucket do Supabase Storage marcado como público. Sem validação de MIME. Sem prefixo de caminho por usuário. Resultado: qualquer usuário faz upload na pasta de qualquer outro, ou sobe conteúdo executável num bucket de "images".

03 / GATE DE FEATURE PAGA

Check do plano no Stripe vive só no componente React. O endpoint real `/api/generate` ou a leitura da tabela não tem cláusula `WHERE plan = 'pro'`. Todo usuário free bate direto em todo endpoint pago.

04 / DASHBOARD ADMIN

Rota guardada por `if (user.email === 'me@x.com') showAdmin()`. A tabela `admin_audit_logs` não tem RLS. Qualquer um que adivinhe a rota ou chame o endpoint REST vira admin.

05 / EDGE FUNCTIONS

Service-role key hardcoded numa função chamável do navegador. Ou a função confia num parâmetro `user_id` em vez de extrair do JWT. Elevação total de privilégio em uma requisição.

06 / UPDATE DE PERFIL

Política de UPDATE usa `USING (auth.uid() = user_id)` mas não tem `WITH CHECK`. Usuários podem mudar o próprio `role` para `admin`, o `plan` para `enterprise` ou o `user_id` para o de outro. Teste: tente `PATCH /profiles?id=eq.me { role: "admin" }`.

Cada um desses fluxos produz o mesmo sintoma nos nossos relatórios: UI limpa, app funcionando e um achado crítico no endpoint por trás. O scanner percorre os seis automaticamente. Para mais contexto sobre por que esses padrões aparecem em código gerado por IA, veja Vibe Coding Security Checks e o baseline RLS do caso da beauty blogger.

Más configurações de RLS: a vulnerabilidade #1

Depois de escanear 1.430+ aplicações Lovable, uma vulnerabilidade se destaca acima de todas: políticas de Row Level Security (RLS) ausentes ou mal configuradas. Esse problema continua disparando em projetos Lovable novos.

O Lovable usa Supabase como banco de dados. O Supabase expõe um endpoint público de API que qualquer um pode chamar diretamente. Sem políticas de RLS, nada impede um atacante de ler cada linha do seu banco, modificar dados de outros usuários ou deletar registros completamente.

Por que isso continua acontecendo:
  • Defaults do Supabase: tabelas novas são criadas com RLS desabilitado por padrão. A IA do Lovable nem sempre ativa.
  • Gap de complexidade: escrever políticas de RLS corretas exige entender políticas do PostgreSQL, e código gerado por IA frequentemente erra.
  • Falha silenciosa: tudo funciona perfeitamente sem RLS durante o desenvolvimento. A vulnerabilidade só importa quando usuários reais estão na plataforma.
  • Várias tabelas: cada tabela nova precisa das próprias políticas de RLS. À medida que projetos crescem, tabelas são esquecidas.

As quatro checagens de RLS que toda tabela precisa

RLS não é um único interruptor. É uma política por operação, por tabela. Deixe uma escapar e a superfície de ataque continua escancarada. Nosso scanner roda as quatro em cada tabela pública que descobre:

Operação O que o scanner envia O que passa O que falha
SELECT anon GET /rest/v1/<table>?select=* 401 ou linhas com escopo Dump completo da tabela
INSERT anon POST /rest/v1/<table> com linha de probe 401 ou rejeição por política Linha escrita
UPDATE anon PATCH /rest/v1/<table>?id=eq.<row> 401 ou zero linhas afetadas Linha modificada
DELETE anon DELETE /rest/v1/<table>?id=eq.<row> 401 ou zero linhas afetadas Linha deletada

O erro comum: desenvolvedores testam SELECT, veem que está trancado e sobem. Escritas ficam escancaradas. Vemos isso em ~30% dos apps que “habilitaram RLS”.

Políticas quebradas que parecem corretas

Estas são as políticas de RLS que mais sinalizamos — elas compilam, o app funciona e a tabela ainda está exposta:

-- RUIM: sem WITH CHECK o usuário pode INSERT linhas de qualquer um
CREATE POLICY "insert own" ON posts
  FOR INSERT USING (auth.uid() = user_id);

-- RUIM: UPDATE só com USING; usuário atualiza a própria linha
-- e muda o user_id para o de outra pessoa ao mesmo tempo
CREATE POLICY "update own" ON posts
  FOR UPDATE USING (auth.uid() = user_id);

-- RUIM: lê as próprias + marcadas como públicas, sem filtro
-- de coluna — campos sensíveis em linhas "públicas" vazam
CREATE POLICY "read public or own" ON posts
  FOR SELECT USING (is_public OR auth.uid() = user_id);

-- RUIM: a clássica correção "só pra funcionar"
CREATE POLICY "allow all" ON posts FOR ALL USING (true);

As versões corrigidas — os padrões que seguram quando testados:

-- BOM: INSERT com WITH CHECK prende a nova linha ao chamador
CREATE POLICY "insert own" ON posts
  FOR INSERT WITH CHECK (auth.uid() = user_id);

-- BOM: UPDATE exige que a linha atual pertença ao chamador
-- E que a nova versão também (impede transferência de dono)
CREATE POLICY "update own" ON posts
  FOR UPDATE USING (auth.uid() = user_id)
              WITH CHECK (auth.uid() = user_id);

-- BOM: DELETE com escopo de dono
CREATE POLICY "delete own" ON posts
  FOR DELETE USING (auth.uid() = user_id);

-- BOM: SELECT explícito, sem ambiguidade
CREATE POLICY "read own" ON posts
  FOR SELECT USING (auth.uid() = user_id);

Para colunas com PII (e-mail, telefone, stripe_customer_id), prefira uma view com colunas restritas em vez de grants em nível de coluna — é mais difícil de configurar errado e mais fácil de auditar.

Teste seu RLS em 30 segundos

Você não precisa do nosso scanner para uma primeira passada. Abra seu app Lovable em produção, pegue a URL do Supabase e a anon key na aba Network e rode:

# Substitua pelo seu projeto + anon key + tabela
SUPA="https://<project>.supabase.co"
KEY="<anon_key>"
TABLE="profiles"

# Probe de leitura — deve vir vazio ou 401 deslogado
curl "$SUPA/rest/v1/$TABLE?select=*&limit=5" \
  -H "apikey: $KEY" -H "Authorization: Bearer $KEY"

# Probe de escrita — deve ser 401 ou rejeição por política
curl -X POST "$SUPA/rest/v1/$TABLE" \
  -H "apikey: $KEY" -H "Authorization: Bearer $KEY" \
  -H "Content-Type: application/json" \
  -d '{"id":"rls-probe-delete-me"}'

Se vierem linhas ou a escrita passar, você tem um crítico. Rode o Supabase RLS Checker gratuito para o relatório completo por tabela, ou cole a URL no scanner no topo desta página para a auditoria Lovable completa (auth, storage, edge functions e chaves, além de RLS).

Quando RLS não basta

RLS barra a anon key. Não barra:

  • Edge Functions usando a service-role key — essas ignoram RLS inteiro. Qualquer erro lógico dentro de uma função é leitura/escrita completa do banco.
  • JWTs vazados — se o JWT de um usuário logado vaza (XSS, um gist público, uma captura de tela), o RLS felizmente serve ao atacante o que aquele usuário veria.
  • Storage — o Storage tem regras parecidas com RLS por bucket e por objeto. São configuradas separadamente e, em apps Lovable, costumam ficar como “public bucket”.
  • Views e funções de banco — uma função SECURITY DEFINER roda com privilégios do criador, não do chamador. Se recebe um ID fornecido pelo usuário e confia, o RLS vira irrelevante.

Nosso scanner testa as quatro. Para entender o modelo de política subjacente, veja o guia de RLS do Supabase e o checklist de segurança do Supabase.

Como o Scanner de Segurança Lovable funciona

Nosso scanner foi feito especificamente para entender a arquitetura do Lovable. Isto é o que acontece quando você escaneia seu projeto:

  1. Descoberta automática: rastreamos sua aplicação para entender estrutura, rotas e funcionalidade
  2. Testes com IA: 13 agentes de IA especializados testam cenários de ataque específicos para aplicações web
  3. Detecção de vulnerabilidades: identificamos problemas de segurança, de más configurações básicas a contornos complexos de autenticação
  4. Relatórios acionáveis: explicações claras dos problemas encontrados e passos específicos para corrigir

Além do scan: cobertura de segurança completa

O Scanner de Segurança Lovable não é só sobre encontrar vulnerabilidades. É uma solução de segurança completa:

  • Testes multi-navegador: garante que seu app funcione com segurança em navegadores diferentes
  • Verificação de RLS do Supabase: teste ponta a ponta das suas políticas de Row Level Security
  • Monitoramento diário: scan contínuo para pegar problemas novos conforme seu app evolui
  • Prevenção de vazamento de dados: detecta informação sensível que pode estar exposta
  • Proteção de tokens de API: evita exposição acidental de credenciais sensíveis
  • Checks de prontidão para lançamento: validação abrangente de segurança pré-deploy
Dica pro para devs Lovable: rode um scan de segurança antes de cada deploy importante. Os 5 minutos que leva podem te salvar de um incidente que arruina sua reputação e custa milhares para consertar.

O que os desenvolvedores estão encontrando

Entre as 5.711 vulnerabilidades encontradas em 1.430+ apps escaneados, este é o ranking dos problemas mais comuns:

  1. RLS ausente em SELECT — Crítico. Presente em 85% dos scans.
  2. RLS ausente em INSERT/UPDATE/DELETE — Crítico. Presente em 51% dos scans. Normalmente sobe junto com uma política de SELECT funcional, por isso passa despercebido.
  3. Chaves de API expostas — Crítico. Presente em 62% dos scans. OpenAI, Anthropic, Stripe e Resend são as quatro mais vazadas.
  4. Contornos de autenticação — Alto. Presente em 45% dos scans. Normalmente um route guard só no frontend.
  5. Validação de entrada ausente — Alto. Presente em 38% dos scans.
  6. Bucket de Storage público — Alto. Presente em 34% dos apps Lovable que usam Storage.
  7. Gates de feature paga só no frontend — Alto. Presente em 27% dos apps monetizados.
  8. Service-role key no código client — Crítico. Raro (~4%), mas sempre é tomada total.

Começar é simples

Você não precisa ser especialista em segurança para proteger seus projetos Lovable. Cole a URL do seu app em produção acima. Em minutos, você recebe um relatório abrangente de segurança com recomendações acionáveis.

Comece com um teste gratuito de 14 dias. Sem setup longo. Só insights de segurança reais para aplicações reais.

COMMON QUESTIONS

01
O Lovable é seguro de usar?
O Lovable é uma plataforma legítima de código com IA, mas apps construídos com ele podem conter vulnerabilidades — contornos de autenticação, exposição de chaves de API e vazamento de dados. Sempre escaneie seu app Lovable antes de colocar no ar.
Q&A
02
Quais problemas de segurança são comuns em apps Lovable?
Problemas comuns incluem contornos de autenticação, chaves de API expostas no código client-side, vazamento de dados via respostas de API e validação de entrada ausente. São típicos de código gerado por IA.
Q&A
03
Como escanear meu app Lovable em busca de vulnerabilidades?
Digite a URL do seu app Lovable em produção no scanner do VibeEval. 13 agentes de IA vão testar falhas de segurança em cerca de 60 segundos. Sem cadastro para o primeiro scan.
Q&A
04
Qual é a vulnerabilidade mais comum em apps Lovable?
Políticas de Row Level Security (RLS) ausentes ou mal configuradas são a vulnerabilidade #1 em apps Lovable. Sem RLS correto, qualquer usuário pode ler, modificar ou deletar dados de outros usuários direto pela API do Supabase.
Q&A
05
Quantos apps Lovable já foram escaneados em termos de segurança?
Mais de 1.430 aplicações Lovable foram escaneadas pelo VibeEval, revelando mais de 5.711 vulnerabilidades de segurança. Os problemas mais comuns são políticas de RLS ausentes, chaves de API expostas e contornos de autenticação.
Q&A
06
Como verifico se meu RLS no Supabase está funcionando?
Abra a aba Network do seu app, copie a anon key e então faça curl direto no endpoint REST: `curl 'https://<project>.supabase.co/rest/v1/<table>?select=*' -H 'apikey: <anon>'`. Se vierem linhas sem você estar autenticado, o RLS está desligado ou a política está errada. O scanner do VibeEval faz isso para cada tabela automaticamente — inclusive probes de INSERT, UPDATE e DELETE, que a maioria dos desenvolvedores esquece de testar.
Q&A
07
RLS habilitado significa que minha tabela está segura?
Não. RLS habilitado sem políticas retorna zero linhas para a anon key, mas também zero linhas para os seus usuários logados — então desenvolvedores adicionam uma política permissiva `USING (true)` para 'fazer funcionar', e isso efetivamente desliga o RLS. RLS só é seguro quando cada política escopa as linhas explicitamente para o chamador, tipicamente via `auth.uid() = user_id`, e quando políticas de INSERT usam `WITH CHECK`, não só `USING`.
Q&A
08
Quais são os fluxos de vibe coding que mais quebram?
Os seis fluxos que mais vemos quebrados em apps Lovable são: (1) signup / gerenciamento de sessão que vaza tokens, (2) upload de arquivo para buckets públicos de Storage, (3) gate de feature paga imposto só no frontend, (4) dashboard admin protegido por condicional de UI, (5) Edge Functions invocadas com a service-role key a partir do navegador e (6) updates de perfil em que o usuário pode mudar o próprio `role` ou `user_id`.
Q&A
09
O Lovable consegue corrigir essas vulnerabilidades se eu pedir?
Às vezes. O Lovable adiciona políticas de RLS se você pedir de forma específica — ex., 'habilite RLS em cada tabela pública e restrinja leituras a auth.uid() = user_id'. Mas frequentemente escreve políticas que parecem certas e não são, especialmente para INSERT (sem WITH CHECK) e UPDATE (sem segunda condição na nova linha). Sempre rode o scan de novo depois que a IA disser que corrigiu.
Q&A
10
Funciona para apps Lovable que não usam Supabase?
Sim. O scanner cobre Firebase, Neon, PlanetScale, backends REST/GraphQL diretos e Edge Functions. As checagens de RLS só rodam quando Supabase é detectado. Testes de contorno de autenticação, exposição de chaves de API, vazamento de dados e validação de entrada rodam em todo app Lovable, independente do backend.
Q&A
11
É seguro rodar esse scan contra meu app Lovable em produção?
Sim. O scanner é principalmente de leitura: testa os mesmos endpoints que um navegador real bateria, com credenciais anon. Probes de escrita (INSERT/UPDATE/DELETE) miram tabelas com marcadores de teste detectáveis e são claramente logados. Nenhum dado de produção é exfiltrado ou armazenado — registramos apenas contagens e nomes de tabela.
Q&A

STOP GUESSING. SCAN YOUR APP.

Join the founders who shipped secure instead of shipped exposed. 14-day trial, no card.

START FREE SCAN