[{"data":1,"prerenderedAt":664},["ShallowReactive",2],{"blog-de-rotate-supabase-service-role-key":3,"blog-index-de":423},{"id":4,"title":5,"body":6,"category":380,"cover":381,"coverAlt":382,"description":383,"draft":384,"extension":385,"faq":386,"image":401,"keywords":402,"meta":411,"navigation":412,"ogTitle":413,"path":414,"published":415,"seo":416,"stem":417,"tldr":418,"updated":415,"__hash__":422},"blog_de\u002Fblog\u002Frotate-supabase-service-role-key.md","Geleakten Supabase-service_role-Schlüssel richtig tauschen",{"type":7,"value":8,"toc":365},"minimark",[9,24,27,30,33,41,52,55,70,81,85,88,95,101,104,110,114,120,123,148,151,154,161,170,176,207,218,223,231,241,245,248,266,276,282,286,289,292,295,304,308,311,314,320,324,355],[10,11,12,13,17,18,23],"p",{},"Jemand hat dir gesagt, dein Supabase-",[14,15,16],"code",{},"service_role","-Schlüssel liege in deiner\nApp, wo ihn jeder lesen kann. Bevor du irgendetwas änderst, vergewissere dich,\ndass es wirklich dieser Schlüssel ist: ",[19,20,22],"a",{"href":21},"\u002F#scan","unser kostenloser Scan"," liest\ndeine Live-Seite so, wie ein Fremder sie liest, und sagt dir, welchen\nSupabase-Schlüssel er dort tatsächlich sieht. Ohne Konto und ohne Installation.",[10,25,26],{},"Der Rat, der auf so einen Fund folgt, ist fast immer ein Wort: tauschen. Dann\nsuchst du, wie das geht, und die Quellen widersprechen sich. Supabases eigene\nDokumentation beginnt ihre Rotationsanleitung damit, zuerst die Ursache des\nLecks zu beheben. Ein halbes Dutzend Anleitungen von Dritten sagt, du sollst\nsofort tauschen und hinterher Fragen stellen.",[10,28,29],{},"Hier ist der Punkt, den keine von beiden aufschreibt: Beide haben recht, für\nunterschiedliche Situationen. Und die Frage, die sie trennt, ist, wohin der\nSchlüssel gelangt ist.",[10,31,32],{},"Eines vorweg. Den Schlüssel aus deinem Code zu löschen nimmt deine eigene Kopie\nvom Bund. Ihn zu tauschen wechselt das Schloss. Nur das Zweite erreicht die\nKopien, die andere längst haben.",[34,35,37,38,40],"h2",{"id":36},"ist-es-wirklich-der-service_role-schlüssel","Ist es wirklich der ",[14,39,16],{},"-Schlüssel?",[10,42,43,44,47,48,51],{},"In einem neueren Projekt beantworten das die ersten Zeichen. ",[14,45,46],{},"sb_secret_"," am\nAnfang ist der geheime. ",[14,49,50],{},"sb_publishable_"," ist der Schlüssel, der in deine App\ngehört, und ihn dort zu finden ist überhaupt kein Fund.",[10,53,54],{},"Vergewissere dich, bevor du etwas Einschneidendes tust, denn der Schlüssel, den\nman in einer vibe-codeten App findet, ist meistens der, der dort hingehört.",[10,56,57,58,61,62,64,65,69],{},"Ältere Projekte vergeben ein anderes Paar, ",[14,59,60],{},"anon"," und ",[14,63,16],{},", und die\nbeiden sehen fast gleich aus: gleiches Format, gleiche Länge, kein Präfix zum\nLesen. Der mittlere Abschnitt eines solchen Schlüssels ist gar nicht\nverschlüsselt. Er dekodiert zu ein paar Zeilen Klartext, und eine davon nennt\ndie Rolle.\n",[19,66,68],{"href":67},"\u002Fblog\u002Fwhich-api-keys-are-safe-in-your-frontend","Welche API-Schlüssel im Frontend sicher sind","\ngeht beide Prüfungen durch.",[10,71,72,73,75,76,80],{},"Der Grund, sicherzugehen: Das ist seltener, als die Warnungen vermuten lassen.\nWir haben 30.998 aktive vibe-codete Apps im August 2026 gescannt und in 3 davon\neinen ausgelieferten ",[14,74,16],{},"-Schlüssel gefunden. Ein Google-API-Schlüssel,\nder meist harmlos und oft auf eine Domain beschränkt ist, tauchte in 1.142 auf.\n",[19,77,79],{"href":78},"\u002Fresearch\u002Fvibe-coded-app-security-2026","Die vollständige Zählung steht hier",".",[34,82,84],{"id":83},"erst-tauschen-oder-erst-das-leck-schließen","Erst tauschen oder erst das Leck schließen?",[10,86,87],{},"Es hängt davon ab, ob der Schlüssel schon öffentlich ist, und die Linie zwischen\nbeiden Fällen ist klar.",[10,89,90,94],{},[91,92,93],"strong",{},"Steckt der Schlüssel im JavaScript, das deine Besucher herunterladen, ist er\njetzt öffentlich."," Jeder, der deine Seite geladen hat, während er live war, hat\neine Kopie, und jeder automatische Crawler, der genau nach dieser Zeichenfolge\ngesucht hat, ebenfalls. Nichts, was du in deinem Code änderst, erreicht diese\nKopien. Erst tauschen, dann die Quelle schließen.",[10,96,97,100],{},[91,98,99],{},"Ist er nur in ein privates Repository, eine Logdatei, eine CI-Variable oder\neinen Chat gelangt, ist die Offenlegung begrenzt."," Tauschst du hier zuerst,\nmachst du es zweimal, denn der nächste Deploy schiebt den alten Wert wieder aus\ndem heraus, was ihn erzeugt hat, und dein neuer Schlüssel folgt dem alten.\nZuerst die Quelle schließen, dann tauschen.",[10,102,103],{},"Supabases Anleitung ist für den zweiten Fall geschrieben. Die dringlichen\nAnleitungen sind für den ersten. Wenn du das hier liest, weil ein Scanner den\nSchlüssel auf deiner Live-URL gefunden hat, bist du im ersten Fall.",[105,106],"diagram",{"alt":107,"caption":108,"src":109},"Zwei Spuren. Die obere beginnt bei einem Browserfenster und läuft über Schritt eins, einen Schlüssel mit Rotationspfeil, dann Schritt zwei, ein Paar spitze Klammern. Die untere beginnt bei einer Datei und läuft über dieselben zwei Schritte in umgekehrter Reihenfolge, erst die Klammern, dann der Schlüssel.","Dieselben zwei Aufgaben, umgekehrte Reihenfolge. Entschieden wird es davon, ob die geleakte Kopie schon draußen in der Welt ist.","\u002Fblog\u002Frotate-supabase-service-role-key\u002Ftwo-orders-1600x640.png",[34,111,113],{"id":112},"so-tauschst-du-einen-geheimen-supabase-schlüssel","So tauschst du einen geheimen Supabase-Schlüssel",[10,115,116,117,119],{},"Hat dein Projekt ",[14,118,46],{},"-Schlüssel, ist das eine Sache für das Dashboard,\nohne Ausfallzeit.",[10,121,122],{},"Ein Projekt kann mehrere geheime Schlüssel gleichzeitig halten, jeden mit\neigenem Namen, und genau das macht es sicher: Du legst den neuen an, bevor du\nden alten wegnimmst, also ist dazwischen nichts kaputt.",[124,125,126,134,142,145],"ol",{},[127,128,129,130,133],"li",{},"Öffne dein Projekt, geh zu ",[91,131,132],{},"Settings → API Keys"," und lege einen neuen\ngeheimen Schlüssel an.",[127,135,136,137,141],{},"Setze ihn überall dort ein, wo der alte benutzt wurde, und das sollte alles\nauf einem Server sein: Edge Functions, Webhooks, geplante Jobs, ein eigenes\nBackend. ",[19,138,140],{"href":139},"\u002Fblog\u002Fwhere-to-find-supabase-api-keys","Wo diese Werte liegen",",\nfalls du diese Seite noch nie geöffnet hast.",[127,143,144],{},"Deploye, dann klick dich durch die Stellen deiner App, die Daten lesen und\nschreiben. Ein falscher geheimer Schlüssel scheitert laut und sofort, und das\nist der gute Fall.",[127,146,147],{},"Erst danach löschst du den kompromittierten Schlüssel.",[10,149,150],{},"Schritt 4 ist endgültig. Supabase löscht einen geheimen Schlüssel wirklich: kein\nRückgängig, kein Wiedereinschalten, keine geparkte Kopie, die du zurückholen\nkannst. Deshalb kommt er zuletzt.",[10,152,153],{},"Das Löschen eines geheimen Schlüssels meldet deine Nutzer nicht ab. Ein\nAPI-Schlüssel sagt, welche Anwendung deine Datenbank anspricht, und das\nSitzungstoken eines Besuchers sagt, wer dieser Nutzer ist. Das Zweite wird gegen\nden Signaturschlüssel deines Projekts geprüft, und das ist ein eigener Wert, den\ndu nicht angefasst hast.",[34,155,157,158,160],{"id":156},"warum-ein-alter-supabase-service_role-schlüssel-nicht-tauschbar-ist","Warum ein alter Supabase-",[14,159,16],{},"-Schlüssel nicht tauschbar ist",[10,162,163,164,166,167,169],{},"Weil es dafür keinen Knopf gibt. Der Troubleshooting-Hinweis von Supabase sagt,\ndass ein direktes Rotieren der alten ",[14,165,60],{},"-, ",[14,168,16],{},"- und JWT-Secrets\nnicht mehr unterstützt wird, und verweist stattdessen auf die neuen Schlüssel.",[10,171,172,173,175],{},"Einen geleakten alten ",[14,174,16],{},"-Schlüssel ungültig zu machen ist also eine\nMigration und keine Rotation:",[124,177,178,190,196,201],{},[127,179,180,183,184,186,187,189],{},[91,181,182],{},"Lege die neuen Schlüssel an."," Das ergänzt ",[14,185,50],{}," und\n",[14,188,46],{}," neben dem alten Paar. Beide Systeme laufen gleichzeitig, und\nnichts geht kaputt.",[127,191,192,195],{},[91,193,194],{},"Zieh dein Frontend auf den öffentlichen Schlüssel um."," In Lovable oder\nBolt ist das meist ein Wert in deinen Projekteinstellungen und keine\nCodezeile.",[127,197,198],{},[91,199,200],{},"Zieh jede serverseitige Verwendung auf den geheimen Schlüssel um.",[127,202,203,206],{},[91,204,205],{},"Deaktiviere die alten Schlüssel"," in deinen Projekteinstellungen.",[10,208,209,210,186,212,214,215,217],{},"Schritt 4 ist ein Schalter, und er betrifft beide alten Schlüssel. ",[14,211,60],{},[14,213,16],{}," sind JWTs, die mit demselben Secret signiert sind. Der Schalter,\nder einen widerruft, widerruft also auch den anderen, und ein Frontend, das noch\nden alten ",[14,216,60],{},"-Schlüssel trägt, hört in dem Moment auf zu funktionieren, in\ndem du ihn umlegst. Deshalb kommt Schritt 2 davor.",[105,219],{"alt":220,"caption":221,"src":222},"Ein Einstellungspanel mit vier Zeilen. Die oberen beiden, sb_publishable_ und sb_secret_, tragen je einen gefüllten Punkt und einen lesbaren Wert. Unter einer Trennlinie stehen anon und service_role verblasst, ihre Werte als Punkte maskiert, und eine Klammer verbindet beide Zeilen mit einem einzigen Schalter in der Aus-Stellung.","Die alten Schlüssel zu deaktivieren ist ein Bedienelement für beide. Der anon-Schlüssel, den deine App benutzt, geht mit dem service_role-Schlüssel raus, den du ungültig machen willst.","\u002Fblog\u002Frotate-supabase-service-role-key\u002Fone-switch-two-keys-1600x720.png",[10,224,225,226,230],{},"Das Deaktivieren lässt sich rückgängig machen, und das ist hier die einzige gute\nNachricht: Falls doch noch etwas einen alten Schlüssel benutzt, schaltest du sie\nwieder ein, während du es reparierst.\n",[19,227,229],{"href":228},"\u002Fblog\u002Fsupabase-new-api-keys","Was die Migration umfasst"," steht ausführlicher\ndort.",[232,233,235],"callout",{"type":234},"warn",[10,236,237,240],{},[91,238,239],{},"Bis Schritt 4 funktioniert der geleakte Schlüssel weiter."," Die Schritte 1 bis\n3 fügen einen zweiten Weg hinein hinzu; sie nehmen nichts weg. In einem Projekt,\nin dem der Schlüssel schon öffentlich ist, macht genau das diese Reihenfolge\nunangenehm, und deshalb solltest du die vier Schritte direkt hintereinander\nerledigen. Eine halbfertige Migration lässt den alten Schlüssel aktiv und deine\nApp auf zwei Schlüsselsystemen gleichzeitig laufen.",[34,242,244],{"id":243},"woher-der-schlüssel-geleakt-ist-und-wie-du-das-schließt","Woher der Schlüssel geleakt ist, und wie du das schließt",[10,246,247],{},"Drei Ursachen erklären fast alles davon, und alle drei liegen in deinem eigenen\nProjekt.",[10,249,250,261,262,265],{},[91,251,252,253,256,257,260],{},"Ein ",[14,254,255],{},"VITE_","- oder ",[14,258,259],{},"NEXT_PUBLIC_","-Präfix."," Das ist keine Sicherheitseinstellung,\ndie jemand vergessen hat einzuschalten. Es ist eine Anweisung an den Build: Leg\ndiesen Wert ins Bundle. Eine Variable namens ",[14,263,264],{},"VITE_SUPABASE_SERVICE_ROLE_KEY","\nwurde absichtlich in dein JavaScript kompiliert, von einem Werkzeug, das genau\ndas getan hat, was man ihm gesagt hat.",[10,267,268,271,272,275],{},[91,269,270],{},"Ein Wert, direkt in eine Komponente eingefügt."," Kein Präfix im Spiel und\nkeine ",[14,273,274],{},".env","-Datei, nur der Schlüssel in einer Codezeile, weil das der\nschnellste Weg war, eine Query etwas zurückgeben zu lassen.",[10,277,278,281],{},[91,279,280],{},"Arbeit, die auf einen Server gehört."," Ein Konto löschen, in eine Tabelle\nschreiben, in die deine Nutzer nicht schreiben dürfen, Zeilen über alle hinweg\nlesen. Zu dem Schlüssel wurde gegriffen, weil der Browser die Aufgabe nicht\nerledigen konnte, und die Lösung ist, die Aufgabe zu verlagern: eine Edge\nFunction, eine Serverless Route, irgendetwas, das deine Besucher nicht\nherunterladen.",[34,283,285],{"id":284},"woher-weiß-ich-ob-jemand-ihn-benutzt-hat","Woher weiß ich, ob jemand ihn benutzt hat?",[10,287,288],{},"Sicher wissen kannst du es meistens nicht. Was du tun kannst, ist das Zeitfenster\neinzugrenzen und hineinzuschauen.",[10,290,291],{},"Das Fenster öffnet sich mit dem Deploy, der den Schlüssel zuerst ausgeliefert\nhat, und schließt sich, als du ihn deaktiviert hast. Dein Supabase-Projekt führt\nLogs für die API und für die Datenbank, und auf diesen Zeitraum filterst du sie.\nWas du suchst, sind Lese- und Schreibzugriffe, die du nicht zuordnen kannst:\nAnfragen an Tabellen, die deine App nie anfasst, Verkehr zu Stunden, in denen\nniemand die App benutzt hat, Löschungen, die niemand gemacht hat.",[10,293,294],{},"Prüf danach die Daten selbst. Zeilenzahlen gegen das, was du erwartest, deine\neigenen Kontodatensätze, alles mit einem Zeitstempel, der sich bewegt hat,\nwährend niemand gearbeitet hat. Eine Supportnachricht über Daten, die sich von\nselbst geändert haben, ist der Weg, auf dem die meisten dieser Fälle tatsächlich\nentdeckt werden, und sie kommt Wochen später.",[10,296,252,297,299,300,80],{},[14,298,16],{},"-Schlüssel erreicht weder deinen Zahlungsanbieter noch deinen\nMailversand. Trotzdem lohnt es sich zu wissen, ob er der einzige Schlüssel in\ndeinem Bundle war, denn die, die Geld ausgeben, leaken auf demselben Weg:\n",[19,301,303],{"href":302},"\u002Fblog\u002Fwhat-secrets-leak-from-vibe-coded-apps","was 30.998 Apps ausgeliefert haben",[34,305,307],{"id":306},"prüf-deine-live-app-bevor-du-sie-für-erledigt-hältst","Prüf deine Live-App, bevor du sie für erledigt hältst",[10,309,310],{},"Lade deine Seite in einem privaten Fenster, öffne das JavaScript, das dein\nBrowser heruntergeladen hat, und such darin nach dem alten Wert. Such dann nach\ndem neuen, der dort ebenfalls nicht stehen sollte.",[10,312,313],{},"Zwei Dinge machen diese Handprüfung sinnvoll. Ein Build kann nach dem Deploy\nnoch eine Weile ein gecachtes Bundle ausliefern, die Datei, die ein Besucher\nbekommt, ist also nicht immer die, die du gerade gebaut hast. Und ein Schlüssel\nkann an mehr als einer Stelle liegen: ein zweiter Einstiegspunkt, ein Service\nWorker, ein alter Build, der noch unter einem Pfad ausgeliefert wird, auf den\nniemand verlinkt.",[10,315,316,317,80],{},"Unser kostenloser Scan erledigt diesen Teil von außen, auf der URL, die deine\nBesucher tatsächlich benutzen, und er dekodiert einen Supabase-Schlüssel weit\ngenug, um die Rolle zu lesen. Ein öffentlicher Schlüssel kommt also mit einem\nHaken zurück. Das dauert etwa zwanzig Sekunden und braucht kein Konto:\n",[19,318,319],{"href":21},"scanne deine App",[34,321,323],{"id":322},"was-jetzt-zu-tun-ist","Was jetzt zu tun ist",[325,326,327],"key-takeaways",{},[328,329,330,340,343,346,349,352],"ul",{},[127,331,332,333,335,336,339],{},"Bestätige zuerst den Schlüssel. ",[14,334,46],{}," vorn, oder ",[14,337,338],{},"\"role\": \"service_role\""," in einem älteren. Ein öffentlicher Schlüssel in deinem Frontend ist kein Fund.",[127,341,342],{},"Steckt er im Bundle, das deine Besucher herunterladen, tausche ihn, bevor du Code änderst. Deine App zu bearbeiten erreicht die Kopien nicht, die schon draußen sind.",[127,344,345],{},"Ist er nur in ein Repo, ein Log oder einen Chat geleakt, schließe zuerst die Quelle, damit dein nächster Deploy den neuen Schlüssel nicht gleich wieder hinausschiebt.",[127,347,348],{},"In einem neueren Projekt: einen zweiten geheimen Schlüssel anlegen, deinen Servercode darauf umziehen, deployen, dann den alten löschen. Das Löschen ist endgültig.",[127,350,351],{},"In einem Legacy-Projekt gibt es keinen Tausch-Knopf. Lege die neuen Schlüssel an, zieh dein Frontend und deinen Server darauf um, dann deaktiviere das alte Paar mit dem einen Schalter, der beide betrifft.",[127,353,354],{},"Durchsuche danach dein Live-Bundle. Ein gecachter Build kann den alten Wert nach dem Deploy noch eine Weile ausliefern.",[10,356,252,357,359,360,364],{},[14,358,16],{},"-Schlüssel liest und schreibt jede Zeile in deiner Datenbank.\nDie schlimmste Version dieser Geschichte endet mit einer leeren Tabelle, und ob\ndiese Zeilen zurückkommen, hängt davon ab,\n",[19,361,363],{"href":362},"\u002Fblog\u002Fthree-ways-to-back-up-a-supabase-database","was du gesichert hattest",",\nbevor das alles passiert ist.",{"title":366,"searchDepth":367,"depth":367,"links":368},"",3,[369,372,373,374,376,377,378,379],{"id":36,"depth":370,"text":371},2,"Ist es wirklich der service_role-Schlüssel?",{"id":83,"depth":370,"text":84},{"id":112,"depth":370,"text":113},{"id":156,"depth":370,"text":375},"Warum ein alter Supabase-service_role-Schlüssel nicht tauschbar ist",{"id":243,"depth":370,"text":244},{"id":284,"depth":370,"text":285},{"id":306,"depth":370,"text":307},{"id":322,"depth":370,"text":323},"Sicherheitsgrundlagen","\u002Fblog\u002Frotate-supabase-service-role-key\u002Fcover-1200x630.png","Ein Vorhängeschloss und daneben zwei gleich große, identische Schlüssel, einer hell und einer verblasst.","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.",false,"md",[387,390,393,396,398],{"q":388,"a":389},"Geht meine laufende App kaputt, wenn ich den Schlüssel tausche?","Nicht, wenn du die Reihenfolge einhältst. In einem Projekt mit den neuen Schlüsseln legst du einen zweiten geheimen Schlüssel an, ziehst deinen Servercode darauf um, deployst und löschst erst dann den alten. So gibt es keinen Moment ohne funktionierenden Schlüssel. In einem Legacy-Projekt liegt das Risiko woanders: Das Deaktivieren des alten Paares deaktiviert auch den anon-Schlüssel, den dein Frontend benutzt. Deine App fällt also aus, wenn sie beim Umlegen des Schalters nicht schon auf dem öffentlichen Schlüssel läuft.",{"q":391,"a":392},"Kann ich die alten anon- und service_role-Schlüssel tauschen?","Nein. Die Troubleshooting-Dokumentation von Supabase schreibt, dass ein direktes Rotieren der alten anon-, service_role- und JWT-Secrets nicht mehr unterstützt wird. Einen geleakten Legacy-Schlüssel ungültig zu machen heißt: die neuen sb_publishable_- und sb_secret_-Schlüssel anlegen, deine App und deinen Servercode darauf umziehen und danach das alte Paar in den Projekteinstellungen deaktivieren.",{"q":394,"a":395},"Soll ich den alten Schlüssel löschen oder deaktivieren?","Du hast keine Wahl, weil sich die beiden Schlüsselsysteme unterschiedlich verhalten. Ein neuerer sb_secret_-Schlüssel wird gelöscht, endgültig, ohne Weg zurück. Das alte Paar wird stattdessen deaktiviert, und das lässt sich rückgängig machen: Falls doch noch etwas einen alten Schlüssel benutzt, schaltest du sie wieder ein, während du es reparierst.",{"q":285,"a":397},"Sicher wissen kannst du es meistens nicht. Grenze stattdessen ein Zeitfenster ein: Der Schlüssel war ab dem Deploy nutzbar, der ihn zuerst ausgeliefert hat, bis zu dem Moment, in dem du ihn deaktiviert hast. Filtere die API- und Datenbank-Logs deines Supabase-Projekts auf diesen Zeitraum und suche nach Lese- und Schreibzugriffen, die du nicht zuordnen kannst. Prüfe danach deine Daten auf Zeilenzahlen und Zeitstempel, die zu nichts passen, was du getan hast.",{"q":399,"a":400},"Muss ich meinen anon-Schlüssel auch tauschen?","In einem Legacy-Projekt hast du keine Wahl: Das Deaktivieren des alten Paares nimmt beide Schlüssel auf einmal, dein Frontend braucht also vorher den neuen öffentlichen Schlüssel. In einem neueren Projekt ist der öffentliche Schlüssel für die Öffentlichkeit gedacht, und es gibt keinen Grund, ihn anzufassen. Prüfenswert ist in beiden Fällen Row Level Security, denn das ist das Einzige, was zwischen einem öffentlichen Schlüssel und deiner ganzen Datenbank steht.","\u002Fblog\u002Frotate-supabase-service-role-key\u002Fcard-800x500.png",[403,404,405,406,407,408,409,410],"supabase service role key tauschen","supabase service role key rotieren","supabase service role key geleakt","supabase service role key offengelegt","supabase schlüssel rotation","supabase api-schlüssel widerrufen","supabase legacy api-schlüssel deaktivieren","service role key im frontend",{},true,"Geleakten Supabase-service_role-Schlüssel tauschen","\u002Fblog\u002Frotate-supabase-service-role-key","2026-09-08",{"title":5,"description":383},"blog\u002Frotate-supabase-service-role-key",[419,420,421],"Steckt dein Supabase-service_role-Schlüssel im JavaScript, das ein Browser lädt, tausche ihn aus, bevor du irgendetwas reparierst. Die Kopie, die schon draußen ist, läuft nicht ab.","Ist er nur in ein privates Repo oder ein Log gelangt, schließe zuerst die Quelle. Sonst folgt dein neuer Schlüssel dem alten beim nächsten Deploy nach draußen.","Ein Legacy-service_role-Schlüssel lässt sich gar nicht tauschen. Ihn ungültig zu machen heißt: neue sb_secret_-Schlüssel anlegen, die App darauf umziehen und das alte Paar mit einem Schalter deaktivieren, der beide betrifft.","qo3oAodoD-0TNaIV43l4RSK1_mT_P0bXCw66z5hgCXo",[424,431,437,443,449,455,461,467,473,479,485,491,497,503,509,515,516,522,528,534,540,546,551,557,563,569,575,580,586,592,598,604,610,616,622,628,633,638,644,650,655,660],{"path":425,"title":426,"description":427,"published":428,"category":429,"image":430,"draft":384},"\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","Backups","\u002Fblog\u002Fsupabase-backup-auth-users\u002Fcard-800x500.png",{"path":432,"title":433,"description":434,"published":435,"category":380,"image":436,"draft":384},"\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":438,"title":439,"description":440,"published":441,"category":380,"image":442,"draft":384},"\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":444,"title":445,"description":446,"published":447,"category":380,"image":448,"draft":384},"\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":450,"title":451,"description":452,"published":453,"category":380,"image":454,"draft":384},"\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":456,"title":457,"description":458,"published":459,"category":380,"image":460,"draft":384},"\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":462,"title":463,"description":464,"published":465,"category":380,"image":466,"draft":384},"\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":468,"title":469,"description":470,"published":471,"category":380,"image":472,"draft":384},"\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":474,"title":475,"description":476,"published":477,"category":380,"image":478,"draft":384},"\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":480,"title":481,"description":482,"published":483,"category":429,"image":484,"draft":384},"\u002Fblog\u002Fsupabase-storage-backup","Supabase Storage Backup: deine Datenbankkopie hat keine Dateien","Ein Supabase Storage Backup ist eine eigene Aufgabe. Datenbank-Backups enthalten die Liste deiner Dateien und keine davon, also bleibt jeder Upload kaputt.","2026-09-14","\u002Fblog\u002Fsupabase-storage-backup\u002Fcard-800x500.png",{"path":486,"title":487,"description":488,"published":489,"category":429,"image":490,"draft":384},"\u002Fblog\u002Fsupabase-point-in-time-recovery","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":492,"title":493,"description":494,"published":495,"category":429,"image":496,"draft":384},"\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":498,"title":499,"description":500,"published":501,"category":380,"image":502,"draft":384},"\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":504,"title":505,"description":506,"published":507,"category":380,"image":508,"draft":384},"\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":510,"title":511,"description":512,"published":513,"category":380,"image":514,"draft":384},"\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":414,"title":5,"description":383,"published":415,"category":380,"image":401,"draft":384},{"path":517,"title":518,"description":519,"published":520,"category":380,"image":521,"draft":384},"\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":523,"title":524,"description":525,"published":526,"category":380,"image":527,"draft":384},"\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":529,"title":530,"description":531,"published":532,"category":380,"image":533,"draft":384},"\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":535,"title":536,"description":537,"published":538,"category":380,"image":539,"draft":384},"\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":541,"title":542,"description":543,"published":544,"category":380,"image":545,"draft":384},"\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":302,"title":547,"description":548,"published":549,"category":380,"image":550,"draft":384},"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":552,"title":553,"description":554,"published":555,"category":429,"image":556,"draft":384},"\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":558,"title":559,"description":560,"published":561,"category":380,"image":562,"draft":384},"\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":564,"title":565,"description":566,"published":567,"category":429,"image":568,"draft":384},"\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":570,"title":571,"description":572,"published":573,"category":380,"image":574,"draft":384},"\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":139,"title":576,"description":577,"published":578,"category":380,"image":579,"draft":384},"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":581,"title":582,"description":583,"published":584,"category":380,"image":585,"draft":384},"\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":587,"title":588,"description":589,"published":590,"category":380,"image":591,"draft":384},"\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":593,"title":594,"description":595,"published":596,"category":429,"image":597,"draft":384},"\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":599,"title":600,"description":601,"published":602,"category":429,"image":603,"draft":384},"\u002Fblog\u002Fhow-to-restore-a-supabase-backup","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":605,"title":606,"description":607,"published":608,"category":380,"image":609,"draft":384},"\u002Fblog\u002Fsupabase-storage-bucket-public","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":611,"title":612,"description":613,"published":614,"category":380,"image":615,"draft":384},"\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":617,"title":618,"description":619,"published":620,"category":429,"image":621,"draft":384},"\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":623,"title":624,"description":625,"published":626,"category":380,"image":627,"draft":384},"\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":629,"title":630,"description":631,"published":626,"category":380,"image":632,"draft":384},"\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":228,"title":634,"description":635,"published":636,"category":380,"image":637,"draft":384},"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":639,"title":640,"description":641,"published":642,"category":429,"image":643,"draft":384},"\u002Fblog\u002Fdoes-supabase-back-up-my-database","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":645,"title":646,"description":647,"published":648,"category":380,"image":649,"draft":384},"\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":651,"title":652,"description":653,"published":648,"category":429,"image":654,"draft":384},"\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":362,"title":656,"description":657,"published":658,"category":429,"image":659,"draft":384},"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":67,"title":661,"description":662,"published":658,"category":380,"image":663,"draft":384},"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",1790150951364]