[{"data":1,"prerenderedAt":871},["ShallowReactive",2],{"blog-de-vibe-coded-app-security-checklist":3,"blog-index-de":637},{"id":4,"title":5,"body":6,"category":589,"cover":590,"coverAlt":591,"description":592,"draft":593,"extension":594,"faq":595,"image":614,"keywords":615,"meta":625,"navigation":626,"ogTitle":627,"path":628,"published":629,"seo":630,"stem":631,"tldr":632,"updated":629,"__hash__":636},"blog_de\u002Fblog\u002Fvibe-coded-app-security-checklist.md","Die Sicherheits-Checkliste für Vibe-Coding, in neun Prüfungen",{"type":7,"value":8,"toc":566},"minimark",[9,13,21,24,27,32,35,41,185,194,198,201,209,214,227,243,260,264,272,275,288,292,301,312,320,324,327,335,343,347,350,353,357,360,363,371,375,378,381,389,393,396,399,407,411,414,417,421,424,427,432,436,439,442,450,467,470,474,477,480,486,490,493,496,506,513,517,553],[10,11,12],"p",{},"Du willst gleich jemandem die Adresse deiner App schicken, und eine leise\nStimme sagt, du solltest vorher nachsehen. Also suchst du nach einer\nSicherheits-Checkliste für Vibe-Coding und findest eine mit fünfundzwanzig\nPunkten, geschrieben von jemandem, der annimmt, du wüsstest bereits, was eine\nContent Security Policy ist.",[10,14,15,16,20],{},"Hier ist der Teil, den Liste um Liste falsch macht: ",[17,18,19],"strong",{},"das meiste darauf lässt\nsich gar nicht prüfen."," \"Nimm starke Passwörter\" ist ein Ratschlag. \"Räum\ntoten Code auf\" ist Hausarbeit. \"Folge dem Prinzip der geringsten Rechte\" ist\nein Satz. Keiner davon hat einen Test, also lässt sich keiner abschließen, und\neine Liste, die du nicht abschließen kannst, ist eine Sorge mit Nummern daran.",[10,22,23],{},"Diese hier hat neun Punkte. Neun ist die Zahl der Dinge, die sich an einer\nlaufenden App von außen nachprüfen lassen, ohne dein Passwort, dein Repository\noder dein Supabase-Konto. Jeder Punkt hat einen Test, den du selbst machen\nkannst, und jeder Test kommt mit ja oder nein zurück.",[10,25,26],{},"Stell es dir vor wie den Rundgang, den ein Pilot vor dem Flug um ein Flugzeug\nmacht. Er ist kurz, alles darauf ist vom Vorfeld aus sichtbar, und er ersetzt\nnichts aus dem Wartungsbuch. Der letzte Abschnitt dieses Beitrags handelt vom\nWartungsbuch.",[28,29,31],"h2",{"id":30},"was-gehört-auf-eine-sicherheits-checkliste-für-vibe-coding","Was gehört auf eine Sicherheits-Checkliste für Vibe-Coding?",[10,33,34],{},"Neun Fragen, und es sind die neun, die ein Fremder heute Nachmittag über deine\nApp stellen könnte, ob du nachgesehen hast oder nicht.",[36,37],"diagram",{"alt":38,"caption":39,"src":40},"Das Reeve-Zeichen über einer Reihe von neun umrissenen Symbolen: ein Schlüssel, ein Datenbankzylinder, ein Dokument, ein Vorhängeschloss, eine Kiste mit Deckel, ein Paar Code-Klammern, ein Globus, eine Zertifikatsrosette und ein Kalender.","Die neun, in der Reihenfolge der Abschnitte weiter unten. Jede wird von außen gelesen, und genau das macht jede von ihnen prüfbar.","\u002Fblog\u002Fvibe-coded-app-security-checklist\u002Fnine-checks-1600x420.png",[42,43,44,60],"table",{},[45,46,47],"thead",{},[48,49,50,54,57],"tr",{},[51,52,53],"th",{},"Die Prüfung",[51,55,56],{},"Der Test, den du selbst machst",[51,58,59],{},"Was es bedeutet, wenn es falsch zurückkommt",[61,62,63,89,100,119,130,141,152,163,174],"tbody",{},[48,64,65,69,86],{},[66,67,68],"td",{},"Geheime Schlüssel im Code",[66,70,71,72,76,77,76,80,76,83],{},"Suche im Projekt nach ",[73,74,75],"code",{},"sk_",", ",[73,78,79],{},"sb_secret_",[73,81,82],{},"service_role",[73,84,85],{},"AKIA",[66,87,88],{},"Wer ihn findet, gibt dein Geld aus oder liest jede Zeile",[48,90,91,94,97],{},[66,92,93],{},"Datenbankregeln",[66,95,96],{},"Supabase, dann der Security Advisor",[66,98,99],{},"Jeder mit deinem öffentlichen Schlüssel liest diese Zeilen",[48,101,102,105,116],{},[66,103,104],{},"Private Dateien",[66,106,107,108,111,112,115],{},"Öffne ",[73,109,110],{},"\u002F.env"," und ",[73,113,114],{},"\u002F.git\u002Fconfig"," in einem privaten Fenster",[66,117,118],{},"Jeder Schlüssel, den du auf dem Server glaubtest, ist abrufbar",[48,120,121,124,127],{},[66,122,123],{},"Storage-Buckets",[66,125,126],{},"Supabase, dann Storage, dann die Spalte \"Public\" und die Regeln",[66,128,129],{},"Ein Fremder bekommt die Liste dessen, was deine Nutzer hochluden",[48,131,132,135,138],{},[66,133,134],{},"Browser-Sicherheitsheader",[66,136,137],{},"Ein Scan; für diesen gibt es keine Variante aus der Adresszeile",[66,139,140],{},"Deine Besucher sind über deine Seite leichter angreifbar",[48,142,143,146,149],{},[66,144,145],{},"Veröffentlichte Source Maps",[66,147,148],{},"Browser-Entwicklertools, Sources, nach eigenen Dateinamen suchen",[66,150,151],{},"Dein Originalcode ist lesbar, samt Kommentaren",[48,153,154,157,160],{},[66,155,156],{},"Deine eigenen API-Adressen",[66,158,159],{},"Eine davon in einem privaten Fenster ohne Anmeldung öffnen",[66,161,162],{},"Was sie zurückgibt, ist öffentlich",[48,164,165,168,171],{},[66,166,167],{},"Zertifikatsablauf",[66,169,170],{},"Auf das Schloss klicken, Zertifikat öffnen, \"Gültig bis\" lesen",[66,172,173],{},"Besucher treffen auf eine Browser-Warnung statt auf eine Seite",[48,175,176,179,182],{},[66,177,178],{},"Domain-Verlängerung",[66,180,181],{},"Ablaufdatum bei deinem Registrar, und ob die Autoverlängerung an ist",[66,183,184],{},"Die App verschwindet, und der Name kommt in den Verkauf",[10,186,187,188,193],{},"Unser eigener ",[189,190,192],"a",{"href":191},"\u002Fsecurity-scanner","kostenloser Sicherheitsscanner"," prüft alle\nneun an jeder laufenden URL in etwa 20 Sekunden ohne Konto, und das ist der\nschnellste Weg für den ersten Durchgang. Er liest, er meldet sich nie an, und\ner schreibt nie etwas. Jeder Punkt weiter unten bleibt etwas, das du von Hand\nprüfen kannst, und die Tests stehen ausgeschrieben da, damit du eine Zeile\nunseres Berichts gegen dein eigenes Dashboard halten kannst.",[28,195,197],{"id":196},"die-vier-vor-dem-teilen-der-adresse","Die vier vor dem Teilen der Adresse",[10,199,200],{},"Geheime Schlüssel, Datenbankregeln, private Dateien und Storage-Buckets. Bei\ndiesen vier sind es deine Daten oder dein Geld, die offenliegen, und alle vier\ngehören dir zum Reparieren und nicht deiner Hosting-Plattform.",[10,202,203,204,208],{},"Drei davon sind die einzigen Prüfungen im ganzen Satz, die einen kritischen\nBefund melden können, und die vierte ist die, bei der offenliegt, was deine\nNutzer hochgeladen haben. Zwischen dem 12. und 14. August 2026 haben wir alle\nneun Prüfungen über\n",[189,205,207],{"href":206},"\u002Fresearch\u002Fvibe-coded-app-security-2026","30.998 laufende vibe-gecodete Apps","\nlaufen lassen, und die Zahlen in jedem Abschnitt unten stammen aus diesem Lauf.",[210,211,213],"h3",{"id":212},"_1-steckt-ein-geheimer-schlüssel-im-ausgelieferten-code","1. Steckt ein geheimer Schlüssel im ausgelieferten Code?",[10,215,216,217,76,219,76,221,223,224,226],{},"Durchsuche dein ganzes Projekt nach ",[73,218,75],{},[73,220,79],{},[73,222,82],{}," und\n",[73,225,85],{},". Ein Treffer in irgendetwas, das der Browser herunterlädt, ist der\nBefund.",[10,228,229,230,233,234,237,238,242],{},"Alles, was deine App zum Laufen im Browser braucht, kommt in diesem Browser an,\nalso kommt auch ein Schlüssel darin an. Manche Schlüssel gehören dorthin: ein\nSupabase-Schlüssel mit ",[73,231,232],{},"anon"," oder ",[73,235,236],{},"sb_publishable_"," ist eine Adresse und keine\nBerechtigung, und ihn zu finden ist richtig.\n",[189,239,241],{"href":240},"\u002Fblog\u002Fwhich-api-keys-are-safe-in-your-frontend","Welche Schlüssel im Frontend sicher sind und welche nicht","\nist dieser Unterschied in voller Länge.",[10,244,245,246,233,248,250,251,254,255,259],{},"Ein geheimer Schlüssel ist die andere Sorte. Ein Supabase-Schlüssel mit\n",[73,247,79],{},[73,249,82],{}," ignoriert jede Tabellenregel, die du je\ngeschrieben hast. Ein Stripe-Schlüssel mit ",[73,252,253],{},"sk_live_"," bewegt Geld. Wir haben\neinen Schlüssel dieser Klasse auf 52 von 30.998 Apps gefunden, was selten ist\nund das Schlimmste auf dieser Liste, wenn es passiert. Falls deiner dazugehört,\n",[189,256,258],{"href":257},"\u002Fblog\u002Frotate-supabase-service-role-key","rotiere ihn, bevor du sonst etwas tust",":\nden Schlüssel aus dem Code zu löschen lässt den alten Wert weiterlaufen.",[210,261,263],{"id":262},"_2-kann-ein-fremder-deine-datenbank-lesen","2. Kann ein Fremder deine Datenbank lesen?",[10,265,266,267,271],{},"Öffne in Supabase den Security Advisor. Jeder Eintrag, der sagt, eine Tabelle\nsei öffentlich, aber die Zeilensicherheit sei nicht aktiviert, ist eine Tabelle,\ndie jedem antwortet, der fragt, und\n",[189,268,270],{"href":269},"\u002Fblog\u002Fsupabase-rls-disabled-in-public","genau diese Warnung"," hat einen eigenen\nBeitrag.",[10,273,274],{},"Row Level Security ist die Regel, die Zeile für Zeile entscheidet, wer was sehen\ndarf. Ohne sie reicht der öffentliche Schlüssel in deiner App, um die Tabelle zu\nlesen, und dieser Schlüssel steckt von Haus aus im Browser jedes Besuchers.",[10,276,277,278,282,283,287],{},"Das ist der häufigste ernste Befund im ganzen Satz: 2.096 von 3.680 Apps, deren\nSupabase-Projekt uns geantwortet hat, also 57 %, gaben mindestens eine Tabelle\nan eine Anfrage ohne Anmeldung heraus.\n",[189,279,281],{"href":280},"\u002Fblog\u002Fenable-rls-on-every-supabase-table","Sie für jede Tabelle einzuschalten","\nist die Reparatur. Der Advisor liest deine Einstellungen statt der Antworten\ndeiner Datenbank, also prüfe zum Schluss von außen: eine Tabelle kann die\nEinstellung an haben und eine Regel, die\n",[189,284,286],{"href":285},"\u002Fblog\u002Fsupabase-rls-on-but-table-still-public","trotzdem jeden durchlässt",".",[210,289,291],{"id":290},"_3-kann-jeder-deine-privaten-dateien-herunterladen","3. Kann jeder deine privaten Dateien herunterladen?",[10,293,107,294,111,297,300],{},[73,295,296],{},"deineapp.de\u002F.env",[73,298,299],{},"deineapp.de\u002F.git\u002Fconfig"," in einem privaten\nFenster. Beide sollten sich nicht öffnen lassen.",[10,302,303,304,307,308,311],{},"Eine ",[73,305,306],{},".env","-Datei ist jeder Schlüssel, den du sicher auf dem Server glaubtest,\nin einer schlichten Liste, unter einer erratbaren Adresse. Ein\n",[73,309,310],{},".git","-Verzeichnis ist die Geschichte deines Projekts. Keines von beiden soll\nausgeliefert werden, und gelegentlich werden sie es doch, meist weil ein Build\neinen Ordner mitkopiert hat, den er nicht hätte mitnehmen sollen.",[10,313,314,315,319],{},"Das ist das Seltenste, was wir finden: 8 von 30.749 Apps. Es kostet auch fünf\nSekunden, es auszuschließen, und es ist\n",[189,316,318],{"href":317},"\u002Fblog\u002Fwhat-secrets-leak-from-vibe-coded-apps","der Ort, aus dem die schädlichsten Lecks kommen",",\nwenn es passiert.",[210,321,323],{"id":322},"_4-listen-deine-storage-buckets-auf-was-in-ihnen-liegt","4. Listen deine Storage-Buckets auf, was in ihnen liegt?",[10,325,326],{},"Öffne in Supabase den Bereich Storage. Lies die Spalte \"Public\" bei jedem Bucket\nund öffne dann die Regeln bei jedem Bucket, in dem etwas liegt, das nicht für\nalle gedacht ist.",[10,328,329,330,334],{},"Hier laufen zwei verschiedene Dinge nebeneinander, die leicht durcheinander\ngeraten. Ein öffentlicher Bucket liefert jede Datei aus, deren Namen jemand\nbereits kennt. Ein ",[331,332,333],"em",{},"auflistbarer"," Bucket gibt die Namen heraus, und damit wird\naus \"jemand müsste raten\" ein Verzeichnis der Uploads deiner Nutzer. Unsere\nPrüfung testet das Zweite, denn das ist das, was ändert, was ein Fremder\ntatsächlich tun kann.",[10,336,337,338,342],{},"792 von 27.269 Apps hatten einen Bucket, der sich uns ohne Anmeldung\nauflistete. ",[189,339,341],{"href":340},"\u002Fblog\u002Fsupabase-storage-bucket-public","Was ein Fremder aus dieser Liste bekommt","\nist die lange Fassung, und die Reparatur ist meist ein Schalter plus eine Regel.",[28,344,346],{"id":345},"die-fünf-die-warten-können-bis-du-nutzer-hast","Die fünf, die warten können, bis du Nutzer hast",[10,348,349],{},"Header, Source Maps, deine eigenen API-Adressen, das Zertifikat und die Domain.\nDrei davon setzt meist derjenige, der deine App hostet, und zwei davon sind\nTermine im Kalender.",[10,351,352],{},"Keiner von ihnen gibt für sich allein eine Zeile deiner Datenbank heraus, und\ndeshalb stehen sie in der zweiten Gruppe. Einer der fünf lohnt sich früher,\nwenn deine App ein eigenes Backend hat, und der ist unten markiert.",[210,354,356],{"id":355},"_5-sind-die-browser-sicherheitsheader-eingeschaltet","5. Sind die Browser-Sicherheitsheader eingeschaltet?",[10,358,359],{},"Das ist der einzige Punkt der Liste ohne Variante, die aus der Adresszeile\nläuft. Ein Scan liest sie, oder du öffnest die Entwicklertools deines Browsers,\ngehst auf den Tab Netzwerk, klickst die erste Anfrage an und liest die\nAntwortheader.",[10,361,362],{},"Es sind kleine Anweisungen an den Browser: lade diese Seite nur über HTTPS,\nweigere dich, von einer anderen Seite eingerahmt zu werden, rate nicht bei\nDateitypen. Ihr Fehlen legt für sich genommen nichts offen. Es nimmt Schutz\nweg, der andere Angriffe schwerer macht.",[10,364,365,366,370],{},"Fast niemand besteht diesen Punkt, und fast niemand kann es. 30.756 von 30.981\nApps fehlte mindestens einer, und auf einer Builder-Subdomain gehört die\nEinstellung der Plattform.\n",[189,367,369],{"href":368},"\u002Fblog\u002Fmissing-security-headers","Ob du bei deiner etwas tun kannst"," hängt ganz\ndavon ab, wo deine App gehostet wird.",[210,372,374],{"id":373},"_6-ist-dein-originalquellcode-veröffentlicht","6. Ist dein Originalquellcode veröffentlicht?",[10,376,377],{},"Öffne deine laufende App, öffne die Entwicklertools deines Browsers und sieh dir\nden Bereich Sources an. Stehen dort deine eigenen Dateien mit dem Code, den du\ngeschrieben hast, und den Kommentaren, die du hinterlassen hast, dann sind die\nSource Maps mit dem Build rausgegangen.",[10,379,380],{},"Eine Source Map ist eine Übersetzungstabelle, die die komprimierte Datei deiner\nApp zurück in lesbaren Code verwandelt. Entwickler nutzen sie, um eine laufende\nSeite zu debuggen. Ins Internet veröffentlicht heißt sie, dass jeder deine App\nso lesen kann, wie du sie geschrieben hast.",[10,382,383,384,388],{},"3.885 von 30.987 Apps haben ihre veröffentlicht. Das ist für sich genommen kein\nLeck, und es wird eines, wenn im Code etwas steht, von dem du annahmst, niemand\nwürde es lesen. ",[189,385,387],{"href":386},"\u002Fblog\u002Fsource-maps-exposed-in-production","Was eine veröffentlichte Map offenlegt","\nbehandelt den Unterschied und die Build-Einstellung, die sie abschaltet.",[210,390,392],{"id":391},"_7-antworten-deine-eigenen-api-adressen-einem-fremden","7. Antworten deine eigenen API-Adressen einem Fremden?",[10,394,395],{},"Kopiere eine der API-Adressen deiner App aus dem Netzwerk-Tab und öffne sie dann\nin einem privaten Fenster, in dem du nicht angemeldet bist. Sieh dir an, was\nzurückkommt.",[10,397,398],{},"Das ist der Punkt, den du vorziehst, wenn deine App ein eigenes Backend hat,\ndenn alles, was eine Adresse einer Anfrage ohne Anmeldung übergibt, ist\nöffentlich, wie auch immer die Seite davor aussieht. 3.852 von 30.926 Apps\nhatten mindestens eine.",[10,400,401,402,406],{},"Die verwandte Einstellung ist CORS, die entscheidet, welche anderen Websites\ndeine App aus dem Browser eines Besuchers aufrufen dürfen. Ein Wildcard dort ist\noft in Ordnung und gelegentlich nicht, und\n",[189,403,405],{"href":404},"\u002Fblog\u002Fcors-wildcard-security-risk","welches von beiden du hast"," lohnt sich zu\nlesen, bevor du etwas änderst.",[210,408,410],{"id":409},"_8-läuft-dein-zertifikat-bald-ab","8. Läuft dein Zertifikat bald ab?",[10,412,413],{},"Klicke auf das Schloss in der Adresszeile, öffne das Zertifikat und lies das\nDatum bei \"Gültig bis\".",[10,415,416],{},"Fast jeder Hoster erneuert diese automatisch, und fast jeder davon schafft es.\n32 von 30.851 Apps hatten ein abgelaufenes, ablaufendes oder nicht\nvertrauenswürdiges Zertifikat. Wenn es doch scheitert, bekommen Besucher eine\nseitenfüllende Browser-Warnung, die ihnen sagt, deine Seite sei unsicher, und\ndie meisten gehen dann.",[210,418,420],{"id":419},"_9-ist-deine-domain-verlängert","9. Ist deine Domain verlängert?",[10,422,423],{},"Melde dich bei deinem Registrar an, lies das Ablaufdatum und prüfe, ob die\nAutoverlängerung an ist und die Karte dahinter noch gültig.",[10,425,426],{},"Das ist der am wenigsten technische Punkt der Liste und der einzige, der deine\nApp vollständig aus dem Internet nehmen kann. 55 von 30.980 Apps hatten eine\nabgelaufene oder ablaufende Domain. Ein verfallener Name kann außerdem von\njemand anderem registriert werden, mitsamt jedem Link, den je jemand darauf\ngesetzt hat.",[36,428],{"alt":429,"caption":430,"src":431},"Dieselben neun Prüfsymbole in zwei Spalten. Links sind sie danach sortiert, wie oft ein Scan jedes findet; rechts in der Reihenfolge, in der dieser Beitrag sie durchgeht. Geschwungene Linien verbinden jedes Symbol mit sich selbst und kreuzen sich in der Mitte, vier davon in Akzentfarbe.","Links: wie oft wir jedes über 30.998 Apps gefunden haben. Rechts: die Reihenfolge dieser Liste. Die beiden sind sich uneinig, und deshalb ist der häufigste Befund im Internet nicht das Erste, was zu tun ist.","\u002Fblog\u002Fvibe-coded-app-security-checklist\u002Ftwo-orders-of-nine-1600x790.png",[28,433,435],{"id":434},"was-auf-anderen-checklisten-steht-und-keine-sicherheitsprüfung-ist","Was auf anderen Checklisten steht und keine Sicherheitsprüfung ist",[10,437,438],{},"Backups, Fehlerüberwachung, toter Code und Passwortratschläge. Das erste davon\nkostet dich am ehesten etwas, und es ist keine Sicherheitsprüfung, denn nichts\naußerhalb deiner App kann sagen, ob du eines hast.",[10,440,441],{},"Das ist der ehrliche Grund, warum es unter den neun fehlt. Ein Scanner liest\ndeine laufende Seite; ein Backup ist eine Kopie deiner Datenbank, die woanders\nliegt, und kein Blick von außen auf deine App kann sagen, ob sie existiert, ob\nsie aktuell ist oder ob sie sich zurückspielen ließe. Auf deine Liste gehört es\ntrotzdem. Es gehört auf die Art Liste, die du führst, statt auf die, die du\ndurchläufst.",[10,443,444,445,449],{},"Die eigenen Backups von Supabase hängen von deinem Tarif ab und bleiben in\ndeinem Supabase-Konto, was in Ordnung ist, bis das Problem das Konto ist.\n",[189,446,448],{"href":447},"\u002Fblog\u002Fthree-ways-to-back-up-a-supabase-database","Die drei Wege zu einer Kopie, die dir gehört","\nlegt dar, was jeder davon abdeckt.",[10,451,452,453,457,458,461,462,466],{},"Wenn dir lieber wäre, es passierte ohne dich, dann ist das\n",[189,454,456],{"href":455},"\u002Fpricing","Reeve Care",". Es nimmt eine Kopie deiner Supabase-Datenbank nach einem\nZeitplan, den der gewählte Tarif festlegt, in der Einstiegsstufe jede Nacht und\nin der höchsten bis zu viermal täglich, liest jede Kopie zurück, bevor sie als\nBackup zählt, und legt sie dorthin, wo Supabase nicht hinkommt. Wie weit du\nzurückgehen kannst, legt derselbe Tarif fest. Zurückspielen ist ein Knopf, und\ner nimmt vor dem Start einen Schnappschuss des aktuellen Stands, sodass ein\nDruck darauf in Panik nicht zerstören kann, was du retten wolltest. Hochgeladene\nDateien kommen ebenfalls mit, sobald du einen Storage-Zugang verbindest, der\ngetrennt abgefragt wird, weil er der einzige Schlüssel ist, den wir halten und\nder schreiben kann: Supabase gibt für Dateien keinen Nur-Lese-Schlüssel heraus.\nCare beginnt bei €49 im Monat für eine App, und das ist ein Listenpreis, also\nliegt die ",[189,459,460],{"href":455},"Preisseite"," manchmal unter dem Wert hier und nie darüber.\nWie eine Kopie genommen, geprüft und zurückgespielt wird, ist Schritt für\nSchritt auf der ",[189,463,465],{"href":464},"\u002Fsupabase-backups","Supabase-Backup-Seite"," gezeichnet.",[10,468,469],{},"Der Rest dessen, was diese Listen tragen, ist echte Arbeit und nicht diese\nArbeit. Fehlerüberwachung sagt dir, wenn deine App kaputtgeht, und das ist\nBetrieb. \"Unbenutzte Abhängigkeiten entfernen\" ist Hausarbeit. \"Nimm starke\nPasswörter\" gilt für alles, wo du dich je eingeloggt hast.",[28,471,473],{"id":472},"wie-oft-sollte-ich-das-wiederholen","Wie oft sollte ich das wiederholen?",[10,475,476],{},"Nach jedem Deploy, der deine Datenbankregeln, deine Schlüssel oder deine\nBuild-Einstellungen berührt hat. Falls das nach den meisten Deploys klingt: ist\nes auch, und darin liegt das eigentliche Problem einer Checkliste, die du einmal\ndurchgehst.",[10,478,479],{},"Der Rundgang findet genau deshalb vor jedem Flug statt. Row Level Security wird\num Mitternacht abgeschaltet, damit eine Seite lädt, und niemand schaltet sie\nwieder ein. Ein Schlüssel wird ins Frontend eingefügt, um vor einer Demo ein\nFeature auszuliefern. Ein Bucket wird für einen Upload geöffnet und bleibt\noffen. Jedes davon ist ein normaler Dienstag, und jedes reicht, um ein sauberes\nErgebnis in ein ernstes zu verwandeln.",[10,481,482,485],{},[189,483,484],{"href":455},"Reeve Monitor"," gibt es für diese Lücke. Es wiederholt alle neun\nPrüfungen stündlich auf bis zu drei Apps, sieht alle 60 Sekunden nach, ob die\nApp läuft, sagt dir an dem Tag Bescheid, an dem sich ein Ergebnis ändert,\nstatt zu warten, bis du nachsiehst, und schickt einen Monatsbericht in\nverständlicher Sprache. Es kostet €12 im Monat zum Listenpreis, mit sieben\nTagen gratis, bevor abgerechnet wird, und die Preisseite liegt manchmal unter\ndem Wert hier und nie darüber. Monitor beobachtet und sonst nichts. Backups\nsind der Care-Tarif darüber, und Care hält eine Kopie einer Supabase-Datenbank\nund sonst nichts.",[28,487,489],{"id":488},"was-nichts-davon-beweist","Was nichts davon beweist",[10,491,492],{},"Dass deine App sicher ist. Neun Prüfungen, die sauber zurückkommen, heißen, dass\nneun von außen gestellte Fragen an dem Tag sauber zurückkamen, an dem du sie\ngestellt hast.",[10,494,495],{},"Vier Dinge bleiben für jeden Punkt dieser Liste unsichtbar, denn keines davon\nverlässt je deinen Server. Dein Servercode, samt der Datenbankfunktionen und\nEdge Functions, die von außen niemand lesen kann. Die Umgebungsvariablen, die du\naus dem Browser herausgehalten hast, wo sie genau richtig aufgehoben sind, und\nweshalb ein Scan auch nicht bestätigen kann, dass sie richtig liegen. Deine\nVersionsgeschichte, in der ein Schlüssel sitzt, den du im März committet und im\nApril entfernt hast. Und die Logik deiner App selbst, etwa ob ein angemeldeter\nNutzer die Bestellung eines anderen öffnen kann, indem er eine Zahl in der\nAdresse ändert.",[497,498,500],"callout",{"type":499},"warn",[10,501,502,505],{},[17,503,504],{},"Eine automatische Prüfung von außen ist kein Audit."," Das Ausbleiben eines\nBefundes ist keine Garantie, und nichts auf dieser Seite ist ein Urteil über\ndeine App als Ganzes. Wenn deine App Zahlungen annimmt oder Gesundheits- oder\nFinanzdaten von Menschen hält, ist ein Penetrationstest durch eine Person eine\nandere Übung und irgendwann die richtige.",[10,507,508,512],{},[189,509,511],{"href":510},"\u002Fblog\u002Fvibe-coding-security-scanner","Was ein URL-Scan sehen kann und was nicht","\ngeht diese Grenze ordentlich durch, samt der drei Werkzeuge, die\nVerschiedenes lesen, und der Stelle, an der jedes davon blind ist.",[28,514,516],{"id":515},"was-du-jetzt-tun-kannst","Was du jetzt tun kannst",[518,519,520],"key-takeaways",{},[521,522,523,541,544,547,550],"ul",{},[524,525,526,527,76,529,76,531,111,533,535,536,111,538,540],"li",{},"Mach die vier dringenden der Reihe nach: durchsuche dein Projekt nach ",[73,528,75],{},[73,530,79],{},[73,532,82],{},[73,534,85],{},"; öffne in Supabase den Security Advisor; öffne ",[73,537,110],{},[73,539,114],{}," in einem privaten Fenster; lies in Storage die Spalte \"Public\" und die Regeln.",[524,542,543],{},"Findest du einen geheimen Schlüssel, rotiere ihn, bevor du ihn entfernst. Den Schlüssel aus dem Code zu löschen lässt den alten Wert weiterlaufen, und er steckt weiterhin in deiner Versionsgeschichte und in jeder zwischengespeicherten Kopie deiner Seite.",[524,545,546],{},"Arbeite die übrigen fünf ab, wenn gerade nichts brennt. Drei davon gehören deinem Hoster, und die zwei Termine gehören in deinen Kalender.",[524,548,549],{},"Leg ein Backup dorthin, wo dein Supabase-Konto es nicht löschen kann, und spiel es einmal zurück, damit du weißt, dass es funktioniert.",[524,551,552],{},"Geh die ganze Liste erneut durch nach jedem Deploy, der deine Datenbank, deine Schlüssel oder deine Build-Einstellungen berührt hat.",[10,554,555,556,560,561,565],{},"Liegen die Daten deiner App in Supabase, ist die Fassung, die um diesen einen\nStack herum geschrieben ist, der ",[189,557,559],{"href":558},"\u002Fis-your-supabase-app-safe","Leitfaden für Supabase-Apps",".\nUnd wenn du lieber etwas zum Abhaken als zum Lesen willst, ist die\n",[189,562,564],{"href":563},"\u002Fchecklist","10-Minuten-Sicherheits-Checkliste"," die interaktive Variante.",{"title":567,"searchDepth":568,"depth":568,"links":569},"",3,[570,572,578,585,586,587,588],{"id":30,"depth":571,"text":31},2,{"id":196,"depth":571,"text":197,"children":573},[574,575,576,577],{"id":212,"depth":568,"text":213},{"id":262,"depth":568,"text":263},{"id":290,"depth":568,"text":291},{"id":322,"depth":568,"text":323},{"id":345,"depth":571,"text":346,"children":579},[580,581,582,583,584],{"id":355,"depth":568,"text":356},{"id":373,"depth":568,"text":374},{"id":391,"depth":568,"text":392},{"id":409,"depth":568,"text":410},{"id":419,"depth":568,"text":420},{"id":434,"depth":571,"text":435},{"id":472,"depth":571,"text":473},{"id":488,"depth":571,"text":489},{"id":515,"depth":571,"text":516},"Sicherheitsgrundlagen","\u002Fblog\u002Fvibe-coded-app-security-checklist\u002Fcover-1200x630.png","Eine Liste aus neun linierten Zeilen, jede mit einem leeren Kästchen daneben, keine davon abgehakt.","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.",false,"md",[596,599,602,605,608,611],{"q":597,"a":598},"Was sollte ich prüfen, bevor ich eine vibe-gecodete App starte?","Vier Dinge, in dieser Reihenfolge: ob ein geheimer Schlüssel in den Code gerutscht ist, den deine App an Browser ausliefert, ob deine Datenbanktabellen auf eine Anfrage ohne Anmeldung antworten, ob Dateien wie \u002F.env sich direkt von deiner Live-Adresse öffnen lassen, und ob deine Storage-Buckets auflisten, was deine Nutzer hochgeladen haben. Bei diesen vier kommt ein Fremder an deine Daten oder dein Geld. Die anderen fünf Punkte der Liste lohnen sich ebenfalls, und keiner davon ist ein Grund, einen Start zu verschieben.",{"q":600,"a":601},"Wie lange dauert das?","Drei der vier dringenden sind je ein Blick, wenn du weißt, wohin: eine Suche im eigenen Projekt nach vier Schlüsselpräfixen, die Advisor-Seite in Supabase und zwei Adressen in einem privaten Fenster. Die Datenbank-Prüfung dauert so lange, wie du Tabellen hast, denn du liest die Regel auf jeder einzelnen. Unser kostenloser Scan prüft alle neun von außen in etwa 20 Sekunden ohne Konto, und das ist die ehrliche Abkürzung für den ersten Durchgang.",{"q":603,"a":604},"Brauche ich dafür einen Entwickler?","Für die Tests nicht. Jeder der neun ist eine Seite in einem Dashboard, eine Adresse in deinem Browser oder eine Suche in deinem eigenen Projekt. Bei den Reparaturen sieht es anders aus: die Arbeit, die einen geheimen Schlüssel brauchte, auf einen Server zu verlegen, ist echte Entwicklung, und eine Zeilenregel zu schreiben, die genau die Richtigen hereinlässt, ist der Teil, den die meisten Besitzer abgeben. Die Tests selbst zu machen lohnt sich trotzdem, denn was du findest, entscheidet, worum du bittest.",{"q":606,"a":607},"Welcher Punkt ist der wichtigste?","Ob deine Datenbanktabellen einem Fremden antworten. Das ist der Punkt, bei dem die Daten deinen Nutzern gehören und nicht dir, und es ist der häufigste ernste Befund, den wir sehen. Von den Apps, deren Supabase-Projekt unserem Scan zwischen dem 12. und 14. August 2026 geantwortet hat, gaben 57 % mindestens eine Tabelle an eine Anfrage ohne Anmeldung heraus. Ein geheimer Schlüssel im Bundle richtet mehr Schaden an, wenn er auftritt, und er tritt weit seltener auf.",{"q":609,"a":610},"Wie oft sollte ich nachprüfen?","Nach jedem Deploy, der deine Datenbankregeln, deine Schlüssel oder deine Build-Einstellungen berührt hat, und sonst monatlich. Ein Ergebnis beschreibt die App, die lief, als du gefragt hast. Zeilensicherheit wird abgeschaltet, damit eine Seite lädt, ein Schlüssel wird eingefügt, um heute Abend ein Feature auszuliefern, ein Bucket wird für einen Upload geöffnet. Keines davon meldet sich von selbst.",{"q":612,"a":613},"Heißt bestanden, dass meine App sicher ist?","Nein. Es heißt, dass neun von außen gestellte Fragen an dem Tag sauber zurückkamen, an dem du sie gestellt hast. Eine automatische Prüfung von außen ist kein Audit, und das Ausbleiben eines Befundes ist keine Garantie. Alles, was auf deinem Server läuft, ist für alle neun unsichtbar: dein Servercode, die Schlüssel, die du aus dem Browser herausgehalten hast, der Schlüssel, den du im März committet und im April gelöscht hast, und die Frage, ob ein angemeldeter Nutzer die Bestellung eines anderen öffnen kann, indem er eine Zahl in der Adresse ändert.","\u002Fblog\u002Fvibe-coded-app-security-checklist\u002Fcard-800x500.png",[616,617,618,619,620,621,622,623,624],"sicherheits checkliste vibe coding","vibe coded app sicherheit checkliste","ki app sicherheit checkliste","lovable sicherheit checkliste","bolt sicherheit vor dem launch","checkliste launch ki app","sicherheitscheck vor dem launch","ist meine app startklar sicherheit","vibe coding produktion checkliste",{},true,"Die Sicherheits-Checkliste für Vibe-Coding","\u002Fblog\u002Fvibe-coded-app-security-checklist","2026-09-20",{"title":5,"description":592},"blog\u002Fvibe-coded-app-security-checklist",[633,634,635],"Eine Sicherheits-Checkliste für Vibe-Coding taugt nur etwas, wenn du sie zu Ende bringen kannst. Diese hat neun Punkte, denn neun ist die Zahl der Dinge, die sich an einer laufenden App von außen nachprüfen lassen.","Vier davon entscheiden, ob ein Fremder an deine Daten oder dein Geld kommt. Diese vier gehören erledigt, bevor du die Adresse irgendjemandem schickst.","Die anderen fünf sind Einstellungen und Termine. Sie gehören auf die Liste, und keiner von ihnen gibt für sich allein eine Zeile deiner Datenbank heraus.","tEQcd30xeggsitalNAq3NnlR-YFCRHqhKZA0R9TioFI",[638,645,651,657,658,664,670,676,682,688,694,700,706,712,717,722,727,733,739,744,749,755,760,766,772,778,784,790,796,801,807,813,818,824,830,836,840,846,852,857,862,867],{"path":639,"title":640,"description":641,"published":642,"category":643,"image":644,"draft":593},"\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":646,"title":647,"description":648,"published":649,"category":589,"image":650,"draft":593},"\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":652,"title":653,"description":654,"published":655,"category":589,"image":656,"draft":593},"\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":628,"title":5,"description":592,"published":629,"category":589,"image":614,"draft":593},{"path":659,"title":660,"description":661,"published":662,"category":589,"image":663,"draft":593},"\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":665,"title":666,"description":667,"published":668,"category":589,"image":669,"draft":593},"\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":671,"title":672,"description":673,"published":674,"category":589,"image":675,"draft":593},"\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":677,"title":678,"description":679,"published":680,"category":589,"image":681,"draft":593},"\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":683,"title":684,"description":685,"published":686,"category":589,"image":687,"draft":593},"\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":689,"title":690,"description":691,"published":692,"category":643,"image":693,"draft":593},"\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":695,"title":696,"description":697,"published":698,"category":643,"image":699,"draft":593},"\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":701,"title":702,"description":703,"published":704,"category":643,"image":705,"draft":593},"\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":707,"title":708,"description":709,"published":710,"category":589,"image":711,"draft":593},"\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":280,"title":713,"description":714,"published":715,"category":589,"image":716,"draft":593},"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":269,"title":718,"description":719,"published":720,"category":589,"image":721,"draft":593},"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":257,"title":723,"description":724,"published":725,"category":589,"image":726,"draft":593},"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":728,"title":729,"description":730,"published":731,"category":589,"image":732,"draft":593},"\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":734,"title":735,"description":736,"published":737,"category":589,"image":738,"draft":593},"\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":510,"title":740,"description":741,"published":742,"category":589,"image":743,"draft":593},"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":368,"title":745,"description":746,"published":747,"category":589,"image":748,"draft":593},"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":750,"title":751,"description":752,"published":753,"category":589,"image":754,"draft":593},"\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":317,"title":756,"description":757,"published":758,"category":589,"image":759,"draft":593},"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":761,"title":762,"description":763,"published":764,"category":643,"image":765,"draft":593},"\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":767,"title":768,"description":769,"published":770,"category":589,"image":771,"draft":593},"\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":773,"title":774,"description":775,"published":776,"category":643,"image":777,"draft":593},"\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":779,"title":780,"description":781,"published":782,"category":589,"image":783,"draft":593},"\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":785,"title":786,"description":787,"published":788,"category":589,"image":789,"draft":593},"\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":791,"title":792,"description":793,"published":794,"category":589,"image":795,"draft":593},"\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":404,"title":797,"description":798,"published":799,"category":589,"image":800,"draft":593},"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":802,"title":803,"description":804,"published":805,"category":643,"image":806,"draft":593},"\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":808,"title":809,"description":810,"published":811,"category":643,"image":812,"draft":593},"\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":340,"title":814,"description":815,"published":816,"category":589,"image":817,"draft":593},"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":819,"title":820,"description":821,"published":822,"category":589,"image":823,"draft":593},"\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":825,"title":826,"description":827,"published":828,"category":643,"image":829,"draft":593},"\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":831,"title":832,"description":833,"published":834,"category":589,"image":835,"draft":593},"\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":386,"title":837,"description":838,"published":834,"category":589,"image":839,"draft":593},"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":841,"title":842,"description":843,"published":844,"category":589,"image":845,"draft":593},"\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":847,"title":848,"description":849,"published":850,"category":643,"image":851,"draft":593},"\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":285,"title":853,"description":854,"published":855,"category":589,"image":856,"draft":593},"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":858,"title":859,"description":860,"published":855,"category":643,"image":861,"draft":593},"\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":447,"title":863,"description":864,"published":865,"category":643,"image":866,"draft":593},"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":240,"title":868,"description":869,"published":865,"category":589,"image":870,"draft":593},"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]