Verifique o seu projeto Supabase com 45 regras OWASP Top 10:2025 e mais
Ligue um projeto só em leitura e receba um relatório com nota e a correção de cada problema, nesta mesma página.
Para equipas que desenvolvem com Lovable, Bolt, Cursor ou v0 sobre Supabase. Grátis, sem registo.
Grátis, sem registo. Só leitura: nada no seu projeto é alterado.
- Ligue o SupabaseAprove o acesso só de leitura em supabase.com.
- Executamos 45 verificaçõesAcessos e RLS, autenticação, armazenamento e funções, infraestrutura. Apenas o catálogo e as definições, nunca as suas linhas.
- Relatório e um prompt para o seu agente de IAUma correção para cada problema e um prompt para colar no Cursor, Claude Code ou Lovable. Só é guardado se o partilhar.
A carregar os seus projetos Supabase…
Escolha um projeto para analisar
20 letras minúsculas, como em supabase.com/dashboard/project/a-sua-referencia.
Confirme que é uma pessoa
Isto mantém as análises automáticas fora do serviço.
Registo da análise
O que a verificação consegue ver
Lemos
- Catálogo da base de dados: tabelas, indicadores de RLS, políticas, permissões, vistas, funções, extensões, papéis e quem pode ler o Vault
- Definições de auth: regras de palavra-passe, confirmação de email, MFA, URLs de redirecionamento
- Storage: a lista de buckets, quais são públicos e os seus limites de tamanho e tipo de ficheiro
- Edge Functions: a lista e a definição de JWT de cada uma
- Definições do projeto: versão do Postgres, cópias de segurança, SSL, restrições de rede, limite de linhas da Data API
Nunca lemos
- As linhas das suas tabelas
- Chaves de API e segredos: o Supabase inclui algumas nas respostas de definições, e a verificação descarta-as à chegada, sem as guardar, registar nem mostrar
- Os ficheiros guardados nos seus buckets
- O código da sua aplicação e o seu repositório
Um relatório só é guardado quando cria uma ligação de partilha, durante 7 dias no máximo. O acesso concedido é revogado logo a seguir à verificação.
O que o acesso de leitura não consegue verificar
- A06 Conceção insegura e A10 Tratamento incorreto de condições excecionais estão no código da sua aplicação, não nas definições do projeto.
- As dependências do frontend (a parte npm do A03) e uma chave service_role incluída no código do frontend. Verifique o seu repositório.
- Regras de acesso que existem só no código da aplicação ou em Edge Functions, como uma verificação de plan = 'pro' no frontend. A análise só vê colunas que a própria base de dados usa em políticas, funções e auth hooks, por isso um resultado aprovado para colunas de acesso editáveis não significa que essas colunas estejam seguras.
- Se um utilizador com sessão iniciada consegue ler as linhas de outro utilizador. Isso exige um teste com dois utilizadores reais: como testar o RLS do Supabase
Supabase Security Advisor e esta verificação
| Pergunta | Security Advisor | Esta verificação |
|---|---|---|
| Onde corre | No painel do Supabase, um projeto de cada vez | Nesta página, após um OAuth só de leitura, para o projeto que escolher |
| O que lê | Lints da base de dados | Os mesmos lints como uma só verificação, mais auth, storage, Edge Functions, cópias de segurança e definições de rede |
| Como os resultados são agrupados | Por lint | Por OWASP Top 10:2025, com as categorias que não consegue verificar indicadas |
| O que recebe para corrigir | Uma ligação para a documentação do lint | SQL ou a definição do painel para cada problema, e um prompt para o seu agente de IA |
| O que pode guardar | A lista no seu painel | Um PDF, ou uma ligação de partilha que expira ao fim de 7 dias |
Cobertura do OWASP Top 10:2025
| Categoria | Verificações | Estado |
|---|---|---|
| A01 Controlo de acesso quebrado | 18 | Coberta |
| A02 Configuração de segurança incorreta | 9 | Coberta |
| A03 Falhas na cadeia de fornecimento de software | 2 | Parcial Apenas a versão do Postgres e as extensões. As dependências npm estão no seu repositório. |
| A04 Falhas criptográficas | 4 | Coberta |
| A05 Injeção | 1 | Coberta |
| A06 Conceção insegura | 0 | Não verificável A conceção insegura está na forma como a sua aplicação funciona, não nas definições. |
| A07 Falhas de autenticação | 8 | Coberta |
| A08 Falhas de integridade de software ou dados | 1 | Coberta |
| A09 Falhas de registo e alerta de segurança | 2 | Coberta |
| A10 Tratamento incorreto de condições excecionais | 0 | Não verificável O tratamento de erros está no código da sua aplicação, que o acesso de leitura nunca vê. |
As 45 verificações
| Verificação | ID | OWASP | Pior caso |
|---|---|---|---|
| RLS desativado em tabelas expostas | rls_disabled_exposed | A01 | Crítica |
| Políticas que permitem todas as linhas | policy_always_true | A01 | Alta |
| Políticas que confiam nos metadados do utilizador | policy_uses_user_metadata | A01 | Alta |
| Políticas de escrita abertas a visitantes anónimos | anon_write_policies | A01 | Alta |
| Vistas que contornam o RLS | views_without_security_invoker | A01 | Alta |
| Vistas materializadas ou tabelas externas na API | matviews_or_foreign_tables_exposed | A01 | Média |
| Funções security definer chamáveis a partir da API | security_definer_executable | A01 | Alta |
| Políticas de storage abertas a visitantes anónimos | storage_objects_anon_policies | A01 | Alta |
| Buckets de storage públicos | public_buckets | A01 | Baixa |
| Canais privados do Realtime sem proteção | realtime_messages_rls | A01 | Alta |
| Permissões de escrita sem uso para visitantes anónimos | anon_table_grants_write | A01 | Baixa |
| Papéis que contornam o RLS | roles_bypass_rls | A01 | Alta |
| Colunas de acesso que os utilizadores com sessão iniciada podem alterar | authz_columns_writable | A01 | Alta |
| Apagar e voltar a inserir altera uma coluna protegida | delete_insert_bypass | A01 | Alta |
| Privilégios de tabela desnecessários para utilizadores com sessão iniciada | authenticated_table_grants_extra | A01 | Baixa |
| Privilégios por omissão que abrem novos objetos à API | default_privileges_api_roles | A01 | Baixa |
| Funções security definer que verificam current_user | definer_checks_current_user | A01 | Média |
| Políticas sem papel ou sem comando | policies_without_to_or_for | A01 | Baixa |
| Problemas do Security Advisor do Supabase | advisor_lints | A02 | Alta |
| Esquemas adicionais expostos na Data API | extra_exposed_schemas | A02 | Alta |
| Carateres universais nos URLs de redirecionamento | redirect_wildcards | A02 | Média |
| URLs de redirecionamento com http ou para localhost | insecure_redirect_urls | A02 | Média |
| Inícios de sessão anónimos ativos | anonymous_signins_enabled | A02 | Média |
| CAPTCHA desativado no registo e no início de sessão | captcha_disabled | A02 | Média |
| Base de dados aberta a qualquer endereço IP | network_open | A02 | Média |
| Buckets públicos sem limites de upload | public_bucket_no_limits | A02 | Baixa |
| Sem limite de linhas nas respostas da Data API | postgrest_max_rows | A02 | Média |
| Atualização do Postgres disponível | postgres_upgrade_available | A03 | Média |
| Extensões instaladas | extensions_listed | A03 | Info |
| SSL não obrigatório nas ligações à base de dados | ssl_enforcement_off | A04 | Média |
| Tokens de acesso válidos por mais de uma hora | jwt_expiry_long | A04 | Média |
| Colunas de aspeto sensível legíveis por visitantes anónimos | sensitive_columns_exposed | A04 | Alta |
| Segredos do Vault legíveis pelos papéis da API | vault_secrets_exposed | A04 | Crítica |
| SQL dinâmico construído a partir de cadeias de texto | dynamic_sql_concat | A05 | Média |
| Comprimento mínimo de palavra-passe curto | password_min_length | A07 | Alta |
| Proteção contra palavras-passe divulgadas desativada | leaked_password_protection_off | A07 | Média |
| Confirmação de email desativada | email_confirm_off | A07 | Alta |
| Alteração segura de email desativada | secure_email_change_off | A07 | Média |
| Códigos de uso único válidos por mais de uma hora | otp_expiry_long | A07 | Média |
| Nenhum método multifator ativo | mfa_unavailable | A07 | Média |
| Rotação de refresh tokens desativada | refresh_token_rotation_off | A07 | Média |
| Alteração de palavra-passe sem nova autenticação | password_change_no_reauth | A07 | Baixa |
| Edge Functions sem verificação de JWT | edge_functions_without_jwt | A08 | Baixa |
| pgaudit não instalado | pgaudit_missing | A09 | Info |
| Não foram encontradas cópias de segurança | backups_or_pitr | A09 | Média |
Perguntas
Em que difere do Security Advisor do Supabase?
Os resultados do Security Advisor são uma das verificações. A análise acrescenta as definições de auth, as políticas de storage, as Edge Functions, as cópias de segurança e as definições de rede, agrupa tudo segundo o OWASP Top 10:2025 e dá uma correção para cada problema.
O Supabase é seguro por predefinição?
A plataforma é mantida pelo Supabase, mas as regras de acesso são suas. Uma tabela nova criada com SQL simples tem o Row Level Security desativado, e uma política escrita como using (true) deixa qualquer pessoa com a chave anon ler a tabela. A análise procura exatamente estas definições.
O que significa «RLS desativado» e como o ativo?
Com o RLS desativado numa tabela de um esquema exposto, qualquer pessoa com a sua chave anon consegue ler todas as linhas através da Data API. Ative-o com alter table public.a_sua_tabela enable row level security; e depois adicione as políticas do acesso que pretende.
É seguro ter a chave anon do Supabase no navegador?
Sim, a chave anon (publicável) foi pensada para ser pública. Só pode fazer o que as suas permissões e políticas de RLS permitirem, e é por isso que a análise as verifica. A chave service_role ignora o RLS e nunca deve chegar ao navegador.
Verifique o seu próprio projeto
Grátis e só de leitura. O relatório aparece nesta página.
Verificar o meu projeto Supabase