[{"data":1,"prerenderedAt":375},["ShallowReactive",2],{"blog-de-can-anyone-read-your-supabase-database":3},{"id":4,"title":5,"body":6,"category":336,"cover":337,"coverAlt":337,"description":338,"draft":339,"extension":340,"faq":341,"image":357,"keywords":358,"meta":364,"navigation":365,"ogTitle":30,"path":366,"published":367,"seo":368,"stem":369,"tldr":370,"updated":367,"__hash__":374},"blog_de\u002Fblog\u002Fcan-anyone-read-your-supabase-database.md","Kann jeder deine Supabase-Datenbank lesen? 3.680 Apps im Test",{"type":7,"value":8,"toc":324},"minimark",[9,13,20,23,26,31,34,43,46,49,53,56,116,122,125,131,137,148,152,155,160,184,191,199,203,206,209,217,221,224,231,235,238,244,250,259,263,297,300,305,312],[10,11,12],"p",{},"Deine App hat einen Login. Dahinter liegen deine Nutzer, ihre Nachrichten,\nvielleicht ihre Bestellungen. Das wirkt privat, und es gibt keinen\nnaheliegenden Weg herauszufinden, ob es das auch ist. Die Supabase-Konsole ist\nkein Ort, an den du je gehen musstest.",[10,14,15,16],{},"Also haben wir es an den Apps anderer Leute gemessen. Im August 2026 haben wir\n30.998 aktive Apps gescannt, veröffentlicht mit Lovable, Base44, Replit, v0 und\nBolt, und jeder davon eine Frage gestellt: ",[17,18,19],"strong",{},"kann jeder deine Supabase-Datenbank\nohne Login lesen?",[10,21,22],{},"Bei 2.096 der 3.680 Apps, bei denen wir eine klare Antwort bekamen: ja.",[10,24,25],{},"Und hier ist der Teil, den sowohl die alarmierende als auch die beruhigende\nVersion dieser Geschichte falsch erzählt. Eine offene Tabelle ist nicht\nautomatisch ein Leck. Viele Tabellen sollen von allen gelesen werden. Welche\nTabelle es ist, entscheidet alles, und das kann nur die Person beantworten, die\ndie App gebaut hat. Deshalb fällt es auch niemandem auf: Die App funktioniert so\noder so einwandfrei.",[27,28,30],"h2",{"id":29},"kann-jeder-deine-supabase-datenbank-lesen","Kann jeder deine Supabase-Datenbank lesen?",[10,32,33],{},"Bei mehr als der Hälfte der Apps, die wir prüfen konnten, ja: Mindestens eine\nTabelle lieferte Zeilen an eine Anfrage ohne jeden Login.",[10,35,36,37,42],{},"Dass das überhaupt geht, hat nichts damit zu tun, dass etwas kaputt wäre. Deine\nApp spricht aus dem Browser deiner Besucher mit Supabase, trägt also einen\nSchlüssel bei sich, den jeder Besucher lesen kann, und dieser Schlüssel\n",[38,39,41],"a",{"href":40},"\u002Fblog\u002Fwhich-api-keys-are-safe-in-your-frontend","soll öffentlich sein",". Er nennt\ndein Projekt. Er gewährt für sich genommen nichts.",[10,44,45],{},"Was entscheidet, ob ein Fremder an deine Daten kommt, ist Row Level Security:\neine Regel pro Tabelle, die sagt, wer welche Zeilen lesen darf. Ohne Regel ist\nder Schlüssel das Einzige, was zwischen dem Internet und dieser Tabelle steht,\nund der Schlüssel steht in deiner Seite.",[10,47,48],{},"Genau das haben wir gemessen. Nicht, ob ein Schlüssel sichtbar war (das ist er\nimmer), sondern was die Datenbank tut, wenn ihn jemand benutzt.",[27,50,52],{"id":51},"wovon-die-57-ein-anteil-sind","Wovon die 57 % ein Anteil sind",[10,54,55],{},"Von einer Grundmenge, die wir dreimal verkleinert haben, und diese Verkleinerung\nzählt mehr als die Schlagzeile.",[57,58,59,72],"table",{},[60,61,62],"thead",{},[63,64,65,69],"tr",{},[66,67,68],"th",{},"Was wir gezählt haben",[66,70,71],{},"Apps",[73,74,75,84,92,100,108],"tbody",{},[63,76,77,81],{},[78,79,80],"td",{},"Gescannte und eingeordnete aktive Apps",[78,82,83],{},"30.998",[63,85,86,89],{},[78,87,88],{},"Nennen ein Supabase-Projekt in der Seite",[78,90,91],{},"8.435",[63,93,94,97],{},[78,95,96],{},"Tabelle bestätigt und eine Antwort erhalten",[78,98,99],{},"3.680",[63,101,102,105],{},[78,103,104],{},"Mindestens eine Tabelle ohne Login lesbar",[78,106,107],{},"2.096",[63,109,110,113],{},[78,111,112],{},"…und eine davon war nach Menschen benannt",[78,114,115],{},"394",[117,118],"diagram",{"alt":119,"caption":120,"src":121},"Vier Balken, alle am selben Gesamtwert gemessen, jeder schmaler als der vorige: 30.998 gescannte Apps, 8.435 mit Supabase, 3.680 mit abgeschlossener Prüfung, 2.096 mit einer für jeden lesbaren Tabelle. Rechts stehen 27 %, 44 % und 57 %, der Anteil jeder Stufe an der Stufe darüber.","Jeder Balken ist am selben Gesamtwert gemessen. Die 57 % sind ein Anteil der 3.680 Apps, die wir wirklich prüfen konnten, nicht aller gescannten Apps.","\u002Fblog\u002Fcan-anyone-read-your-supabase-database\u002Fwhat-we-measured-1600x700.png",[10,123,124],{},"Drei Dinge haben wir nicht getan. Jedes davon verschiebt die echte Zahl in die\neine oder andere Richtung, und es gehört genannt statt vergraben.",[10,126,127,130],{},[17,128,129],{},"Wir haben nur nach Tabellennamen gefragt, die wir sehen oder erraten\nkonnten."," Ein veröffentlichbarer Schlüssel darf die Tabellen eines Projekts bei\nSupabase nicht mehr auflisten. Also haben wir die Namen gelesen, die eine App im\neigenen Code nennt, und zwei Dutzend gewöhnliche ergänzt, begrenzt auf dreißig\npro App. Eine App, deren Tabellen anders heißen, als uns eingefallen ist, sieht\nfür uns sauber aus und ist es vielleicht nicht.",[10,132,133,136],{},[17,134,135],{},"Wir haben Zeilen gezählt, nie gelesen."," Jede Abfrage hat die Datenbank\ngefragt, wie viele Zeilen sie herausgeben würde, und dort aufgehört. Es wurden\nkeine Daten heruntergeladen, und keine App wird in diesem Artikel oder sonst wo\nbei uns namentlich genannt.",[10,138,139,142,143,147],{},[17,140,141],{},"Fast alle Apps, die wir prüfen konnten, waren Lovable-Apps."," Sie sind der\ngrößte Teil dessen, was wir gescannt haben, und nennen ihr Supabase-Projekt am\nehesten in der Seite. Lies das also als Messung von\n",[38,144,146],{"href":145},"\u002Fis-your-lovable-app-safe","Lovable-Apps mit Supabase",", nicht von jedem Builder.\nWo die Prüfung nicht durchlief, haben wir festgehalten, dass sie nicht durchlief.\nEine App, die wir nicht prüfen konnten, ist unbekannt, nicht sauber.",[27,149,151],{"id":150},"eine-offene-tabelle-ist-nicht-automatisch-ein-loch","Eine offene Tabelle ist nicht automatisch ein Loch",[10,153,154],{},"Von außen sieht eine für alle lesbare Tabelle gleich aus, ob darin dein\nProduktkatalog steht oder deine Kundschaft. Die Antwort ist dieselbe. Nur der\nName ist anders.",[117,156],{"alt":157,"caption":158,"src":159},"Zwei identische Anfragewege übereinander. Beide senden einen Tabellennamen, beide erhalten eine 200er-Antwort, beide bekommen fünf Zeilen zurück. Der obere Weg ist mit products beschriftet und endet mit einem grünen Haken, der untere mit profiles und endet mit einem roten Kreuz.","Gleiche Anfrage, gleiche Antwort, gegensätzliches Urteil. Nur wem die App gehört, weiß, welcher der beiden Fälle die eigene offene Tabelle ist.","\u002Fblog\u002Fcan-anyone-read-your-supabase-database\u002Fsame-answer-different-table-1600x600.png",[10,161,162,163,167,168,167,171,167,174,167,177,167,180,183],{},"Deshalb teilen wir den Befund in zwei. Bei 394 dieser Apps trug eine der\nlesbaren Tabellen einen Namen aus einer kurzen Liste, die für uns Menschen\nbedeutet: ",[164,165,166],"code",{},"users",", ",[164,169,170],{},"profiles",[164,172,173],{},"customers",[164,175,176],{},"orders",[164,178,179],{},"messages",[164,181,182],{},"invoices",". Das\nist ein Fremder, der deine Kundschaft liest, und es gehört heute repariert.",[10,185,186,187,190],{},"Die anderen 1.702 können wir von außen nicht beurteilen, und kein anderer Scanner\nkann das auch. Eine Tabelle ",[164,188,189],{},"posts"," kann ein öffentlicher Blog sein oder private\nNotizen. Du weißt, welches von beidem. Niemand, der deine App aus dem Internet\nansieht, weiß es.",[10,192,193,194,198],{},"Wenn du bei deiner eigenen App nicht raten willst: Unser kostenloser Scan prüft\ndeine Live-Seite von außen und sagt dir, welche Tabellen geantwortet haben. Er\ndauert etwa 20 Sekunden und braucht kein Konto: ",[38,195,197],{"href":196},"\u002F#scan","App scannen",".",[27,200,202],{"id":201},"warum-das-apps-trifft-die-niemand-absichtlich-geöffnet-hat","Warum das Apps trifft, die niemand absichtlich geöffnet hat",[10,204,205],{},"Weil die Reparatur, die eine kaputte App wieder zum Laufen bringt, meistens die\nist, die die Tabelle öffnet.",[10,207,208],{},"Der Ablauf sieht so aus. Row Level Security wird angeschaltet, von dir oder vom\nBuilder. Deine App zeigt sofort keine Daten mehr, denn angeschaltet ohne Regeln\nheißt, dass die Datenbank alle abweist, dich eingeschlossen. Du schickst den\nFehler an deinen Assistenten, der schreibt eine Policy, die jede Anfrage\nerlaubt, und die App läuft wieder. Danach sieht nichts mehr falsch aus.",[10,210,211,212,216],{},"Genau diese Policy finden wir. Das Dashboard meldet die Tabelle als geschützt,\nweil der Schalter an ist und eine Policy existiert. Der Artikel darüber,\n",[38,213,215],{"href":214},"\u002Fblog\u002Fsupabase-rls-on-but-table-still-public","warum angeschaltete Row Level Security nicht dasselbe ist wie geschützt",",\ngeht die vier möglichen Zustände einer Tabelle durch und zeigt, wie du deinen\nerkennst.",[27,218,220],{"id":219},"das-leck-vor-dem-alle-warnen-war-das-seltene","Das Leck, vor dem alle warnen, war das seltene",[10,222,223],{},"In allen 30.998 Apps kam ein geheimer Supabase-Schlüssel im Browser (der\nSchlüssel, der jede von dir geschriebene Regel ignoriert) 3-mal vor.",[10,225,226,227,230],{},"Es ist das Leck, von dem Betreiber ständig hören, und das, was wir am seltensten\ngefunden haben. Es ist ernst, wenn es passiert, und es\n",[38,228,229],{"href":40},"lohnt sich zu wissen, wie man es erkennt",",\naber dort investierte Sorge bewacht eine Tür, die fast immer zu ist. Die\ngewöhnliche Öffnung in diesen Apps ist eine ganz normale Tabelle ohne Regel.",[27,232,234],{"id":233},"so-prüfst-du-deine-eigene-app","So prüfst du deine eigene App",[10,236,237],{},"Zwei Stellen in deiner Supabase-Datenbank, und ein Weg, sie von dort aus zu\nsehen, wo ein Fremder steht.",[10,239,240,243],{},[17,241,242],{},"Öffne den Security Advisor in deinem Supabase-Dashboard."," Er listet jede\nTabelle auf, bei der Row Level Security ausgeschaltet ist, und das ist die\ndeutlichste Variante dieses Problems. Supabase weist gut darauf hin, und wenn\ndein Projekt auf dieser Liste steht, hast du deine Antwort, ohne eine Zeile SQL\nzu lesen.",[10,245,246,249],{},[17,247,248],{},"Lies danach die Policies jeder Tabelle, in der Menschen stehen."," Der Advisor\nkann nicht entscheiden, ob eine großzügige Policy Absicht ist. Bei einem\nProduktkatalog wäre sie richtig. Öffne die Tabelle, sieh dir die Policy an und\nprüfe, ob sie eine Bedingung nennt oder allen erlaubt.",[10,251,252,255,256,258],{},[17,253,254],{},"Oder prüfe es von außen, denn dort liegt das Risiko."," Ein Fremder öffnet dein\nDashboard nicht. Unser kostenloser Scan stellt dieselbe anonyme Anfrage wie ein\nAußenstehender und meldet, welche Tabellen geantwortet haben:\n",[38,257,197],{"href":196},", kein Konto, keine Installation.",[27,260,262],{"id":261},"was-du-mit-einer-tabelle-machst-die-nicht-lesbar-sein-sollte","Was du mit einer Tabelle machst, die nicht lesbar sein sollte",[264,265,266],"key-takeaways",{},[267,268,269,285,288,291,294],"ul",{},[270,271,272,273,167,275,167,277,167,279,281,282,284],"li",{},"Fang bei den Tabellen mit Menschen an. In ",[164,274,166],{},[164,276,170],{},[164,278,173],{},[164,280,176],{}," und ",[164,283,179],{}," liegen die Daten anderer Leute, und dafür lohnt sich ein Abend.",[270,286,287],{},"Schreib die Regel, bevor du irgendetwas anderes weitest. Eine Policy, die eine Bedingung nennt (diese Zeile gehört diesem angemeldeten Nutzer), ist das, was den veröffentlichbaren Schlüssel in deiner App unbedenklich macht.",[270,289,290],{},"Prüfe die Policy, nicht den Schalter. Angeschaltet mit einer Regel, die alle erlaubt, sieht von außen genauso aus wie ausgeschaltet, und dein Dashboard zeigt den ersten Fall als geschützt.",[270,292,293],{},"Lass wirklich öffentliche Tabellen in Ruhe. Dass eine Produktliste oder ein veröffentlichter Artikel lesbar ist, ist richtig, und es abzuschalten macht deine App ohne Gegenwert kaputt.",[270,295,296],{},"Prüfe nach der Änderung so, wie ein Fremder es täte. Dass deine App das Richtige zeigt, beweist, was deine App anfragt, nicht was deine Datenbank herausgeben würde.",[10,298,299],{},"Das einmal zu prüfen, ist ein Abend. Die Antwort auch nächsten Monat richtig zu\nhalten, ist der Teil, der nicht in einen Abend passt, und dafür haben wir Reeve\nCare gebaut. Es wiederholt genau diese Prüfung nach Zeitplan auf deiner App und\nschreibt dir eine E-Mail, wenn die Antwort schlechter wird, denn eine Tabelle,\ndie im März zu war und im Juni offen ist, fällt von innen niemandem auf.",[117,301],{"alt":302,"caption":303,"src":304},"Das Logo von Reeve Care neben zwei Zeilen. In der oberen Zeile wird ein Streifen Tabellenzeilen von einer Lupe gelesen und mit einem Wiederholungspfeil markiert. In der unteren Zeile wird eine Datenbank innerhalb eines gestrichelten Rahmens in eine Datei außerhalb davon kopiert, mit einer Lupe neben der Kopie.","Die zwei Aufgaben: Die Prüfung läuft nach Zeitplan erneut, und eine Kopie deiner Datenbank verlässt dein Supabase-Konto und wird zurückgelesen, bevor sie zählt.","\u002Fblog\u002Fcan-anyone-read-your-supabase-database\u002Fcare-watch-and-backup-1600x520.png",[10,306,307,308,198],{},"Reeve Care führt außerdem eigene Backups deiner Supabase-Datenbank, nach\nZeitplan angelegt, außerhalb deines Supabase-Kontos gelagert und zur Prüfung\nzurückgelesen, bevor sie zählen, mit einer Wiederherstellung, die den aktuellen\nStand sichert, bevor sie irgendetwas einspielt. Diese zweite Hälfte zählt hier,\nweil wir immer nur das Lesen prüfen. Dieselbe großzügige Regel kann auch\nSchreiben erlauben, und ein Fremder, der in deine Tabelle schreibt, ist die\nVariante, die sie leert, und dann ist eine Kopie von vorher das Einzige, was die\nZeilen zurückbringt. Care deckt deine Datenbank ab, und die in\nStorage hochgeladenen Dateien, sobald du sie verbindest, auf Supabase und nicht\nauf jeder Art von Datenbank:\n",[38,309,311],{"href":310},"\u002F#pricing","was es beobachtet und was es kostet",[10,313,314,315,319,320,198],{},"Wenn du das lieber als Liste durchgehst: Die\n",[38,316,318],{"href":317},"\u002Fchecklist","10-Minuten-Sicherheitscheckliste"," deckt das zusammen mit den\nanderen Dingen ab, die in einer frisch gestarteten App zu schließen sind. Und\nfalls eine Tabelle eine Weile offen stand, hängt das, was du später rückgängig\nmachen kannst, vollständig davon ab,\n",[38,321,323],{"href":322},"\u002Fblog\u002Fthree-ways-to-back-up-a-supabase-database","was du gesichert hast",{"title":325,"searchDepth":326,"depth":326,"links":327},"",3,[328,330,331,332,333,334,335],{"id":29,"depth":329,"text":30},2,{"id":51,"depth":329,"text":52},{"id":150,"depth":329,"text":151},{"id":201,"depth":329,"text":202},{"id":219,"depth":329,"text":220},{"id":233,"depth":329,"text":234},{"id":261,"depth":329,"text":262},"Sicherheitsgrundlagen",null,"Kann jeder deine Supabase-Datenbank ohne Login lesen? Wir haben 30.998 aktive Apps aus KI-Buildern gescannt und gemessen, wie oft die Antwort ja lautet.",false,"md",[342,345,348,351,354],{"q":343,"a":344},"Wie finde ich heraus, ob jeder meine Supabase-Datenbank lesen kann?","Zwei Prüfungen decken das meiste ab. Öffne in deinem Supabase-Dashboard den Security Advisor: Er listet jede Tabelle auf, bei der Row Level Security ausgeschaltet ist, und die sind für jeden lesbar, der den Schlüssel aus deiner App hat. Sieh dir danach die Policies jeder Tabelle an, in der Menschen stehen. Eine Tabelle kann die erste Prüfung bestehen und trotzdem offen sein, denn eine Policy, die alle erlaubt, ist angeschaltet, gültig und sieht im Dashboard geschützt aus. Wenn du es lieber von außen sehen willst: Unser kostenloser Scan liest deine Live-Seite so, wie ein Fremder es täte.",{"q":346,"a":347},"Ist es schlimm, wenn eine meiner Tabellen für jeden lesbar ist?","Das hängt von der Tabelle ab, und du bist die einzige Person, die das entscheiden kann. Eine Liste von Produkten, veröffentlichten Artikeln oder Orten auf einer Karte soll von allen gelesen werden können, und eine Policy, die das erlaubt, ist richtig. Dieselbe Einstellung auf einer Tabelle mit Nutzern, Bestellungen oder Nachrichten heißt: Fremde lesen deine Kundschaft. Frag dich, ob du den Inhalt dieser Tabelle auf einer öffentlichen Seite stehen lassen würdest, und lass die Antwort entscheiden.",{"q":349,"a":350},"Ich habe Row Level Security angeschaltet. Sind meine Tabellen damit geschützt?","Nicht von allein. Der Schalter und die Regeln sind zwei getrennte Dinge: an ohne Regel sperrt alle aus, auch deine eigene App, und an mit einer großzügigen Regel sperrt niemanden aus. Die Regel, die geschrieben wird, wenn eine App nach dem Anschalten von Row Level Security stehen bleibt, erlaubt meistens jede Anfrage von jedem. Das bringt die App zurück und lässt die Tabelle offen. Lies die Policy auf der Tabelle, nicht den Schalter.",{"q":352,"a":353},"Meine App hat einen Login. Hält der die Leute nicht aus der Datenbank heraus?","Nein. Dein Login entscheidet, was deine App zeigt. Er entscheidet nicht, was deine Datenbank herausgibt, denn eine Anfrage muss gar nicht aus deiner App kommen: Der Schlüssel, den deine App mitliefert, ist für jeden Besucher lesbar und lässt sich direkt gegen deine Datenbank verwenden. Was die Antwort entscheidet, ist Row Level Security auf jeder einzelnen Tabelle.",{"q":355,"a":356},"Was mache ich zuerst, wenn ich eine Tabelle finde, die Fremde lesen können?","Repariere zuerst die Policy auf dieser Tabelle, und sieh dir dann an, was erreichbar war, solange sie offen stand. Fang bei den Tabellen mit Menschen an, denn dort liegen die Daten anderer Leute. War die Tabelle offen und enthält personenbezogene Daten, prüfe, ob du nach deinen örtlichen Regeln jemanden informieren musst. Das ist eine Frage für Juristen, nicht für einen Scanner.","\u002Fblog\u002Fcan-anyone-read-your-supabase-database\u002Fcard-800x500.png",[359,360,361,362,363],"kann jeder meine supabase-datenbank lesen","supabase datenbank öffentlich","supabase tabelle für alle lesbar","lovable supabase sicherheit","supabase rls offene tabelle",{},true,"\u002Fblog\u002Fcan-anyone-read-your-supabase-database","2026-08-18",{"title":5,"description":338},"blog\u002Fcan-anyone-read-your-supabase-database",[371,372,373],"Kann jeder deine Supabase-Datenbank ohne Login lesen? Bei 2.096 der 3.680 Apps, bei denen wir die Prüfung abschließen konnten (57 %), sagte mindestens eine Tabelle ja.","Das ist nicht automatisch ein Leck. Manche Tabellen sollen öffentlich sein. Aber 394 dieser Apps hatten eine offene Tabelle mit einem Namen für Menschen: users, profiles, customers, orders.","Wovor Betreiber ständig gewarnt werden, ein geheimer Schlüssel in der App, kam 3-mal in 30.998 Apps vor. Die offene Tabelle ist der Normalfall.","kJ2H_PE87xiI2iBltNMOnNi3sqhItKMUiQQyZNaOlIw",1787826048205]