Prüfen Sie Ihr Supabase-Projekt gegen 45 Regeln der OWASP Top 10:2025 und mehr
Verbinden Sie ein Projekt mit reinem Lesezugriff und erhalten Sie direkt auf dieser Seite einen bewerteten Bericht mit der Lösung für jeden Fund.
Für Teams, die mit Lovable, Bolt, Cursor oder v0 auf Supabase bauen. Kostenlos, ohne Anmeldung.
Kostenlos, ohne Anmeldung. Nur Lesezugriff: In Ihrem Projekt wird nichts verändert.
- Supabase verbindenBestätigen Sie den Lesezugriff auf supabase.com.
- Wir führen 45 Prüfungen ausZugriff und RLS, Anmeldung, Storage und Funktionen, Infrastruktur. Nur Katalog und Einstellungen, nie Ihre Zeilen.
- Bericht und ein Prompt für Ihren KI-AgentenEine Lösung für jeden Fund und dazu ein Prompt, den Sie in Cursor, Claude Code oder Lovable einfügen. Gespeichert nur, wenn Sie ihn teilen.
Ihre Supabase-Projekte werden geladen…
Projekt für den Scan wählen
20 Kleinbuchstaben, wie in supabase.com/dashboard/project/your-ref.
Bestätigen Sie, dass Sie ein Mensch sind
So bleiben automatisierte Scans vom Dienst fern.
Scan-Protokoll
Was die Prüfung sehen kann
Wir lesen
- Datenbankkatalog: Tabellen, RLS-Flags, Policies, Grants, Views, Funktionen, Extensions, Rollen und wer den Vault lesen darf
- Auth-Einstellungen: Passwortregeln, E-Mail-Bestätigung, MFA, Redirect-URLs
- Storage: die Bucket-Liste, welche Buckets öffentlich sind und ihre Limits für Größe und Dateityp
- Edge Functions: die Liste und die JWT-Einstellung jeder Funktion
- Projekteinstellungen: Postgres-Version, Backups, SSL, Netzwerkbeschränkungen, Zeilenlimit der Data API
Wir lesen nie
- Zeilen in Ihren Tabellen
- API-Schlüssel und Secrets: Supabase liefert einige in Einstellungsantworten mit, und die Prüfung verwirft sie beim Eintreffen, ohne sie zu speichern, zu protokollieren oder anzuzeigen
- Dateien in Ihren Buckets
- Ihren App-Code und Ihr Repository
Ein Bericht wird nur gespeichert, wenn Sie einen Freigabelink erstellen, höchstens 7 Tage lang. Der Zugriff wird direkt nach der Prüfung widerrufen.
Was Lesezugriff nicht prüfen kann
- A06 Unsicheres Design und A10 Fehlerhafter Umgang mit Ausnahmesituationen stecken in Ihrem App-Code, nicht in den Projekteinstellungen.
- Frontend-Abhängigkeiten (der npm-Teil von A03) und ein im Frontend-Code gebündelter service_role-Key. Prüfen Sie dafür Ihr Repository.
- Zugriffsregeln, die nur im App-Code oder in Edge Functions stehen, etwa eine Prüfung plan = 'pro' im Frontend. Der Scan sieht nur Spalten, die die Datenbank selbst in Policies, Funktionen und Auth-Hooks nutzt, daher heißt ein Bestehen bei beschreibbaren Zugriffsspalten nicht, dass diese Spalten sicher sind.
- Ob ein angemeldeter Nutzer die Zeilen eines anderen Nutzers lesen kann. Das erfordert einen Test mit zwei echten Nutzern: Supabase RLS testen
Supabase Security Advisor und diese Prüfung
| Frage | Security Advisor | Diese Prüfung |
|---|---|---|
| Wo es läuft | Im Supabase-Dashboard, jeweils ein Projekt | Auf dieser Seite, nach OAuth mit reinem Lesezugriff, für das gewählte Projekt |
| Was gelesen wird | Datenbank-Lints | Dieselben Lints als eine Prüfung, dazu Auth, Storage, Edge Functions, Backups und Netzwerkeinstellungen |
| Wie Ergebnisse gruppiert werden | Nach Lint | Nach OWASP Top 10:2025, mit den Kategorien, die nicht prüfbar sind |
| Was Sie zur Behebung bekommen | Einen Link zur Lint-Dokumentation | SQL oder die Dashboard-Einstellung pro Fund und einen Prompt für Ihren KI-Agenten |
| Was Sie aufbewahren können | Die Liste in Ihrem Dashboard | Ein PDF oder einen Freigabelink, der nach 7 Tagen abläuft |
Abdeckung der OWASP Top 10:2025
| Kategorie | Prüfungen | Status |
|---|---|---|
| A01 Fehlerhafte Zugriffskontrolle | 18 | Abgedeckt |
| A02 Sicherheitsrelevante Fehlkonfiguration | 9 | Abgedeckt |
| A03 Fehler in der Software-Lieferkette | 2 | Teilweise Nur Postgres-Version und Extensions. npm-Abhängigkeiten liegen in Ihrem Repository. |
| A04 Kryptografische Fehler | 4 | Abgedeckt |
| A05 Injection | 1 | Abgedeckt |
| A06 Unsicheres Design | 0 | Nicht prüfbar Unsicheres Design steckt in der Funktionsweise Ihrer App, nicht in Einstellungen. |
| A07 Authentifizierungsfehler | 8 | Abgedeckt |
| A08 Fehler bei der Software- oder Datenintegrität | 1 | Abgedeckt |
| A09 Fehler bei Protokollierung und Alarmierung | 2 | Abgedeckt |
| A10 Fehlerhafter Umgang mit Ausnahmesituationen | 0 | Nicht prüfbar Fehlerbehandlung steckt in Ihrem App-Code, den ein Lesezugriff nie sieht. |
Alle 45 Prüfungen
| Prüfung | ID | OWASP | Schlimmster Fall |
|---|---|---|---|
| RLS bei exponierten Tabellen deaktiviert | rls_disabled_exposed | A01 | Kritisch |
| Policies, die jede Zeile erlauben | policy_always_true | A01 | Hoch |
| Policies, die user_metadata vertrauen | policy_uses_user_metadata | A01 | Hoch |
| Schreib-Policies für anonyme Besucher offen | anon_write_policies | A01 | Hoch |
| Views, die RLS umgehen | views_without_security_invoker | A01 | Hoch |
| Materialized Views oder Foreign Tables in der API | matviews_or_foreign_tables_exposed | A01 | Mittel |
| Security-Definer-Funktionen, die über die API aufrufbar sind | security_definer_executable | A01 | Hoch |
| Storage-Policies für anonyme Besucher offen | storage_objects_anon_policies | A01 | Hoch |
| Öffentliche Storage-Buckets | public_buckets | A01 | Niedrig |
| Private Realtime-Kanäle ohne Schutz | realtime_messages_rls | A01 | Hoch |
| Ungenutzte Schreib-Grants für anonyme Besucher | anon_table_grants_write | A01 | Niedrig |
| Rollen, die RLS umgehen | roles_bypass_rls | A01 | Hoch |
| Zugriffsspalten, die angemeldete Nutzer ändern können | authz_columns_writable | A01 | Hoch |
| Löschen und neu einfügen ändert eine geschützte Spalte | delete_insert_bypass | A01 | Hoch |
| Unnötige Tabellenrechte für angemeldete Nutzer | authenticated_table_grants_extra | A01 | Niedrig |
| Standardrechte, die neue Objekte für die API öffnen | default_privileges_api_roles | A01 | Niedrig |
| Security-Definer-Funktionen, die current_user prüfen | definer_checks_current_user | A01 | Mittel |
| Policies ohne Rolle oder Befehl | policies_without_to_or_for | A01 | Niedrig |
| Funde des Supabase Security Advisors | advisor_lints | A02 | Hoch |
| Zusätzliche Schemas in der Data API exponiert | extra_exposed_schemas | A02 | Hoch |
| Wildcards in Redirect-URLs | redirect_wildcards | A02 | Mittel |
| Redirect-URLs über http oder auf localhost | insecure_redirect_urls | A02 | Mittel |
| Anonyme Anmeldungen aktiv | anonymous_signins_enabled | A02 | Mittel |
| CAPTCHA bei Registrierung und Anmeldung aus | captcha_disabled | A02 | Mittel |
| Datenbank für jede IP-Adresse offen | network_open | A02 | Mittel |
| Öffentliche Buckets ohne Upload-Limits | public_bucket_no_limits | A02 | Niedrig |
| Kein Zeilenlimit für Antworten der Data API | postgrest_max_rows | A02 | Mittel |
| Postgres-Upgrade verfügbar | postgres_upgrade_available | A03 | Mittel |
| Installierte Extensions | extensions_listed | A03 | Info |
| SSL bei Datenbankverbindungen nicht erzwungen | ssl_enforcement_off | A04 | Mittel |
| Access-Tokens länger als eine Stunde gültig | jwt_expiry_long | A04 | Mittel |
| Für anonyme Besucher lesbare Spalten mit sensiblen Namen | sensitive_columns_exposed | A04 | Hoch |
| Vault-Secrets für API-Rollen lesbar | vault_secrets_exposed | A04 | Kritisch |
| Dynamisches SQL aus Strings | dynamic_sql_concat | A05 | Mittel |
| Kurze Mindestlänge für Passwörter | password_min_length | A07 | Hoch |
| Schutz vor geleakten Passwörtern aus | leaked_password_protection_off | A07 | Mittel |
| E-Mail-Bestätigung aus | email_confirm_off | A07 | Hoch |
| Sichere E-Mail-Änderung aus | secure_email_change_off | A07 | Mittel |
| Einmalcodes länger als eine Stunde gültig | otp_expiry_long | A07 | Mittel |
| Keine Multi-Faktor-Methode aktiviert | mfa_unavailable | A07 | Mittel |
| Rotation der Refresh-Tokens aus | refresh_token_rotation_off | A07 | Mittel |
| Passwortänderung ohne erneute Anmeldung | password_change_no_reauth | A07 | Niedrig |
| Edge Functions ohne JWT-Prüfung | edge_functions_without_jwt | A08 | Niedrig |
| pgaudit nicht installiert | pgaudit_missing | A09 | Info |
| Keine Backups gefunden | backups_or_pitr | A09 | Mittel |
Fragen
Worin unterscheidet sich das vom Supabase Security Advisor?
Die Ergebnisse des Security Advisors sind eine der Prüfungen. Der Scan ergänzt Auth-Einstellungen, Storage-Policies, Edge Functions, Backups und Netzwerkeinstellungen, gruppiert alles nach OWASP Top 10:2025 und liefert für jeden Fund eine Lösung.
Ist Supabase standardmäßig sicher?
Die Plattform wird von Supabase betrieben, die Zugriffsregeln aber legen Sie fest. Eine mit reinem SQL angelegte Tabelle hat Row Level Security zunächst aus, und eine Policy mit using (true) lässt jeden mit dem anon key die Tabelle lesen. Genau solche Einstellungen sucht der Scan.
Was bedeutet „RLS disabled“, und wie aktiviere ich es?
Ist RLS bei einer Tabelle in einem exponierten Schema deaktiviert, kann jeder mit Ihrem anon key über die Data API jede Zeile lesen. Aktivieren Sie es mit alter table public.your_table enable row level security; und legen Sie danach Policies für den gewünschten Zugriff an.
Ist es unbedenklich, dass mein Supabase anon key im Browser liegt?
Ja, der anon-Key (publishable) ist dafür gedacht, öffentlich zu sein. Er kann nur tun, was Ihre Grants und RLS-Policies erlauben, weshalb der Scan genau diese prüft. Der service_role-Key umgeht RLS und darf nie in den Browser gelangen.
Prüfen Sie Ihr eigenes Projekt
Kostenlos und nur lesend. Der Bericht erscheint auf dieser Seite.
Mein Supabase-Projekt prüfen