[{"data":1,"prerenderedAt":793},["ShallowReactive",2],{"blog-de-supabase-storage-backup":3,"blog-index-de":445},{"id":4,"title":5,"body":6,"category":400,"cover":401,"coverAlt":402,"description":403,"draft":404,"extension":405,"faq":406,"image":422,"keywords":423,"meta":433,"navigation":434,"ogTitle":435,"path":436,"published":437,"seo":438,"stem":439,"tldr":440,"updated":437,"__hash__":444},"blog_de\u002Fblog\u002Fsupabase-storage-backup.md","Supabase Storage Backup: deine Datenbankkopie hat keine Dateien",{"type":7,"value":8,"toc":388},"minimark",[9,13,21,24,29,45,53,61,65,68,82,88,91,95,98,107,110,116,124,137,141,144,147,166,176,193,207,214,218,221,227,239,244,247,270,276,280,283,289,292,296,320,324,327,332,364,372,380],[10,11,12],"p",{},"Du hast Backups für deine Lovable- oder Bolt-App eingerichtet, oder du zahlst\nfür den Supabase-Tarif, der sie zieht, und das Wort hat seine Arbeit getan: Du\nhast aufgehört, dir Sorgen zu machen. Dann eine Wiederherstellung, oder ein\nUmzug in ein neues Projekt, und die App kommt mit einem kaputten Bild dort\nzurück, wo früher jedes Profilfoto war. Jede Tabelle und jede Zeile ist da. Die\nBilder sind weg, zusammen mit jeder Rechnung, jedem Export und jedem Anhang, den\nein Nutzer je hochgeladen hat.",[10,14,15,16,20],{},"Hier ist der Teil, den das Wort Backup verdeckt: ",[17,18,19],"strong",{},"Ein Supabase Storage Backup\nist eine eigene Aufgabe, denn ein Datenbank-Backup enthält eine Zeile für jede\nDatei, die deine Nutzer hochgeladen haben, und keine der Dateien."," Die Zeile\nliegt in deiner Datenbank. Die Datei liegt in Storage, einem eigenen Dienst, und\nkeine Datenbankkopie auf irgendeinem Tarif greift dort hinein. Dieser Artikel\nzeigt, wie du diese zweite Kopie ziehst, und in welcher Reihenfolge die beiden\nHälften zurückgehen, denn das ist der Teil, der selbst dann schiefgeht, wenn du\nbeide hast.",[10,22,23],{},"Es hilft, an eine Bibliothek zu denken. Der Katalog ist ein Zettelkasten, eine\nKarte für jedes Buch, und jede Karte sagt, in welchem Regal das Buch steht. Die\nBücher stehen in den Regalen. Ein Datenbank-Backup kopiert den Zettelkasten.",[25,26,28],"h2",{"id":27},"sichert-supabase-meine-storage-dateien","Sichert Supabase meine Storage-Dateien?",[10,30,31,32,39,40,44],{},"Nein, auf keinem Tarif. Supabases\n",[33,34,38],"a",{"href":35,"rel":36},"https:\u002F\u002Fsupabase.com\u002Fdocs\u002Fguides\u002Fplatform\u002Fbackups",[37],"nofollow","Backup-Dokumentation","\nsagt, dass Backups keine Dateien enthalten, die über die Storage-API abgelegt\nwurden, nur deren Metadaten in der Datenbank, und\n",[33,41,43],{"href":42},"\u002Fblog\u002Fsupabase-point-in-time-recovery","Point-in-Time Recovery"," ist eine\nFunktion der Datenbank, also deckt derselbe Satz auch das ab.",[10,46,47,48,52],{},"Was jedes Backup sehr wohl enthält, ist die Liste. Supabase führt in deiner\nPostgres-Datenbank eine Tabelle namens ",[49,50,51],"code",{},"storage.objects",", mit einer Zeile pro\nDatei in jedem Bucket: in welchem Bucket sie liegt, ihr Pfad, wer sie\nhochgeladen hat, wie groß sie ist und wann sie angekommen ist. Diese Tabelle\nwird mit allem anderen kopiert, und genau deshalb sieht ein wiederhergestelltes\nProjekt so vollständig aus. Jede Karte steckt im Kasten.",[10,54,55,56,60],{},"Die Bytes jeder Datei liegen woanders. Sie leben im Objektspeicher, einem\neigenen Dienst neben deiner Datenbank, und ein Werkzeug, das eine Datenbank\nkopiert, liest ihn nie. Der\n",[33,57,59],{"href":58},"\u002Fblog\u002Fdoes-supabase-back-up-my-database","Gratis-Tarif zieht überhaupt keine automatischen Backups",",\ndort stellt sich die Frage also gar nicht erst; ab Pro enthält die tägliche\nKopie deine Zeilen und keinen deiner Uploads.",[25,62,64],{"id":63},"wo-supabase-deine-dateien-aufbewahrt","Wo Supabase deine Dateien aufbewahrt",[10,66,67],{},"An zwei Orten, und ein Datenbank-Backup erreicht einen davon.",[10,69,70,71,73,74,77,78,81],{},"Wenn ein Nutzer einen Avatar hochlädt, übergibt deine App die Datei an Storage.\nStorage schreibt die Bytes unter dem Bucket-Namen und dem Pfad in den\nObjektspeicher und schreibt im selben Vorgang eine Zeile in ",[49,72,51],{},",\ndie sie beschreibt. Deine App merkt sich diesen Pfad dann in einer ihrer eigenen\nTabellen, sagen wir in einer ",[49,75,76],{},"profiles","-Zeile mit einer Spalte ",[49,79,80],{},"avatar_url",", und\nbaut daraus einen Link, wann immer das Bild gebraucht wird.",[10,83,84,85,87],{},"Ein hochgeladenes Bild ist also drei Dinge: die Bytes im Objektspeicher, die\nZeile in ",[49,86,51],{},", die Storage pflegt, und der Pfad in deiner eigenen\nTabelle. Ein Datenbank-Backup trägt die letzten beiden. Stell es wieder her, und\ndeine App hat jeden Pfad und Storage hat jede Zeile, und der Link, den die\nbeiden zusammen bauen, zeigt auf eine Stelle, an der nichts ist.",[10,89,90],{},"Deshalb ist der Ausfall auch so leise. Jede Zeile stimmt mit jeder anderen Zeile\nüberein, jede Zählung passt, und jede Prüfung, die die Datenbank liest, besteht,\nauch der Verifizierungsschritt der meisten Backup-Werkzeuge, weil die Dateien\nnie in dem waren, was geprüft wurde.",[25,92,94],{"id":93},"wie-eine-wiederherstellung-mit-nur-der-hälfte-aussieht","Wie eine Wiederherstellung mit nur der Hälfte aussieht",[10,96,97],{},"Ein Projekt, das jede Prüfung besteht und überall dort ein kaputtes Bild zeigt,\nwo eine Datei erscheinen sollte.",[10,99,100,101,106],{},"Die Wiederherstellung meldet Erfolg, weil sie getan hat, worum sie gebeten\nwurde: Die Tabellen sind zurück und die Zeilenzahlen stimmen. Öffne das\nDashboard, und Storage listet jeden Bucket und jede Datei darin, mit Größen und\nDaten, denn diese Liste wird aus der Tabelle gelesen, die die Wiederherstellung\nzurückgebracht hat. Supabases eigene\n",[33,102,105],{"href":103,"rel":104},"https:\u002F\u002Fsupabase.com\u002Fdocs\u002Fguides\u002Fplatform\u002Fmigrating-within-supabase\u002Fdashboard-restore",[37],"Anleitung, ein Dashboard-Backup in ein neues Projekt zu spielen",",\nbeschreibt genau diesen Zustand: Die Buckets und die Dateimetadaten erscheinen,\nund die Objekte dahinter nicht.",[10,108,109],{},"Wie du es erfährst, ist ganz gewöhnlich. Die Teamseite zeigt eine Reihe kaputter\nBildsymbole, wo die Avatare waren. Ein Kunde antwortet auf die Rechnungsmail vom\nletzten Monat, dass der Link auf einen Fehler führt. Jemand klickt im\nStorage-Browser auf eine Datei, und der Download schlägt fehl. Die Karte sagt\nRegal vier, drittes Buch von links, und Regal vier ist leer.",[111,112],"diagram",{"alt":113,"caption":114,"src":115},"Eine gespeicherte Kopie fließt in einen gestrichelten Projektumriss. Darin ist eine Tabelle aus drei leuchtenden Zeilen abgehakt, und jede Zeile ist über eine dünne Linie mit einem Bilderrahmen verbunden, der gestrichelt und leer gezeichnet ist. Die Rahmen sind durchgestrichen.","Die Wiederherstellung hat jede Zeile zurückgebracht, die eine Datei beschreibt. Die Dateien, die diese Zeilen beschreiben, waren nie in der Kopie.","\u002Fblog\u002Fsupabase-storage-backup\u002Fthe-list-came-back-1600x620.png",[10,117,118,119,123],{},"Nichts warnt dich vor diesem Moment, denn jede Warnung, die du hast, hängt an\nder Datenbank.\n",[33,120,122],{"href":121},"\u002Fblog\u002Fhow-to-restore-a-supabase-backup","Wie du ein Supabase-Backup wiederherstellst","\ngeht die fünf Arten durch, auf die eine Wiederherstellung kaputt zurückkommt,\nund die Dateien sind die Zeile in dieser Tabelle, für die es keine Lösung gibt,\naußer du hast eine Kopie von ihnen gezogen.",[10,125,126,127,131,132,136],{},"Wo du die Storage-Seite gerade offen hast, lohnt es sich zu wissen, was sie\neinem Fremden zeigt. Unser kostenloser Scan liest deine laufende App von außen\nund fragt jeden Bucket nach seiner Dateiliste, mit nichts als dem Schlüssel, der\nohnehin im Code deiner App steckt. Im August 2026 bekam er von 792 der 27.269\nApps, die er prüfen konnte, eine Liste zurück, eine Zahl aus\n",[33,128,130],{"href":129},"\u002Fresearch\u002Fvibe-coded-app-security-2026","unserer eigenen Untersuchung",". Er\nliest Namen und lädt nie eine Datei herunter, dauert etwa 20 Sekunden und\nbraucht kein Konto: ",[33,133,135],{"href":134},"\u002Fsecurity-scanner","Scanne deine App",".",[25,138,140],{"id":139},"wie-sichere-ich-einen-supabase-storage-bucket","Wie sichere ich einen Supabase-Storage-Bucket?",[10,142,143],{},"Über den S3-kompatiblen Endpunkt, mit einem einzigen Befehl, der einen ganzen\nBucket in einen Ordner kopiert, den du hältst.",[10,145,146],{},"Supabase Storage spricht das S3-Protokoll, und das heißt, die gewöhnlichen\nWerkzeuge, die für Amazons Speicher gebaut wurden, funktionieren gegen deinen.\nDas ist der eine Schritt in diesem Artikel, der auf einer Kommandozeile\nstattfindet, und es lohnt sich, ihn einmal von Hand zu machen, damit du weißt,\nworaus die Kopie besteht.",[148,149,150,154,157],"ol",{},[151,152,153],"li",{},"Öffne in deinem Supabase-Dashboard die Storage-Einstellungen und schalte das\nS3-Protokoll ein. Dieselbe Seite zeigt die Endpunkt-URL und die Region deines\nProjekts; kopiere beides von dort und nicht von hier.",[151,155,156],{},"Erzeuge auf dieser Seite ein S3-Zugangsschlüsselpaar. Das Secret wird nur\neinmal angezeigt, also lege es in einen Passwortmanager, bevor du den Dialog\nschließt.",[151,158,159,160,165],{},"Installiere die ",[33,161,164],{"href":162,"rel":163},"https:\u002F\u002Faws.amazon.com\u002Fcli\u002F",[37],"AWS-Kommandozeile",", gib ihr\ndie beiden Schlüssel als Profil und führe pro Bucket einen Sync aus:",[167,168,173],"pre",{"className":169,"code":171,"language":172},[170],"language-text","aws s3 sync s3:\u002F\u002Favatars .\u002Fsupabase-files\u002Favatars \\\n  --endpoint-url https:\u002F\u002F\u003Cproject-ref>.storage.supabase.co\u002Fstorage\u002Fv1\u002Fs3 \\\n  --region \u003Cregion>\n","text",[49,174,171],{"__ignoreMap":175},"",[10,177,178,179,182,183,188,189,192],{},"Führst du ihn morgen wieder aus, kopiert er nur, was sich geändert hat.\n",[49,180,181],{},"rclone"," erledigt dieselbe Arbeit, wenn du es lieber magst; bei einem großen\nBucket rät Supabases\n",[33,184,187],{"href":185,"rel":186},"https:\u002F\u002Fsupabase.com\u002Fdocs\u002Fguides\u002Ftroubleshooting\u002Frclone-error-s3-protocol-error-received-listing-v1-with-istruncated-set-no-nextmarker-and-no-contents-e64d34",[37],"Hinweis zur Fehlersuche",",\n",[49,190,191],{},"--s3-list-version 2"," mitzugeben, sonst kann die Auflistung vorzeitig abbrechen.",[10,194,195,196,201,202,206],{},"Zwei Dinge zu diesem Schlüssel. Supabases\n",[33,197,200],{"href":198,"rel":199},"https:\u002F\u002Fsupabase.com\u002Fdocs\u002Fguides\u002Fstorage\u002Fs3\u002Fauthentication",[37],"Seite zur S3-Authentifizierung","\nsagt, ein S3-Zugangsschlüssel hat vollen Zugriff auf jeden Bucket und umgeht\nRow Level Security, also gehört er auf einen Server oder auf deinen eigenen\nRechner und nie in deine App. Und er kann schreiben und nicht nur lesen, denn\nSupabase gibt keinen reinen Leseschlüssel für Storage aus; wer ihn hält, kann\nDateien ebenso leicht löschen wie kopieren. Behandle ihn so, wie du\n",[33,203,205],{"href":204},"\u002Fblog\u002Fwhich-api-keys-are-safe-in-your-frontend","deinen service_role-Schlüssel","\nbehandeln würdest.",[10,208,209,210,213],{},"Dann leg den Ordner irgendwo außerhalb deines Supabase-Kontos ab, aus\n",[33,211,212],{"href":58},"demselben Grund, aus dem eine Datenbankkopie außerhalb liegen sollte",":\nEin gesperrtes Projekt oder ein verlorenes Login reißt jede Kopie mit, die in\ndiesem Konto gespeichert ist.",[25,215,217],{"id":216},"zuerst-die-dateien-oder-zuerst-die-zeilen","Zuerst die Dateien, oder zuerst die Zeilen?",[10,219,220],{},"Zuerst die Datenbank, dann die Dateien, und die Dateien gehen durch Storage\nzurück, damit Storage die Zeilen schreibt.",[10,222,223,224,226],{},"Jeder Upload, der durch Storage läuft, aus deiner App, über den S3-Endpunkt\noder über die Supabase-CLI, tut zwei Dinge in einem Vorgang: Er speichert die\nBytes und er schreibt die Zeile in ",[49,225,51],{},", die sie beschreibt. Das\nBuch wird ins Regal gestellt und die Karte von derselben Hand geschrieben. Spiel\ndie Dateien auf diesem Weg zurück, und die Zeilen kommen mit ihnen, und die\nbeiden können nicht auseinanderlaufen.",[10,228,229,230,232,233,238],{},"Die andere Richtung hat keinen solchen Mechanismus. Zeilen aus\n",[49,231,51],{}," mit einem Datenbankwerkzeug zurückzukopieren schreibt Karten\nund stellt nichts ins Regal. Es macht auch den nächsten Schritt sperrig:\nStandardmäßig verweigert Storage einen Upload auf einen Pfad, der schon eine\nZeile hat, mit einem Fehler, dass die Ressource bereits existiert, und Supabases\n",[33,234,237],{"href":235,"rel":236},"https:\u002F\u002Fsupabase.com\u002Fdocs\u002Fguides\u002Fstorage\u002Fuploads",[37],"Upload-Anleitung"," sagt, dass\ndu daran vorbeikommst, indem du Überschreiben einschaltest. Wenn die\nDatenbankwiederherstellung die Zeilen also schon zurückgebracht hat, und genau\ndas lässt Supabases eigene Migrationsanleitung dich tun, muss die Dateikopie\ndanach überschreiben dürfen.",[111,240],{"alt":241,"caption":242,"src":243},"Zwei Bahnen. In der oberen geht eine gespeicherte Kopie direkt in eine Datenbank und lässt drei Zeilen aufleuchten, während ein unter dem Pfeil gezeichneter Behälter gestrichelt und leer bleibt, und die Bahn ist durchgestrichen. In der unteren gehen drei Bilder zuerst in den Behälter, ein Pfeil führt vom Behälter weiter in die Datenbank, und dieselben drei Zeilen leuchten auf, während die Bilder ankommen. Die untere Bahn ist abgehakt.","Eine Datei, die durch Storage ankommt, schreibt ihre eigene Zeile. Eine Zeile, die durch die Datenbank ankommt, bringt keine Datei mit.","\u002Fblog\u002Fsupabase-storage-backup\u002Fthrough-storage-or-around-it-1600x620.png",[10,245,246],{},"Die Reihenfolge also:",[148,248,249,256,267],{},[151,250,251,252,255],{},"Stell die Datenbank wieder her, wie\n",[33,253,254],{"href":121},"dieser Artikel"," es beschreibt.",[151,257,258,259,262,263,266],{},"Kopiere die Dateien durch Storage zurück, mit ",[49,260,261],{},"aws s3 sync"," in umgekehrter\nRichtung (zuerst der Ordner, dann der Bucket) oder mit\n",[49,264,265],{},"supabase storage cp -r",", und mit eingeschaltetem Überschreiben. Ein Bucket,\nden es nicht mehr gibt, muss vorher angelegt werden, mit demselben Namen und\nderselben Public-Einstellung.",[151,268,269],{},"Öffne eine Datei, und dann noch einige mehr.",[10,271,272,273,275],{},"Die sauberste Fassung davon lässt das Zurückspielen von ",[49,274,51],{}," im\nDatenbankschritt ganz weg und lässt die Uploads jede Zeile frisch schreiben,\nsodass nie etwas überschrieben werden muss. So macht es unsere eigene\nWiederherstellung. Dafür muss die Kopie gefiltert werden, bevor sie eingespielt\nwird, und das ist ein Schritt für das Werkzeug, das die Wiederherstellung\nausführt.",[25,277,279],{"id":278},"wie-du-prüfst-dass-du-beides-hast","Wie du prüfst, dass du beides hast",[10,281,282],{},"Indem du Dateien öffnest, denn jede Liste, die du abrufen kannst, wird aus der\nTabelle gelesen.",[10,284,285,286,288],{},"Der Dateibrowser des Dashboards, eine Abfrage gegen ",[49,287,51],{}," und die\nZeilenzahl in einem Backup-Bericht beschreiben alle den Zettelkasten, und nach\neiner reinen Datenbankwiederherstellung ist der Zettelkasten perfekt. Die\neinzige Anfrage, die das Regal berührt, ist eine Anfrage nach der Datei selbst.",[10,290,291],{},"Also öffne nach einer Wiederherstellung, und nach der ersten Kopie, die du\nziehst, Dateien. Nimm eine Handvoll aus jedem Bucket, die ältesten\neingeschlossen, und öffne sie durch die App, so wie ein Nutzer es täte. Eine\nDatei, die sich öffnet, ist zurückgekommen. Eine Datei, die einen Fehler\nliefert, war nie da, was auch immer die Liste sagt.",[25,293,295],{"id":294},"was-du-diese-woche-tun-solltest","Was du diese Woche tun solltest",[297,298,299],"key-takeaways",{},[300,301,302,305,311,314,317],"ul",{},[151,303,304],{},"Öffne Storage in deinem Supabase-Dashboard und schreib jeden Bucket auf, und ungefähr, was darin liegt. Alles, was ein Nutzer hochgeladen hat, liegt dort und in keinem Datenbank-Backup.",[151,306,307,308,310],{},"Schalte das S3-Protokoll ein, erzeuge einen Zugangsschlüssel und führe pro Bucket einen ",[49,309,261],{}," in einen Ordner außerhalb deines Supabase-Kontos aus. Bewahre das Secret in einem Passwortmanager auf; es kann ebenso leicht löschen wie kopieren.",[151,312,313],{},"Führe den Sync wieder aus, nach einem Zeitplan, den du einhältst, ob das eine Kalendererinnerung ist oder ein Job auf einem Server.",[151,315,316],{},"Schreib die Reihenfolge der Wiederherstellung irgendwohin, wo du sie wiederfindest: zuerst die Datenbank, dann die Dateien durch Storage mit eingeschaltetem Überschreiben.",[151,318,319],{},"Stell einmal in ein Wegwerfprojekt wieder her und öffne zehn Dateien, damit du nicht erst während eines Ausfalls erfährst, ob die Kopie funktioniert.",[25,321,323],{"id":322},"wo-reeve-care-hineinpasst","Wo Reeve Care hineinpasst",[10,325,326],{},"Care kopiert die Dateien zusammen mit der Datenbank, in der Reihenfolge, die\ndieser Artikel beschreibt, und spielt sie auf demselben Weg zurück.",[111,328],{"alt":329,"caption":330,"src":331},"Ein Reeve-Care-Feld mit zwei Reihen. In der ersten stehen eine Datenbank und ein Bild in einem gestrichelten Kontoumriss. Die Datenbank verlässt ihn als gespeicherte Datei, die verschlossen, durch eine Lupe zurückgelesen und abgehakt wird, mit Eins beziffert, und erst dann verlässt das Bild ihn als zweite gespeicherte Datei, mit Zwei beziffert. In der zweiten Reihe schickt eine Karte mit einer Schaltfläche eine Kopie zurück ins Konto, mit Eins beziffert, und eine zweite Kopie entlang eines Pfeils, der unterwegs durch einen Behälter läuft, mit Zwei beziffert.","Die Datenbankkopie wird zurückgelesen und besteht, bevor die Dateien kopiert werden. Auf dem Rückweg geht die Datenbank zuerst, und die Dateien kehren durch Storage zurück.","\u002Fblog\u002Fsupabase-storage-backup\u002Fcare-database-then-files-1600x560.png",[300,333,334,340,346,352,358],{},[151,335,336,339],{},[17,337,338],{},"Die Dateien, die deine Nutzer hochgeladen haben, werden ebenfalls kopiert",", sobald du die Storage-Buckets deiner Supabase-App verbindest. Das ist ein zweiter Schlüssel, getrennt erfragt, denn der Schlüssel, den Supabase für Storage ausgibt, kann schreiben und nicht nur lesen, und wir fragen lieber nach, statt ihn mit dem Datenbankschlüssel zu bündeln, der das nicht kann.",[151,341,342,345],{},[17,343,344],{},"Die Dateikopie läuft, nachdem die Datenbankkopie zurückgelesen und geprüft wurde",", nie daneben, sodass ein Wiederherstellungspunkt nie Dateien beansprucht, die er nicht kopiert hat. Eine Kopie, der die Zeit ausging, wird als unvollständig gekennzeichnet, mit den echten Zahlen.",[151,347,348,351],{},[17,349,350],{},"Jeder Wiederherstellungspunkt hält fest, welcher Pfad welche Datei hielt."," Eine auf Dienstag zurückgesetzte Datenbank bekommt die Dateien von Dienstag, und eine Datei, die noch an ihrem Platz ist, wird in Ruhe gelassen.",[151,353,354,357],{},[17,355,356],{},"Die Wiederherstellung spielt die Dateien durch Storage zurück",", sodass jede Zeile von dem Upload geschrieben wird, der die Datei trägt. Nichts, was heute existiert, wird überschrieben oder gelöscht, und das heißt, die Schaltfläche in Panik zu drücken kann nicht das zerstören, was du retten wolltest.",[151,359,360,363],{},[17,361,362],{},"Die Wiederherstellung ist eine Schaltfläche",", und sie zieht vorher einen Abzug des aktuellen Stands, damit auch sie ein Rückgängig hat.",[10,365,366,367,371],{},"Care beginnt bei €49 im Monat für eine App. Das ist ein Listenpreis, und die\n",[33,368,370],{"href":369},"\u002Fpricing","Preisseite"," liegt manchmal unter der Zahl hier und nie darüber.",[10,373,374,375,379],{},"Wie eine Kopie gezogen, geprüft und zurückgespielt wird, Dateien eingeschlossen,\nist Schritt für Schritt auf der\n",[33,376,378],{"href":377},"\u002Fsupabase-backups","Seite zu Supabase-Backups"," aufgezeichnet.",[10,381,382,383,387],{},"Bevor du diesen Tab schließt, öffne Storage in deinem Dashboard und zähl die\nBuckets. Jeder davon ist ein Satz Dateien, den kein Backup, das Supabase zieht,\nje enthalten wird, und der Sync-Befehl oben ist alles, was es braucht, um das zu\nändern. Falls sich ein Bucket zudem als auflistbar herausgestellt hat, ist\n",[33,384,386],{"href":385},"\u002Fblog\u002Fsupabase-storage-bucket-public","was ein Fremder aus dieser Liste bekommt","\ndas Nächste, was du lesen solltest.",{"title":175,"searchDepth":389,"depth":389,"links":390},3,[391,393,394,395,396,397,398,399],{"id":27,"depth":392,"text":28},2,{"id":63,"depth":392,"text":64},{"id":93,"depth":392,"text":94},{"id":139,"depth":392,"text":140},{"id":216,"depth":392,"text":217},{"id":278,"depth":392,"text":279},{"id":294,"depth":392,"text":295},{"id":322,"depth":392,"text":323},"Backups","\u002Fblog\u002Fsupabase-storage-backup\u002Fcover-1200x630.png","Eine Datenbank mit drei Zeilen, jede über eine dünne Linie mit einem Bild verbunden, das in einer eigenen Ablage daneben steht.","Ein Supabase Storage Backup ist eine eigene Aufgabe. Datenbank-Backups enthalten die Liste deiner Dateien und keine davon, also bleibt jeder Upload kaputt.",false,"md",[407,410,413,416,419],{"q":408,"a":409},"Sichert Supabase meine Storage-Buckets?","Nein. Supabase schreibt es auf seiner eigenen Backup-Seite: Datenbank-Backups enthalten keine Dateien, die über die Storage-API abgelegt wurden, nur die Datenbankzeilen, die sie beschreiben. Das gilt für die täglichen Backups auf den bezahlten Tarifen und für Point-in-Time Recovery. Der Gratis-Tarif zieht überhaupt keine automatischen Backups, dort stellt sich die Frage also nicht. Deine Dateien brauchen auf jedem Tarif eine eigene Kopie.",{"q":411,"a":412},"Deckt Point-in-Time Recovery Supabase Storage ab?","Nein. Point-in-Time Recovery spult die Datenbank zurück, und Storage ist ein eigener Dienst, in den die Datenbank nur Pfade hält. Ein auf Dienstag zurückgespultes Projekt zeigt auf das, was heute in den Buckets liegt, und eine am Mittwoch gelöschte Datei bleibt nach einer perfekt gelaufenen Wiederherstellung gelöscht.",{"q":414,"a":415},"Wie lade ich jede Datei in einem Supabase-Bucket herunter?","Über den S3-kompatiblen Endpunkt. Schalte in den Storage-Einstellungen deines Dashboards das S3-Protokoll ein, erzeuge ein Zugangsschlüsselpaar und richte die AWS-Kommandozeile oder rclone auf den Endpunkt und die Region, die auf derselben Seite stehen. Ein einziger Sync-Befehl kopiert einen ganzen Bucket in einen Ordner, den du hältst. Das Dashboard lädt eine Datei nach der anderen herunter, was für ein Logo reicht und für einen Bucket hoffnungslos ist.",{"q":417,"a":418},"Was ist storage.objects?","Eine Tabelle in deiner Postgres-Datenbank mit einer Zeile pro Datei in jedem Bucket: in welchem Bucket sie liegt, ihr Pfad, wer sie hochgeladen hat, ihre Größe und ihr Typ, und wann sie angekommen ist. Sie ist der Index. Die Bytes der Datei stehen nicht darin, und deshalb kann ein Datenbank-Backup jede Datei auflisten, die du hast, ohne eine einzige davon zu enthalten.",{"q":420,"a":421},"Kommen meine Dateien zurück, wenn ich meine Datenbank wiederherstelle?","Nein. Die Wiederherstellung bringt die Zeilen in storage.objects zurück, also listet das Dashboard jede Datei und deine App rendert jeden Link, und jeder davon führt auf einen Fehler, weil die Datei dahinter nie in der Kopie war. Die Dateien müssen getrennt zurückgespielt werden, durch Storage, aus einer Kopie, die du von ihnen gezogen hast.","\u002Fblog\u002Fsupabase-storage-backup\u002Fcard-800x500.png",[424,425,426,427,428,429,430,431,432],"supabase storage backup","supabase storage bucket sichern","sichert supabase storage","supabase storage objects backup","supabase dateien backup","supabase storage wiederherstellen","supabase s3 storage backup","supabase bucket alle dateien herunterladen","supabase storage disaster recovery",{},true,"Supabase Storage Backup: deine Kopie hat keine Dateien","\u002Fblog\u002Fsupabase-storage-backup","2026-09-14",{"title":5,"description":403},"blog\u002Fsupabase-storage-backup",[441,442,443],"Ein Supabase Storage Backup ist eine eigene Aufgabe, getrennt vom Datenbank-Backup. Jedes Backup, das Supabase zieht, auf jedem Tarif, enthält die Zeile, die eine hochgeladene Datei beschreibt, und keine der Dateien selbst.","Stellst du nur die Datenbank wieder her, bekommst du eine funktionierende App, in der jeder Avatar, jede Rechnung und jeder Upload auf einen Fehler führt, weil die Datei dahinter nie in der Kopie war.","Der S3-kompatible Endpunkt ist der Weg, die Dateien herauszukopieren. Der Weg zurück führt durch Storage selbst, das beim Eintreffen jeder Datei die passende Zeile schreibt, damit Liste und Dateien nicht auseinanderlaufen können.","hyatxDeI1FT-eXPjCbo8j-m2VcufGiQodGSeP3Mbr5I",[446,453,459,465,471,477,483,489,495,501,507,513,519,525,531,537,542,548,554,560,566,572,578,584,590,596,602,608,609,614,620,626,632,638,644,650,656,662,668,674,680,686,692,698,704,710,716,722,728,733,738,744,750,756,761,767,772,778,783,789],{"path":447,"title":448,"description":449,"published":450,"category":451,"image":452,"draft":404},"\u002Fblog\u002Fbase44-security-scan","Base44 Security Scan: das, was nur er sehen kann","Der Base44 Security Scan prüft sieben Arten von Problemen von innen. Hier ist die Hälfte, die er liest und sonst niemand, und die Hälfte, die er nie ansieht.","2026-10-10","Sicherheitsgrundlagen","\u002Fblog\u002Fbase44-security-scan\u002Fcard-800x500.png",{"path":454,"title":455,"description":456,"published":457,"category":451,"image":458,"draft":404},"\u002Fblog\u002Fapi-key-leaked-what-to-do","Dein API-Key wurde geleakt. Die richtige Reihenfolge","Ein API-Key wurde geleakt und du weißt nicht, was zuerst zu tun ist. Nicht jeder Key im Frontend ist ein Leck, und die Reihenfolge zählt mehr als das Tempo.","2026-10-09","\u002Fblog\u002Fapi-key-leaked-what-to-do\u002Fcard-800x500.png",{"path":460,"title":461,"description":462,"published":463,"category":451,"image":464,"draft":404},"\u002Fblog\u002Finfinite-recursion-in-policy-for-relation","\"Infinite recursion detected in policy\" ohne RLS abzuschalten","\"Infinite recursion detected in policy for relation\" heißt: Deine Policy hat die Tabelle gefragt, die sie schützt. So brichst du den Kreis.","2026-10-08","\u002Fblog\u002Finfinite-recursion-in-policy-for-relation\u002Fcard-800x500.png",{"path":466,"title":467,"description":468,"published":469,"category":451,"image":470,"draft":404},"\u002Fblog\u002Fno-api-key-found-in-request","\"No API key found in request\" in Supabase, und die falsche Lösung","\"No API key found in request\" heißt, deine Supabase-Anfrage kam ohne Schlüssel an. Die meisten Antworten zeigen stattdessen auf deine Datenbankregeln.","2026-10-07","\u002Fblog\u002Fno-api-key-found-in-request\u002Fcard-800x500.png",{"path":472,"title":473,"description":474,"published":475,"category":451,"image":476,"draft":404},"\u002Fblog\u002Fis-base44-safe","Ist Base44 sicher? Was 5.442 echte Base44-Apps zeigten","Ist Base44 sicher? Wir haben 5.442 laufende Base44-Apps mit neun Checks geprüft. Fast alle bekamen ein B, aus Gründen, die der Inhaber nie gewählt hat.","2026-10-06","\u002Fblog\u002Fis-base44-safe\u002Fcard-800x500.png",{"path":478,"title":479,"description":480,"published":481,"category":451,"image":482,"draft":404},"\u002Fblog\u002Fmove-a-secret-to-an-edge-function","API-Schlüssel verstecken: ab in eine Supabase Edge Function","Einen API-Schlüssel verstecken heißt, ihn aus dem Browser zu nehmen. Eine Supabase Edge Function ist der kleinste Ort dafür, und zwei Schritte zählen mehr.","2026-10-05","\u002Fblog\u002Fmove-a-secret-to-an-edge-function\u002Fcard-800x500.png",{"path":484,"title":485,"description":486,"published":487,"category":451,"image":488,"draft":404},"\u002Fblog\u002Fenv-file-exposed-on-your-server","Ist deine .env-Datei öffentlich? Zwölf Pfade zum Prüfen","Ist deine .env-Datei auf deinem eigenen Webserver öffentlich? Zwölf Adressen sagen es dir, und ein Treffer heißt: alles darin ist längst öffentlich.","2026-10-04","\u002Fblog\u002Fenv-file-exposed-on-your-server\u002Fcard-800x500.png",{"path":490,"title":491,"description":492,"published":493,"category":451,"image":494,"draft":404},"\u002Fblog\u002Fis-v0-safe","v0-Sicherheit: alle 1.790 gescannten v0-Apps bekamen ein A","v0-Sicherheit, gemessen an 1.790 laufenden v0-Apps: Jede bekam ein A. Nur 17 nannten eine Datenbank, und genau das misst das A vor allem.","2026-10-03","\u002Fblog\u002Fis-v0-safe\u002Fcard-800x500.png",{"path":496,"title":497,"description":498,"published":499,"category":451,"image":500,"draft":404},"\u002Fblog\u002Fis-bolt-safe","Ist Bolt sicher? Was 1.123 echte Bolt-Apps zeigten","Ist Bolt sicher? Wir haben 1.123 laufende Bolt-Apps mit neun Checks geprüft. Das Hosting war sauber. Die Funde waren Schlüssel und offene Tabellen in den Apps.","2026-10-02","\u002Fblog\u002Fis-bolt-safe\u002Fcard-800x500.png",{"path":502,"title":503,"description":504,"published":505,"category":451,"image":506,"draft":404},"\u002Fblog\u002Fis-supabase-down-or-your-app","Ist Supabase down oder liegt es an deiner App? So erkennst du es","Ist Supabase down oder liegt es an deiner App? Ein pausiertes Projekt, eine volle Datenbank und ein eigener Fehler sehen gleich aus. Vier Prüfungen helfen.","2026-10-01","\u002Fblog\u002Fis-supabase-down-or-your-app\u002Fcard-800x500.png",{"path":508,"title":509,"description":510,"published":511,"category":451,"image":512,"draft":404},"\u002Fblog\u002Fdoes-supabase-encrypt-my-data","Verschlüsselt Supabase meine Daten? Ja. Wovor das schützt","Verschlüsselt Supabase Daten? Ja: AES-256 im Ruhezustand, TLS bei der Übertragung, SOC 2 und ISO 27001. Was jedes abdeckt und welches Leck keines stoppt.","2026-09-30","\u002Fblog\u002Fdoes-supabase-encrypt-my-data\u002Fcard-800x500.png",{"path":514,"title":515,"description":516,"published":517,"category":451,"image":518,"draft":404},"\u002Fblog\u002Fsupabase-free-plan-limits","Supabase Gratis-Tarif: die Limits und was an jedem passiert","Die Limits des Supabase-Gratis-Tarifs: 500 MB Datenbank, 5 GB Egress und keine Backups. Was an jeder Grenze passiert und was $25 für Pro ändern.","2026-09-29","\u002Fblog\u002Fsupabase-free-plan-limits\u002Fcard-800x500.png",{"path":520,"title":521,"description":522,"published":523,"category":400,"image":524,"draft":404},"\u002Fblog\u002Ftest-your-supabase-backup","Teste dein Supabase-Backup, bevor du es brauchst","So testest du dein Supabase-Backup: in ein Übungsprojekt einspielen, Zeilen zählen, anmelden und die Zeile suchen, die einer abgeschnittenen Datei fehlt.","2026-09-28","\u002Fblog\u002Ftest-your-supabase-backup\u002Fcard-800x500.png",{"path":526,"title":527,"description":528,"published":529,"category":400,"image":530,"draft":404},"\u002Fblog\u002Fsupabase-backup-github-action","Kostenloses Supabase-Backup per GitHub Action, mit Haken","Eine Supabase-Backup-GitHub-Action kostet nichts und passt für viele Apps. Der Workflow, der richtige Connection String und das Egress pro Lauf.","2026-09-27","\u002Fblog\u002Fsupabase-backup-github-action\u002Fcard-800x500.png",{"path":532,"title":533,"description":534,"published":535,"category":400,"image":536,"draft":404},"\u002Fblog\u002Fdownload-your-supabase-backup","Warum du dein Supabase-Backup nicht herunterladen kannst","Dein Supabase-Backup kannst du auf aktuellen Projekten nicht herunterladen, weil die Tageskopie physisch ist. Wie du es prüfst und selbst eine Kopie hältst.","2026-09-26","\u002Fblog\u002Fdownload-your-supabase-backup\u002Fcard-800x500.png",{"path":538,"title":539,"description":540,"published":535,"category":451,"image":541,"draft":404},"\u002Fblog\u002Fsupabase-permission-denied-for-table","Supabase \"permission denied for table\": der fehlende Grant","Ab 30. Oktober antwortet eine neue Supabase-Tabelle mit \"permission denied for table\", bis du Zugriff erteilst. Der Grant aus der E-Mail ist die halbe Lösung.","\u002Fblog\u002Fsupabase-permission-denied-for-table\u002Fcard-800x500.png",{"path":543,"title":544,"description":545,"published":546,"category":451,"image":547,"draft":404},"\u002Fblog\u002Fopen-api-endpoint-exposed","Ist ein offener API-Endpunkt ein Sicherheitsproblem? Sieh ins JSON","Dein Scan hat einen offenen API-Endpunkt gemeldet. Ob das zählt, hängt davon ab, was zurückkam, und die meisten hier gehörten der Plattform.","2026-09-25","\u002Fblog\u002Fopen-api-endpoint-exposed\u002Fcard-800x500.png",{"path":549,"title":550,"description":551,"published":552,"category":451,"image":553,"draft":404},"\u002Fblog\u002Flovable-security-scan","Lovable Security Scan: das Eine, was er nicht beweist","Lovable Security Scan: was Quick Scan und Deep Scan prüfen, wann welcher läuft, und das Eine, was kein Scan von innen beweisen kann.","2026-09-24","\u002Fblog\u002Flovable-security-scan\u002Fcard-800x500.png",{"path":555,"title":556,"description":557,"published":558,"category":400,"image":559,"draft":404},"\u002Fblog\u002Fsupabase-backup-auth-users","Warum in deinem Supabase-Dump keine Nutzer stehen","Führe supabase db dump allein aus und du bekommst die Form deiner Datenbank und keine einzige Zeile, und das auth-Schema mit deinen Nutzern fehlt ganz.","2026-09-23","\u002Fblog\u002Fsupabase-backup-auth-users\u002Fcard-800x500.png",{"path":561,"title":562,"description":563,"published":564,"category":451,"image":565,"draft":404},"\u002Fblog\u002Fdomain-and-certificate-expiry","Domain abgelaufen, Website offline: was jetzt passiert","Deine Domain ist abgelaufen und deine Website ist offline. Welche Frist jetzt läuft, warum das Zertifikat das kleinere Problem ist, und wie du beides prüfst.","2026-09-22","\u002Fblog\u002Fdomain-and-certificate-expiry\u002Fcard-800x500.png",{"path":567,"title":568,"description":569,"published":570,"category":451,"image":571,"draft":404},"\u002Fblog\u002Fis-lovable-safe","Ist Lovable sicher? Was 18.554 echte Lovable-Apps zeigten","Ist Lovable sicher? Wir haben 18.554 laufende Lovable-Apps mit neun Checks geprüft. Die Plattform war die sauberste von fünf. Die Funde saßen in den Apps.","2026-09-21","\u002Fblog\u002Fis-lovable-safe\u002Fcard-800x500.png",{"path":573,"title":574,"description":575,"published":576,"category":451,"image":577,"draft":404},"\u002Fblog\u002Fvibe-coded-app-security-checklist","Die Sicherheits-Checkliste für Vibe-Coding, in neun Prüfungen","Eine Sicherheits-Checkliste für Vibe-Coding mit neun Punkten, die jeder von außen an deiner Live-App nachprüfen kann, jeder mit einem Test in einer Zeile.","2026-09-20","\u002Fblog\u002Fvibe-coded-app-security-checklist\u002Fcard-800x500.png",{"path":579,"title":580,"description":581,"published":582,"category":451,"image":583,"draft":404},"\u002Fblog\u002Fstripe-secret-key-in-frontend","Ein geheimer Stripe-Schlüssel im Frontend kann Geld bewegen","Ein geheimer Stripe-Schlüssel im Frontend kann erstatten, abbuchen und jeden Kundendatensatz lesen, den du hast. Dein pk_live_-Schlüssel gehört dorthin.","2026-09-19","\u002Fblog\u002Fstripe-secret-key-in-frontend\u002Fcard-800x500.png",{"path":585,"title":586,"description":587,"published":588,"category":451,"image":589,"draft":404},"\u002Fblog\u002Fvite-and-next-public-env-vars","Vite-Env-Variablen offengelegt: der Präfix heißt veröffentlichen","Vite-Env-Variablen offengelegt: Deine App hat getan, was der Präfix verlangt. VITE_ und NEXT_PUBLIC_ heißen veröffentlichen, und die KI kannte den Preis nie.","2026-09-18","\u002Fblog\u002Fvite-and-next-public-env-vars\u002Fcard-800x500.png",{"path":591,"title":592,"description":593,"published":594,"category":451,"image":595,"draft":404},"\u002Fblog\u002Fbase44-source-maps","Base44-Sicherheit: was ein Scan meldet und was du ändern kannst","Base44-Sicherheit auf 5.438 gescannten Apps: Drei Befunde auf fast jeder gehören der Plattform, die Source Map ist das Base44-Badge, und deine Liste ist kurz.","2026-09-17","\u002Fblog\u002Fbase44-source-maps\u002Fcard-800x500.png",{"path":597,"title":598,"description":599,"published":600,"category":451,"image":601,"draft":404},"\u002Fblog\u002Fis-cursor-ai-safe","Ist Cursor AI sicher? Editor, Code und die App, die du veröffentlichst","Ist Cursor AI sicher? Drei Fragen in einer Suche: was Cursor behält, was sein Code falsch macht und ob deine veröffentlichte App offen steht.","2026-09-16","\u002Fblog\u002Fis-cursor-ai-safe\u002Fcard-800x500.png",{"path":603,"title":604,"description":605,"published":606,"category":451,"image":607,"draft":404},"\u002Fblog\u002Fis-replit-safe","Ist Replit sicher? Was wir in 3.042 Replit-Apps gefunden haben","Ist Replit sicher? Wir haben 3.042 laufende Replit-Apps mit neun externen Checks geprüft. Die Funde saßen in der veröffentlichten App, nicht im Hosting.","2026-09-15","\u002Fblog\u002Fis-replit-safe\u002Fcard-800x500.png",{"path":436,"title":5,"description":403,"published":437,"category":400,"image":422,"draft":404},{"path":42,"title":610,"description":611,"published":612,"category":400,"image":613,"draft":404},"Supabase Point-in-Time Recovery: Kosten und Grenzen","Supabase Point-in-Time Recovery spult deine Datenbank auf jede Sekunde der letzten Woche zurück. $100 im Monat zusätzlich zu Pro, und nur die Datenbank.","2026-09-13","\u002Fblog\u002Fsupabase-point-in-time-recovery\u002Fcard-800x500.png",{"path":615,"title":616,"description":617,"published":618,"category":400,"image":619,"draft":404},"\u002Fblog\u002Fsupabase-project-paused-recover","Supabase-Projekt pausiert? Deine Daten sind noch da","Supabase hat dein Projekt nach einer Woche ohne Aktivität pausiert. Gelöscht ist nichts, Wiederherstellen steht neben dem Namen, und du hast ein Jahr.","2026-09-12","\u002Fblog\u002Fsupabase-project-paused-recover\u002Fcard-800x500.png",{"path":621,"title":622,"description":623,"published":624,"category":451,"image":625,"draft":404},"\u002Fblog\u002Fsafest-ai-app-builder","Welcher KI-App-Builder ist am sichersten? 30.998 Apps im Test","Welcher KI-App-Builder ist am sichersten? Wir haben 30.998 aktive Apps von Lovable, Base44, Replit, v0 und Bolt gescannt. Der Builder entscheidet das nicht.","2026-09-11","\u002Fblog\u002Fsafest-ai-app-builder\u002Fcard-800x500.png",{"path":627,"title":628,"description":629,"published":630,"category":451,"image":631,"draft":404},"\u002Fblog\u002Fenable-rls-on-every-supabase-table","Row Level Security für jede Supabase-Tabelle aktivieren und prüfen","Row Level Security in Supabase ohne Policy sperrt eine Tabelle komplett. Eine Policy ohne den Schalter bringt gar nichts. Hier ist das SQL, und der Test.","2026-09-10","\u002Fblog\u002Fenable-rls-on-every-supabase-table\u002Fcard-800x500.png",{"path":633,"title":634,"description":635,"published":636,"category":451,"image":637,"draft":404},"\u002Fblog\u002Fsupabase-rls-disabled-in-public","Supabase \"RLS disabled in public\": was die Warnung übersieht","Supabase meldet \"RLS disabled in public\" als Fehler. Zur Lese-Policy, die deine Tabelle genauso offen lässt, sagt der Advisor gar nichts.","2026-09-09","\u002Fblog\u002Fsupabase-rls-disabled-in-public\u002Fcard-800x500.png",{"path":639,"title":640,"description":641,"published":642,"category":451,"image":643,"draft":404},"\u002Fblog\u002Frotate-supabase-service-role-key","Geleakten Supabase-service_role-Schlüssel richtig tauschen","Supabase sagt: erst das Leck schließen. Andere Anleitungen: sofort tauschen. Was richtig ist, hängt davon ab, wohin dein service_role-Schlüssel gelangt ist.","2026-09-08","\u002Fblog\u002Frotate-supabase-service-role-key\u002Fcard-800x500.png",{"path":645,"title":646,"description":647,"published":648,"category":451,"image":649,"draft":404},"\u002Fblog\u002Fvibe-coding-security-scanners-compared","Vibe-Coding-Security-Scanner im Vergleich, unserer eingeschlossen","Der beste Vibe-Coding-Security-Scanner hängt an drei Fragen, die keine Funktionsliste beantwortet. Zehn Tools im Vergleich, mit Preisen und unseren Lücken.","2026-09-07","\u002Fblog\u002Fvibe-coding-security-scanners-compared\u002Fcard-800x500.png",{"path":651,"title":652,"description":653,"published":654,"category":451,"image":655,"draft":404},"\u002Fblog\u002Fsupabase-security-checker","Supabase Security Checker: die fünf Prüfungen selbst machen","Ein Supabase Security Checker liest deine veröffentlichte App statt deiner Projekteinstellungen. Hier sind die fünf Prüfungen und wie du jede selbst ausführst.","2026-09-06","\u002Fblog\u002Fsupabase-security-checker\u002Fcard-800x500.png",{"path":657,"title":658,"description":659,"published":660,"category":451,"image":661,"draft":404},"\u002Fblog\u002Fvibe-coding-security-scanner","Vibe-Coding-Security-Scanner: was ein URL-Scan übersieht","Ein Vibe-Coding-Security-Scanner liest deine laufende App von außen. Was das abdeckt, die vier Dinge, die er nicht sehen kann, und wie du das Ergebnis liest.","2026-09-05","\u002Fblog\u002Fvibe-coding-security-scanner\u002Fcard-800x500.png",{"path":663,"title":664,"description":665,"published":666,"category":451,"image":667,"draft":404},"\u002Fblog\u002Fmissing-security-headers","Fehlende Sicherheitsheader: wann sie wirklich zählen","Fehlende Sicherheitsheader ist unser häufigster Befund. Wogegen sie schützen, und wann sie die unwichtigste Zeile in deinem Bericht sind.","2026-09-04","\u002Fblog\u002Fmissing-security-headers\u002Fcard-800x500.png",{"path":669,"title":670,"description":671,"published":672,"category":451,"image":673,"draft":404},"\u002Fblog\u002Fopenai-api-key-exposed-in-frontend","Dein OpenAI-API-Schlüssel liegt im Frontend. Tausch ihn aus.","Ein OpenAI-API-Schlüssel im Frontend lässt sich an keine Domain binden. Tausch ihn heute, leg den Aufruf hinter deinen Server und begrenze das Budget.","2026-09-03","\u002Fblog\u002Fopenai-api-key-exposed-in-frontend\u002Fcard-800x500.png",{"path":675,"title":676,"description":677,"published":678,"category":451,"image":679,"draft":404},"\u002Fblog\u002Fwhat-secrets-leak-from-vibe-coded-apps","API-Schlüssel im Frontend: was 30.998 Apps wirklich ausliefern","Ein API-Schlüssel im Frontend ist meistens ein Google-Maps-Schlüssel. Wir haben 30.998 aktive Vibe-Coding-Apps gescannt und gezählt, was wirklich austritt.","2026-09-02","\u002Fblog\u002Fwhat-secrets-leak-from-vibe-coded-apps\u002Fcard-800x500.png",{"path":681,"title":682,"description":683,"published":684,"category":400,"image":685,"draft":404},"\u002Fblog\u002Fsupabase-backup-tools-compared","Supabase-Backup-Tools im Vergleich, unseres eingeschlossen","Vier Arten von Supabase-Backup-Tool, was jedes wirklich kopiert und wann eine kostenlose GitHub Action jeden Anbieter schlägt, uns eingeschlossen.","2026-09-01","\u002Fblog\u002Fsupabase-backup-tools-compared\u002Fcard-800x500.png",{"path":687,"title":688,"description":689,"published":690,"category":451,"image":691,"draft":404},"\u002Fblog\u002Freplit-secrets-explained","Secrets in Replit nutzen, und was trotzdem veröffentlicht wird","Secrets in Replit nutzen: anlegen, auslesen und die zwei Gründe beheben, warum undefined zurückkommt. Dazu die Schlüssel, die das Werkzeug nicht schützt.","2026-08-31","\u002Fblog\u002Freplit-secrets-explained\u002Fcard-800x500.png",{"path":693,"title":694,"description":695,"published":696,"category":400,"image":697,"draft":404},"\u002Fblog\u002Fback-up-supabase-free-tier","Supabase Gratis-Tarif: Backup ohne Terminal selbst machen","Im Supabase Gratis-Tarif gibt es keine Backups, die Kopie musst du selbst machen. Wie das im Dashboard geht und was der CSV-Weg auslässt.","2026-08-30","\u002Fblog\u002Fback-up-supabase-free-tier\u002Fcard-800x500.png",{"path":699,"title":700,"description":701,"published":702,"category":451,"image":703,"draft":404},"\u002Fblog\u002Fis-supabase-secure","Ist Supabase sicher? Ja. Dein Projekt ist eine eigene Frage","Ist Supabase sicher? Die Plattform ist auditiert, verschlüsselt und pentestet. Supabase schreibt selbst auf, wo das aufhört und deine Einstellungen anfangen.","2026-08-29","\u002Fblog\u002Fis-supabase-secure\u002Fcard-800x500.png",{"path":705,"title":706,"description":707,"published":708,"category":451,"image":709,"draft":404},"\u002Fblog\u002Fwhere-to-find-supabase-api-keys","Wo du deine Supabase API-Keys findest: anon, service_role, URL","Projekt-URL, anon-Schlüssel und service_role-Schlüssel liegen auf einer Seite im Dashboard. Wo sie ist, und welcher der vier Werte in deine App gehört.","2026-08-28","\u002Fblog\u002Fwhere-to-find-supabase-api-keys\u002Fcard-800x500.png",{"path":711,"title":712,"description":713,"published":714,"category":451,"image":715,"draft":404},"\u002Fblog\u002Fnew-row-violates-row-level-security-policy","New row violates row-level security policy in Supabase: was jetzt?","\"New row violates row-level security policy\" heißt, Supabase hat einen Schreibvorgang abgelehnt. Die schnelle Lösung öffnet die Tabelle wieder für alle.","2026-08-27","\u002Fblog\u002Fnew-row-violates-row-level-security-policy\u002Fcard-800x500.png",{"path":717,"title":718,"description":719,"published":720,"category":451,"image":721,"draft":404},"\u002Fblog\u002Fcors-wildcard-security-risk","Ist eine CORS-Wildcard ein Sicherheitsrisiko? Meist nicht.","Ist eine CORS-Wildcard ein Sicherheitsrisiko? Meist ist sie die Voreinstellung deines Builders und gibt nichts preis, was dein Server nicht ohnehin herausgab.","2026-08-26","\u002Fblog\u002Fcors-wildcard-security-risk\u002Fcard-800x500.png",{"path":723,"title":724,"description":725,"published":726,"category":400,"image":727,"draft":404},"\u002Fblog\u002Fsupabase-branching-is-not-a-backup","Supabase Branching ist kein Backup. Es geht nur vorwärts.","Warum Supabase Branching kein Backup ist: Ein Branch startet ohne deine Daten, und ein Merge bringt nur das Schema. Wofür es gut ist und was stattdessen hilft.","2026-08-25","\u002Fblog\u002Fsupabase-branching-is-not-a-backup\u002Fcard-800x500.png",{"path":121,"title":729,"description":730,"published":731,"category":400,"image":732,"draft":404},"Supabase-Backup wiederherstellen, und was danach kaputt ist","Wie du ein Supabase-Backup aus dem Dashboard oder aus einer Dump-Datei wiederherstellst, was ersetzt wird und warum die App danach kaputt sein kann.","2026-08-24","\u002Fblog\u002Fhow-to-restore-a-supabase-backup\u002Fcard-800x500.png",{"path":385,"title":734,"description":735,"published":736,"category":451,"image":737,"draft":404},"Dein Supabase-Storage-Bucket ist öffentlich. Ist das ein Problem?","Ein öffentlicher Supabase-Storage-Bucket heißt: Wer die URL einer Datei hat, kann sie öffnen. Er heißt nicht, dass jemand den Inhalt auflisten darf.","2026-08-23","\u002Fblog\u002Fsupabase-storage-bucket-public\u002Fcard-800x500.png",{"path":739,"title":740,"description":741,"published":742,"category":451,"image":743,"draft":404},"\u002Fblog\u002Fgoogle-api-key-exposed-in-frontend","Ist ein Google-API-Schlüssel im Frontend ein Problem?","Ein Google-API-Schlüssel im Frontend ist der Fund unseres Scanners Nummer eins, und meistens unbedenklich. Eine kostenlose Einstellung entscheidet darüber.","2026-08-22","\u002Fblog\u002Fgoogle-api-key-exposed-in-frontend\u002Fcard-800x500.png",{"path":745,"title":746,"description":747,"published":748,"category":400,"image":749,"draft":404},"\u002Fblog\u002Fai-agent-deleted-my-database","Ein KI-Agent hat meine Supabase-Daten gelöscht. Was hole ich zurück?","Ein KI-Agent hat Daten aus deiner Datenbank gelöscht. Was du zurückholst, stand schon vorher fest, und die nächsten Minuten entscheiden über den Rest.","2026-08-21","\u002Fblog\u002Fai-agent-deleted-my-database\u002Fcard-800x500.png",{"path":751,"title":752,"description":753,"published":754,"category":451,"image":755,"draft":404},"\u002Fblog\u002Fcan-anyone-read-your-supabase-database","Kann jeder deine Supabase-Datenbank lesen? 3.680 Apps im Test","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.","2026-08-18","\u002Fblog\u002Fcan-anyone-read-your-supabase-database\u002Fcard-800x500.png",{"path":757,"title":758,"description":759,"published":754,"category":451,"image":760,"draft":404},"\u002Fblog\u002Fsource-maps-exposed-in-production","Source-Maps öffentlich: deine App veröffentlicht ihren Quellcode","Eine öffentliche Source-Map lässt jeden den Originalcode deiner App lesen, Kommentare inklusive. Der 30-Sekunden-Check, und was wirklich zählt.","\u002Fblog\u002Fsource-maps-exposed-in-production\u002Fcard-800x500.png",{"path":762,"title":763,"description":764,"published":765,"category":451,"image":766,"draft":404},"\u002Fblog\u002Fsupabase-new-api-keys","Supabases neue API-Schlüssel: welcher gehört in deine App?","Supabase hat anon und service_role durch öffentliche und geheime Schlüssel ersetzt. Welcher gehört in deine App, und welcher nie?","2026-08-12","\u002Fblog\u002Fsupabase-new-api-keys\u002Fcard-800x500.png",{"path":58,"title":768,"description":769,"published":770,"category":400,"image":771,"draft":404},"Sichert Supabase meine Datenbank? Das hängt von deinem Tarif ab.","Sichert Supabase deine Datenbank? Auf bezahlten Tarifen täglich, im Gratis-Tarif gar nicht. So findest du heraus, was du hast und was es nicht abdeckt.","2026-08-11","\u002Fblog\u002Fdoes-supabase-back-up-my-database\u002Fcard-800x500.png",{"path":773,"title":774,"description":775,"published":776,"category":451,"image":777,"draft":404},"\u002Fblog\u002Fsupabase-rls-on-but-table-still-public","Supabase Row Level Security ist an. Die Tabelle ist trotzdem offen.","Supabase Row Level Security anzuschalten schützt keine Tabelle. Erst deine Policies tun das, und die, die deine App repariert hat, lässt oft alle herein.","2026-08-10","\u002Fblog\u002Fsupabase-rls-on-but-table-still-public\u002Fcard-800x500.png",{"path":779,"title":780,"description":781,"published":776,"category":400,"image":782,"draft":404},"\u002Fblog\u002Fversion-history-is-not-a-backup","Der Versionsverlauf ist kein Backup. Er holt keine Tabelle zurück.","Lovable und Bolt führen einen Versionsverlauf für deinen Code. Deine Datenbank ist ein eigener Dienst, und ein Rücksprung holt deine Daten nicht zurück.","\u002Fblog\u002Fversion-history-is-not-a-backup\u002Fcard-800x500.png",{"path":784,"title":785,"description":786,"published":787,"category":400,"image":788,"draft":404},"\u002Fblog\u002Fthree-ways-to-back-up-a-supabase-database","Drei Wege, eine Supabase-Datenbank zu sichern, und was fehlt","Das Dashboard, pg_dump und ein verwalteter Dienst. Was jeder Weg wirklich sichert, was er stillschweigend auslässt und welcher den Kontoverlust übersteht.","2026-08-09","\u002Fblog\u002Fthree-ways-to-back-up-a-supabase-database\u002Fcard-800x500.png",{"path":204,"title":790,"description":791,"published":787,"category":451,"image":792,"draft":404},"Welche API-Schlüssel im Frontend sicher sind, und welche nicht","Dein Supabase-anon-Schlüssel darf öffentlich sein. Der service_role-Schlüssel nicht. Er ignoriert jede Regel, die du setzt. So erkennst du den Unterschied.","\u002Fblog\u002Fwhich-api-keys-are-safe-in-your-frontend\u002Fcard-800x500.png",1791618966337]