Controlli il suo progetto Supabase con 45 regole OWASP Top 10:2025 e altre
Colleghi un progetto in sola lettura e ottenga un report con voto e la correzione per ogni problema, direttamente in questa pagina.
Per i team che sviluppano con Lovable, Bolt, Cursor o v0 su Supabase. Gratis, senza registrazione.
Gratis, senza registrazione. In sola lettura: nel suo progetto non viene modificato nulla.
- Collegare SupabaseApprovi l’accesso in sola lettura su supabase.com.
- Eseguiamo 45 controlliAccesso e RLS, login, storage e funzioni, infrastruttura. Solo catalogo e impostazioni, mai le sue righe.
- Report e un prompt per il suo agente AIUna correzione per ogni problema e un prompt da incollare in Cursor, Claude Code o Lovable. Salvato solo se lo condivide.
Caricamento dei suoi progetti Supabase…
Scelga un progetto da analizzare
20 lettere minuscole, come in supabase.com/dashboard/project/your-ref.
Confermi di essere una persona
Così le analisi automatiche restano fuori dal servizio.
Log dell’analisi
Cosa può vedere il controllo
Leggiamo
- Catalogo del database: tabelle, flag RLS, policy, grant, view, funzioni, estensioni, ruoli e chi può leggere il Vault
- Impostazioni auth: regole delle password, conferma dell’email, MFA, URL di reindirizzamento
- Storage: l’elenco dei bucket, quali sono pubblici e i loro limiti di dimensione e tipo di file
- Edge Functions: l’elenco e l’impostazione JWT di ciascuna
- Impostazioni del progetto: versione di Postgres, backup, SSL, restrizioni di rete, limite di righe della Data API
Non leggiamo mai
- Le righe delle sue tabelle
- Chiavi API e secret: Supabase ne include alcuni nelle risposte delle impostazioni, e la scansione li scarta appena arrivano, senza archiviarli, registrarli né mostrarli
- I file salvati nei suoi bucket
- Il codice della sua app e il suo repository
Un report viene salvato solo quando crea un link di condivisione, per 7 giorni al massimo. L’accesso concesso viene revocato subito dopo il controllo.
Cosa l’accesso in lettura non può verificare
- A06 Progettazione insicura e A10 Gestione errata delle condizioni eccezionali stanno nel codice della sua app, non nelle impostazioni del progetto.
- Le dipendenze del frontend (la parte npm di A03) e una chiave service_role inclusa nel codice del frontend. Le verifichi nel suo repository.
- Le regole di accesso che esistono solo nel codice dell’app o nelle Edge Functions, come un controllo plan = 'pro' nel frontend. L’analisi vede solo le colonne che il database stesso usa in policy, funzioni e auth hook, quindi un esito positivo sulle colonne di accesso modificabili non significa che quelle colonne siano sicure.
- Se un utente autenticato può leggere le righe di un altro. Serve un test con due utenti reali: come testare RLS in Supabase
Supabase Security Advisor e questo controllo
| Domanda | Security Advisor | Questo controllo |
|---|---|---|
| Dove viene eseguito | Nella dashboard di Supabase, un progetto alla volta | In questa pagina, dopo un OAuth in sola lettura, per il progetto che sceglie |
| Cosa legge | I lint del database | Gli stessi lint come un unico controllo, più auth, storage, Edge Functions, backup e impostazioni di rete |
| Come sono raggruppati i risultati | Per lint | Per OWASP Top 10:2025, con le categorie che non può verificare indicate |
| Cosa ottiene per correggere | Un link alla documentazione del lint | SQL o l’impostazione della dashboard per ogni problema, e un prompt per il suo agente IA |
| Cosa può conservare | L’elenco nella sua dashboard | Un PDF, o un link di condivisione che scade dopo 7 giorni |
Copertura della OWASP Top 10:2025
| Categoria | Controlli | Stato |
|---|---|---|
| A01 Controllo degli accessi non funzionante | 18 | Coperta |
| A02 Configurazione errata della sicurezza | 9 | Coperta |
| A03 Falle nella catena di fornitura del software | 2 | Parziale Solo versione di Postgres ed estensioni. Le dipendenze npm stanno nel suo repository. |
| A04 Errori crittografici | 4 | Coperta |
| A05 Injection | 1 | Coperta |
| A06 Progettazione insicura | 0 | Non verificabile La progettazione insicura sta nel funzionamento della sua app, non nelle impostazioni. |
| A07 Errori di autenticazione | 8 | Coperta |
| A08 Errori di integrità di software o dati | 1 | Coperta |
| A09 Errori di logging e di allerta | 2 | Coperta |
| A10 Gestione errata delle condizioni eccezionali | 0 | Non verificabile La gestione degli errori sta nel codice della sua app, che l’accesso in lettura non vede mai. |
Tutti i 45 controlli
| Controllo | ID | OWASP | Caso peggiore |
|---|---|---|---|
| RLS disattivato su tabelle esposte | rls_disabled_exposed | A01 | Critica |
| Policy che consentono ogni riga | policy_always_true | A01 | Alta |
| Policy che si fidano di user_metadata | policy_uses_user_metadata | A01 | Alta |
| Policy di scrittura aperte ai visitatori anonimi | anon_write_policies | A01 | Alta |
| View che aggirano RLS | views_without_security_invoker | A01 | Alta |
| Viste materializzate o foreign table nell’API | matviews_or_foreign_tables_exposed | A01 | Media |
| Funzioni security definer richiamabili dall’API | security_definer_executable | A01 | Alta |
| Policy dello storage aperte ai visitatori anonimi | storage_objects_anon_policies | A01 | Alta |
| Bucket di storage pubblici | public_buckets | A01 | Bassa |
| Canali Realtime privati senza protezione | realtime_messages_rls | A01 | Alta |
| Grant di scrittura inutilizzati per visitatori anonimi | anon_table_grants_write | A01 | Bassa |
| Ruoli che aggirano RLS | roles_bypass_rls | A01 | Alta |
| Colonne di accesso che gli utenti autenticati possono modificare | authz_columns_writable | A01 | Alta |
| Eliminare e reinserire cambia una colonna protetta | delete_insert_bypass | A01 | Alta |
| Grant di tabella superflui per gli utenti autenticati | authenticated_table_grants_extra | A01 | Bassa |
| Privilegi predefiniti che aprono i nuovi oggetti all’API | default_privileges_api_roles | A01 | Bassa |
| Funzioni security definer che controllano current_user | definer_checks_current_user | A01 | Media |
| Policy senza ruolo o senza comando | policies_without_to_or_for | A01 | Bassa |
| Segnalazioni del Supabase Security Advisor | advisor_lints | A02 | Alta |
| Schemi aggiuntivi esposti nella Data API | extra_exposed_schemas | A02 | Alta |
| Wildcard negli URL di reindirizzamento | redirect_wildcards | A02 | Media |
| URL di reindirizzamento in http o verso localhost | insecure_redirect_urls | A02 | Media |
| Accessi anonimi attivi | anonymous_signins_enabled | A02 | Media |
| CAPTCHA disattivato per registrazione e accesso | captcha_disabled | A02 | Media |
| Database aperto a ogni indirizzo IP | network_open | A02 | Media |
| Bucket pubblici senza limiti di upload | public_bucket_no_limits | A02 | Bassa |
| Nessun limite di righe nelle risposte della Data API | postgrest_max_rows | A02 | Media |
| Aggiornamento di Postgres disponibile | postgres_upgrade_available | A03 | Media |
| Estensioni installate | extensions_listed | A03 | Info |
| SSL non imposto sulle connessioni al database | ssl_enforcement_off | A04 | Media |
| Token di accesso validi più di un’ora | jwt_expiry_long | A04 | Media |
| Colonne dal nome sensibile leggibili da visitatori anonimi | sensitive_columns_exposed | A04 | Alta |
| Segreti del Vault leggibili dai ruoli dell’API | vault_secrets_exposed | A04 | Critica |
| SQL dinamico costruito da stringhe | dynamic_sql_concat | A05 | Media |
| Lunghezza minima della password troppo corta | password_min_length | A07 | Alta |
| Protezione dalle password compromesse disattivata | leaked_password_protection_off | A07 | Media |
| Conferma dell’email disattivata | email_confirm_off | A07 | Alta |
| Cambio email sicuro disattivato | secure_email_change_off | A07 | Media |
| Codici monouso validi più di un’ora | otp_expiry_long | A07 | Media |
| Nessun metodo multifattore attivo | mfa_unavailable | A07 | Media |
| Rotazione dei refresh token disattivata | refresh_token_rotation_off | A07 | Media |
| Cambio password senza nuova autenticazione | password_change_no_reauth | A07 | Bassa |
| Edge Functions senza verifica del JWT | edge_functions_without_jwt | A08 | Bassa |
| pgaudit non installato | pgaudit_missing | A09 | Info |
| Nessun backup trovato | backups_or_pitr | A09 | Media |
Domande
In cosa si differenzia dal Supabase Security Advisor?
I risultati del Security Advisor sono uno dei controlli. L’analisi aggiunge impostazioni auth, policy dello storage, Edge Functions, backup e impostazioni di rete, raggruppa tutto per OWASP Top 10:2025 e dà una correzione per ogni problema.
Supabase è sicuro per impostazione predefinita?
La piattaforma è mantenuta da Supabase, ma le regole di accesso sono sue. Una tabella nuova creata con SQL puro ha Row Level Security disattivato, e una policy scritta come using (true) permette a chiunque abbia l’anon key di leggere la tabella. L’analisi cerca proprio queste impostazioni.
Cosa significa “RLS disabled” e come lo attivo?
Con RLS disattivato su una tabella di uno schema esposto, chiunque abbia la sua anon key può leggere ogni riga tramite la Data API. Lo attivi con alter table public.your_table enable row level security; poi aggiunga le policy per l’accesso che vuole.
È sicuro che la mia anon key di Supabase sia nel browser?
Sì, la chiave anon (publishable) è pensata per essere pubblica. Può fare solo ciò che consentono i suoi grant e le sue policy RLS, ed è per questo che l’analisi li verifica. La chiave service_role aggira RLS e non deve mai arrivare nel browser.
Controlli il suo progetto
Gratis e in sola lettura. Il report appare in questa pagina.
Controlla il mio progetto Supabase