[{"data":1,"prerenderedAt":906},["ShallowReactive",2],{"blog-de-is-v0-safe":3,"blog-index-de":555},{"id":4,"title":5,"body":6,"category":508,"cover":509,"coverAlt":510,"description":511,"draft":512,"extension":513,"faq":514,"image":532,"keywords":533,"meta":543,"navigation":544,"ogTitle":545,"path":546,"published":547,"seo":548,"stem":549,"tldr":550,"updated":547,"__hash__":554},"blog_de\u002Fblog\u002Fis-v0-safe.md","v0-Sicherheit: alle 1.790 gescannten v0-Apps bekamen ein A",{"type":7,"value":8,"toc":494},"minimark",[9,18,21,29,34,37,40,63,66,91,95,98,122,134,147,153,164,168,171,174,186,190,193,206,212,224,228,231,240,243,248,265,272,276,279,291,294,318,326,330,333,374,381,385,391,400,418,421,431,448,451,459,463,486],[10,11,12,13,17],"p",{},"Du hast v0 eine App beschrieben, zugesehen, wie es eine baut, und einen Link\nbekommen, der auf ",[14,15,16],"code",{},"vusercontent.net"," endet. Sie funktioniert, sie sieht fertig\naus, und vielleicht hast du sie schon jemandem geschickt. Bevor echte Kunden\nihre Daten eintippen, hast du nach v0-Sicherheit gesucht, und ein Teil dessen,\nwas zurückkam, war eine Geschichte über Angreifer, die mit v0 gefälschte\nAnmeldeseiten bauen.",[10,19,20],{},"Diese Geschichte handelt davon, was andere Leute mit dem Werkzeug machen. Dieser\nBeitrag handelt von der App, die du damit gemacht hast, und dafür haben wir eine\nMessung. Zwischen dem 12. und 14. August 2026 haben wir dieselben neun externen\nChecks, die jeder kostenlos auf unserer Startseite laufen lassen kann, über\n30.998 laufende Apps laufen lassen, und 1.790 davon waren v0-Apps. Jede der\n1.790 bekam ein A.",[10,22,23,24,28],{},"Hier ist der Teil, den eine Rangliste falsch versteht: ",[25,26,27],"strong",{},"Dieses A sagt mehr\ndarüber, was es zu prüfen gab, als über v0."," Als Rangliste gelesen macht es v0\nzum sichersten Builder, den wir gemessen haben. Mit seinen Nennern gelesen\nbeschreibt es Frontends, hinter denen nichts steht, und es hört an dem Tag auf,\ndeine App zu beschreiben, an dem du eine Datenbank verbindest.",[30,31,33],"h2",{"id":32},"ist-v0-sicher","Ist v0 sicher?",[10,35,36],{},"Bei allem, was wir über v0 selbst messen konnten, ja. Sein einziger Fund gehört\nzu der Domain, von der v0 deine App ausliefert, und sonst tauchte bei keiner der\n1.790 in keinem der neun Checks etwas auf. Was das nicht sagen kann, ist, wie\nsich deine App verhält, sobald sie Daten hält, denn fast keine davon hielt\nwelche.",[10,38,39],{},"Stell dir eine v0-Vorschau als Aktenschrank in einem Ausstellungsraum vor. Die\nSchubladen gleiten, die Etiketten sind dran, jeder, der vorbeikommt, kann eine\naufziehen, und jede Schublade ist leer. Unsere Checks haben jede Schublade\nprobiert und in keiner etwas gefunden, und das ist ein zutreffender Bericht über\neinen leeren Schrank.",[10,41,42,43,45,46,53,54,57,58,62],{},"Wie leer, steht in den Zahlen. Nur 17 der 1.790 nannten irgendwo in ihrem\nausgelieferten Code ein Supabase-Projekt, und bei allen 17 bekam unser\nDatenbank-Check keine Antwort, die er beurteilen konnte, also steht die Zahl\nlesbarer Tabellen auf v0 bei null von null. Jede der 1.790 wurde von\n",[14,44,16],{}," ausgeliefert, das Vercel in seinem\n",[47,48,52],"a",{"href":49,"rel":50},"https:\u002F\u002Fgithub.com\u002Fpublicsuffix\u002Flist\u002Fpull\u002F2121",[51],"nofollow","Antrag an die Public Suffix List","\nals den Ort beschreibt, \"an dem wir die von Nutzern eingereichten Inhalte\nhosten\". Eine App, die du veröffentlichst, landet auf einer ",[14,55,56],{},"vercel.app","-Adresse\noder einer eigenen Domain, wo von außen nichts sie als v0 kennzeichnet, also\nsind diese nicht mitgezählt. Methode und vollständige Daten stehen\n",[47,59,61],{"href":60},"\u002Fresearch\u002Fvibe-coded-app-security-2026","im Bericht",".",[10,64,65],{},"\"Ist v0 sicher\" sind also drei Fragen:",[67,68,69,76,85],"ol",{},[70,71,72,75],"li",{},[25,73,74],{},"Das Werkzeug."," Was v0 im Code prüft, den es schreibt, und was es nicht\nveröffentlicht. Dieser Teil ist Vercels Sache, und er ist dokumentiert.",[70,77,78,81,82,84],{},[25,79,80],{},"Die Vorschau."," Der Schrank im Ausstellungsraum, unter seiner\n",[14,83,16],{},"-Adresse. Jede App, die wir gemessen haben, war in diesem\nStadium.",[70,86,87,90],{},[25,88,89],{},"Die App, die du füllst."," Derselbe Code, sobald er die Daten deiner Kunden\nhält oder auf einer eigenen Domain läuft. Fast nichts, was wir gemessen\nhaben, war so weit.",[30,92,94],{"id":93},"was-die-v0-sicherheit-abdeckt-bevor-du-veröffentlichst","Was die v0-Sicherheit abdeckt, bevor du veröffentlichst",[10,96,97],{},"Drei Dinge, und v0s eigene Dokumentation benennt jedes davon.",[10,99,100,103,104,109,110,113,114,116,117,121],{},[25,101,102],{},"Es liest den Code, den es geschrieben hat."," v0s\n",[47,105,108],{"href":106,"rel":107},"https:\u002F\u002Fv0.app\u002Fdocs\u002Fsecurity",[51],"Sicherheitsseite"," sagt, dass jeder generierte\nCode \"vor der Ausführung eine Sicherheitsanalyse durchläuft\" und dass v0 \"die\nNutzung von ",[14,111,112],{},"NEXT_PUBLIC_"," analysiert und vor möglichen Sicherheitsrisiken\nwarnt\". ",[14,115,112],{}," ist das Präfix, das Next.js, dem Framework, in dem v0\nschreibt, sagt, einen Wert in den Code zu legen, den jeder Besucher lädt.\n",[47,118,120],{"href":119},"\u002Fblog\u002Fvite-and-next-public-env-vars","Was dieses Präfix mit einem Schlüssel macht","\nist ein eigener Beitrag.",[10,123,124,127,128,133],{},[25,125,126],{},"Es verweigert manche Deployments."," Im\n",[47,129,132],{"href":130,"rel":131},"https:\u002F\u002Fvercel.com\u002Fblog\u002Fv0-vibe-coding-securely",[51],"August 2025"," schrieb Vercel,\nv0 habe in den vorangegangenen 30 Tagen über 17.000 Deployments allein wegen\noffengelegter Secrets blockiert, und seit dem Start über 100.000 unsichere\nDeployments. Das sind Vercels Zahlen über Vercels Sperre, und die gilt für\nDeployments auf Vercel. Ein Teil unserer Null kann auf diese Sperre zurückgehen.\nWie viel, können wir von außen nicht sagen.",[10,135,136,139,140,142,143,146],{},[25,137,138],{},"Die Supabase-Integration setzt das Präfix an die richtige Stelle."," Über den\nVercel Marketplace verbunden, legt sie ein Dutzend Umgebungsvariablen an, und\nnur zwei davon tragen ",[14,141,112],{},": die Projektadresse und der\nveröffentlichbare Schlüssel, die beide öffentlich sein sollen.\n",[14,144,145],{},"SUPABASE_SECRET_KEY"," und das Datenbankpasswort bleiben ohne Präfix auf dem\nServer.",[148,149],"diagram",{"alt":150,"caption":151,"src":152},"Zwölf Zeilen mit Einstellungen in einem Kasten. Zehn haben maskierte Werte und bleiben im Kasten. Zwei tragen das Etikett NEXT_PUBLIC_ und lesbare Werte, und Pfeile tragen diese zwei über eine gestrichelte Wand zu einem Besucher draußen.","Die Supabase-Integration legt zwölf Variablen an. Zwei davon erreichen jeden Besucher, und beide sollen das: die Projektadresse und der veröffentlichbare Schlüssel.","\u002Fblog\u002Fis-v0-safe\u002Ftwo-of-twelve-1600x720.png",[154,155,157],"callout",{"type":156},"note",[10,158,159,160,62],{},"Kostenlos, ohne Konto, etwa 20 Sekunden: Der Scan auf unserer Startseite führt\nalle neun dieser Checks gegen deine laufende App aus und schreibt \"Konnte nicht\ngeprüft werden\" statt eines Hakens, wenn er keine Antwort bekam.\n",[47,161,163],{"href":162},"\u002Fsecurity-scanner","App scannen",[30,165,167],{"id":166},"warum-einer-v0-vorschau-security-header-fehlen","Warum einer v0-Vorschau Security-Header fehlen",[10,169,170],{},"Weil die Vorschaudomain von v0 sie setzt, bekommt jede App darauf dieselbe\nAntwort, und aus einer Vorschau heraus kannst du das nicht ändern.",[10,172,173],{},"Security-Header sind Anweisungen, die eine Website mit jeder Seite mitschickt:\nimmer HTTPS benutzen, keine andere Website darf diese Seite in ihre eigene\neinbetten, nicht raten, welche Art Datei das ist. Wer die Seite ausliefert,\nschickt sie. Die Vorschauen, die wir am 3. Oktober 2026 geöffnet haben,\nschickten einen der fünf, nach denen unser Check sucht, den, der HTTPS\nerzwingt, und keinen der anderen vier. Das ist der Fund bei allen 1.790\nv0-Apps, und er ist der einzige.",[10,175,176,177,180,181,185],{},"Der Ausstellungsraum bestimmt seine eigenen Türen und Alarmanlagen, und du\nkannst sie nicht für einen einzelnen Schrank darin umverdrahten. Sobald du\nveröffentlichst, steht der Schrank in deinem Büro, und die Header sind eine\nEinstellung in ",[14,178,179],{},"vercel.json"," oder in deiner Next.js-Konfiguration.\n",[47,182,184],{"href":183},"\u002Fblog\u002Fmissing-security-headers","Was jeder Header tut, und die zwei, die nichts kosten",",\nist ein eigener Artikel.",[30,187,189],{"id":188},"ist-eine-vusercontentnet-vorschau-öffentlich","Ist eine vusercontent.net-Vorschau öffentlich?",[10,191,192],{},"Behandle sie als öffentlich. Jeder, der die Adresse hat, kann sie öffnen, und\nAdressen wandern.",[10,194,195,196,201,202,205],{},"Jede der 1.790 öffnete sich für uns ohne Anmeldung, und wir mussten keine davon\nerraten: Ihre Adressen stammten aus einem öffentlichen Webarchiv, das von jeder\nschon eine Kopie gespeichert hatte. v0s\n",[47,197,200],{"href":198,"rel":199},"https:\u002F\u002Fv0.app\u002Fdocs\u002Fsharing",[51],"Freigabe-Einstellungen"," entscheiden, wer deinen\n",[25,203,204],{},"Chat"," sehen kann: standardmäßig privat, dann dein Team, jeder mit dem Link\noder jeder im Web. Die Dokumentation sagt nicht, dass diese Einstellungen bis\nzur Vorschau reichen.",[10,207,208,209,211],{},"Eine Vorschau ist also der Schrank im Ausstellungsraum. Das passt, um jemandem\ndas Design zu zeigen, und nicht für die echten Unterlagen von irgendwem. Vercel\nhat ",[14,210,16],{}," im September 2024 auf die Public Suffix List gesetzt,\nwodurch Browser jede Vorschau als eigene Website behandeln, also kann eine\nVorschau keine Cookies für alle anderen setzen. Das hält Vorschauen voneinander\ngetrennt, und es trägt nichts dazu bei, deine privat zu halten.",[10,213,214,215,217,218,223],{},"Falls du hier bist, weil dir jemand einen ",[14,216,16],{},"-Link geschickt hat:\nDie Domain gehört Vercel, und die Seite darauf hat gebaut, wer sie per Prompt\nerstellt hat. Am 1. Juli 2025\n",[47,219,222],{"href":220,"rel":221},"https:\u002F\u002Fwww.okta.com\u002Fblog\u002Fthreat-intelligence\u002Fokta-observes-v0-ai-tool-used-to-build-phishing-sites\u002F",[51],"berichtete Okta","\nvon Angreifern, die mit v0 Kopien echter Anmeldeseiten bauten, und Vercel hat\nden Zugriff auf die gefundenen eingeschränkt. Tippe kein Passwort in ein\nAnmeldeformular unter so einer Adresse, wenn du es nicht erwartet hast.",[30,225,227],{"id":226},"was-sich-ändert-wenn-du-supabase-mit-v0-verbindest","Was sich ändert, wenn du Supabase mit v0 verbindest",[10,229,230],{},"Du fängst an, die Schubladen zu füllen, und die Checks, die bei v0 leer\nzurückkamen, haben plötzlich etwas zu prüfen.",[10,232,233,234,239],{},"v0 fügt Supabase mit einem Klick hinzu und \"kann\", in den Worten\n",[47,235,238],{"href":236,"rel":237},"https:\u002F\u002Fv0.app\u002Fdocs\u002Fdatabases",[51],"seiner eigenen Dokumentation",", \"SQL erzeugen und\nausführen. Damit kannst du Tabellen anlegen, ändern und löschen.\" So entstehen\ndeine Tabellen. Jede Tabelle ist eine Schublade, und Row Level Security ist das\nSchloss daran: eine Einstellung pro Tabelle, die entscheidet, welche Zeilen der\nveröffentlichbare Schlüssel in deiner Seite lesen darf. Dieser Schlüssel soll\nöffentlich sein, also entscheidet allein das Schloss, was ein Fremder\nzurückbekommt.",[10,241,242],{},"Supabase baut dieses Schloss standardmäßig in Tabellen ein, die im Table Editor\nangelegt werden, und lässt es bei Tabellen weg, die per SQL angelegt werden, und\ngenau so legt v0 sie an.",[148,244],{"alt":245,"caption":246,"src":247},"Zwei Bahnen. In der oberen erzeugt ein Gitter-Symbol drei Tabellen, jede mit einem geschlossenen Schloss daneben. In der unteren erzeugt ein Terminal-Symbol mit dem v0-Logo daneben drei Tabellen, jede mit einem offen hängenden, rot gezeichneten Schloss.","Eine Tabelle aus dem Table Editor von Supabase kommt verschlossen an. Eine Tabelle, die per SQL angelegt wird, und so legt v0 sie an, kommt mit offenem Schloss an.","\u002Fblog\u002Fis-v0-safe\u002Ftwo-ways-to-make-a-table-1600x620.png",[10,249,250,251,255,256,259,260,264],{},"Dort landeten die ernsten Funde bei jedem anderen Builder. Von den 3.553\nLovable-Apps, deren Datenbank wir fragen konnten, gaben 2.017 Zeilen an eine\nAnfrage ohne Anmeldung heraus, und ",[47,252,254],{"href":253},"\u002Fblog\u002Fis-lovable-safe","die Lovable-Zahlen","\nzeigen, wie die Ergebnisse eines Builders aussehen, sobald Unterlagen in den\nSchubladen liegen. Ein Schloss, das jeder Schlüssel öffnet, ist auch kein\nSchloss: Eine Policy mit ",[14,257,258],{},"using (true)"," lässt alle durch, während das Dashboard\ndie Tabelle als geschützt anzeigt.\n",[47,261,263],{"href":262},"\u002Fblog\u002Fsupabase-rls-on-but-table-still-public","RLS ist an und deine Tabelle trotzdem öffentlich","\nerzählt die ganze Geschichte.",[10,266,267,268,62],{},"Wenn deine Daten stattdessen hinter Routen liegen, die dein eigener Servercode\nbeantwortet, stellt sich dieselbe Frage für diese Routen:\n",[47,269,271],{"href":270},"\u002Fblog\u002Fopen-api-endpoint-exposed","was ein offener API-Endpunkt bedeutet",[30,273,275],{"id":274},"was-sich-ändert-wenn-du-veröffentlichst-oder-selbst-deployst","Was sich ändert, wenn du veröffentlichst oder selbst deployst",[10,277,278],{},"Der Schrank zieht aus dem Ausstellungsraum in dein Büro, und die\nEntscheidungen, die bisher die Domain von v0 getroffen hat, werden deine.",[10,280,281,282,287,288,290],{},"Veröffentlichen aus v0 legt ein Vercel-Projekt an und fragt laut\n",[47,283,286],{"href":284,"rel":285},"https:\u002F\u002Fv0.app\u002Fdocs\u002Fdeployments",[51],"v0s Deployment-Dokumentation"," drei Dinge ab:\nden Projektnamen, wer auf die veröffentlichte App zugreifen darf, und die\nDomain, entweder eine ",[14,289,56],{},"-Adresse oder eine eigene. Nimm dir für die\nzweite Zeit. Welche Optionen du siehst, hängt von deinem Tarif ab, und wenn du\ndie App auf dein Team beschränkst oder hinter ein Passwort legst, bis du sie\ngeprüft hast, bleiben Fremde draußen, während du nachsiehst.",[10,292,293],{},"Drei Dinge gehen beim Veröffentlichen auf dich über:",[295,296,297,303,312],"ul",{},[70,298,299,302],{},[25,300,301],{},"Die Header."," Die Türen und Alarmanlagen des Büros stellst jetzt du ein.",[70,304,305,308,309,311],{},[25,306,307],{},"Die Umgebungsvariablen."," Sie liegen in den Einstellungen deines Projekts,\nund in dieser Liste entscheidet sich, ob ein Schlüssel das Präfix\n",[14,310,112],{}," bekommt oder nicht.",[70,313,314,317],{},[25,315,316],{},"Die Prüfung deines Deployments, wenn du Vercel verlässt."," Vercel beschreibt\nseine Sperre als etwas, das Deployments auf Vercel stoppt, also geht Code, den\ndu herunterlädst und woanders hostest, ohne diese Prüfung raus.",[10,319,320,321,325],{},"So oder so hast du die Stichprobe verlassen, die wir gemessen haben. Eine\nv0-App auf eigener Domain mit einer Datenbank dahinter hat mehr gemeinsam mit\nden ",[47,322,324],{"href":323},"\u002Fblog\u002Fis-bolt-safe","Bolt-Apps, die wir gemessen haben",", als mit diesen\n1.790 Vorschauen.",[30,327,329],{"id":328},"so-prüfst-du-deine-eigene-v0-app","So prüfst du deine eigene v0-App",[10,331,332],{},"Fünf Dinge, und die ersten drei zählen erst, wenn du eine Datenbank verbunden\noder veröffentlicht hast. Nimm ein privates Fenster, damit nicht deine eigene\nAnmeldung für einen Fremden antwortet.",[67,334,335,347,353,359,365],{},[70,336,337,340,341,343,344,346],{},[25,338,339],{},"Lies deine Umgebungsvariablen."," In v0 findest du sie im Projektmenü unter\nSettings, Environment Variables. Alles, was mit ",[14,342,112],{}," beginnt, steht\nim Code, den jeder Besucher lädt. Eine Projektadresse und ein\nveröffentlichbarer Schlüssel gehören dorthin. Ein Schlüssel, der dir Kosten\nverursacht, ",[14,345,145],{}," und alles, was ein Passwort enthält, nie.\nTrug einer davon je das Präfix, rotiere ihn zuerst beim Anbieter, denn der\nalte Wert funktioniert weiter, bis du das tust.",[70,348,349,352],{},[25,350,351],{},"Lies das Schloss an jeder Tabelle."," Öffne in Supabase Authentication →\nPolicies und geh die Liste durch. Eine Tabelle mit deaktivierter Row Level\nSecurity ist für jeden lesbar, der deine Projektadresse hat, und die steht in\ndeiner Seite. Eine Policy, die allen alles erlaubt, zählt als deaktiviert.",[70,354,355,358],{},[25,356,357],{},"Wähle beim Veröffentlichen, wer sie sehen darf."," Nur dein Team oder ein\nPasswort, bis die ersten beiden erledigt sind.",[70,360,361,364],{},[25,362,363],{},"Setze deine Header, sobald die Domain dir gehört."," Zwei davon sind je eine\nZeile.",[70,366,367,370,371,62],{},[25,368,369],{},"Dann sieh von außen hin."," Unser Scan führt alle neun Checks gegen die\nveröffentlichte Adresse aus, so wie ein Fremder sie sieht, dauert etwa 20\nSekunden und braucht kein Konto:\n",[47,372,373],{"href":162},"App kostenlos scannen",[10,375,376,377,62],{},"Ein Scan von außen sieht weder den Code, den v0 geschrieben hat, noch den Chat,\nin dem du ihn geschrieben hast, noch eine Tabelle, die deine Seiten nie\nerwähnen. v0s Checks sehen den Code von innen und sehen nicht, was ein Fremder\nunter der Adresse bekommt. Lass die von v0 laufen, während du baust, sieh nach\ndem Veröffentlichen von außen hin, und wenn die beiden je uneins sind, ob eine\nTabelle lesbar ist, verlass dich auf die Antwort von außen, denn die bekommt ein\nFremder. Die Version in einfacher Sprache für diese Plattform ist\n",[47,378,380],{"href":379},"\u002Fis-your-v0-app-safe","ist deine v0-App sicher",[30,382,384],{"id":383},"damit-es-nach-dem-veröffentlichen-so-bleibt","Damit es nach dem Veröffentlichen so bleibt",[10,386,387,390],{},[25,388,389],{},"Ein A für eine Vorschau beschreibt eine Vorschau."," An dem Tag, an dem du eine\nDatenbank verbindest oder auf deiner eigenen Domain veröffentlichst, kann sich\ndeine Note ändern, und nichts auf deinem Bildschirm sagt dir, dass sie es getan\nhat.",[10,392,393],{},[25,394,395,399],{},[47,396,398],{"href":397},"\u002Fpricing","Reeve Monitor"," führt die neun Checks für dich erneut aus:",[295,401,402,405,408,415],{},[70,403,404],{},"alle neun Checks stündlich, für bis zu drei Apps",[70,406,407],{},"ob die App läuft, alle 60 Sekunden",[70,409,410,411,414],{},"eine Nachricht, wenn sich ein Ergebnis ",[25,412,413],{},"ändert",", damit eine neue Tabelle oder ein neuer Schlüssel nicht wartet, bis du nachsiehst",[70,416,417],{},"ein Monatsbericht über das, was er gesehen hat",[10,419,420],{},"Monitor kostet €12 im Monat zum Listenpreis, mit sieben freien Tagen, bevor\nabgerechnet wird. Die Preisseite liegt manchmal unter der Zahl hier und nie\ndarüber.",[10,422,423],{},[25,424,425,426,430],{},"Wenn deine v0-App ihre Daten in Supabase hält, bewahrt\n",[47,427,429],{"href":428},"\u002Fsupabase-backups","Reeve Care"," eine Kopie deiner Supabase-Datenbank auf.",[295,432,433,436,439,442,445],{},[70,434,435],{},"jede Nacht eine verschlüsselte Kopie, dort aufbewahrt, wo dein Projekt nicht hinkommt",[70,437,438],{},"jede Kopie geprüft, bevor sie zählt: Wir zählen die Zeilen jeder Tabelle nach",[70,440,441],{},"eine Wiederherstellung per Klick, wenn du sie brauchst",[70,443,444],{},"auch deine hochgeladenen Dateien, sobald du einen Storage-Zugang verbindest",[70,446,447],{},"alles, was Monitor macht",[10,449,450],{},"Care kostet €49 im Monat zum Listenpreis für eine App, mit denselben sieben\nfreien Tagen.",[10,452,453,454,458],{},"Laut v0s Dokumentation kann es Tabellen auch löschen, nicht nur anlegen, und\nkeiner der neun Checks oben würde die Zeilen darin zurückbringen.\n",[47,455,457],{"href":456},"\u002Fblog\u002Fai-agent-deleted-my-database","Der Tag, an dem ein KI-Agent eine Produktionsdatenbank gelöscht hat","\nzeigt, wie das von innen aussieht.",[30,460,462],{"id":461},"was-du-diese-woche-tun-solltest","Was du diese Woche tun solltest",[464,465,466],"key-takeaways",{},[295,467,468,471,477,480,483],{},[70,469,470],{},"Wenn deine v0-App noch eine Vorschau ist, behandle ihre Adresse als öffentlich und halte echte Personendaten heraus.",[70,472,473,474,476],{},"Bevor du eine Datenbank verbindest, entscheide, wo jeder Schlüssel liegt: ",[14,475,112],{}," für die Projektadresse und den veröffentlichbaren Schlüssel, und für alles andere nirgends in der Nähe des Browsers.",[70,478,479],{},"Nachdem du Supabase verbunden hast, lies die Policy jeder Tabelle, die v0 angelegt hat, und behandle eine, die allen alles erlaubt, als ausgeschaltet.",[70,481,482],{},"Veröffentliche nur für dein Team oder hinter einem Passwort, bis das erledigt ist, und prüfe dann die veröffentlichte Adresse von außen.",[70,484,485],{},"Bewahre eine Kopie deiner Datenbank dort auf, wo v0 und dein Projekt nicht hinkommen, und prüfe, dass sich die Kopie wiederherstellen lässt.",[10,487,488,489,493],{},"Fang mit den Umgebungsvariablen an, denn sie entscheiden, was jeder Besucher\nlädt. Wenn du noch zwischen Buildern wählst, stellt\n",[47,490,492],{"href":491},"\u002Fblog\u002Fsafest-ai-app-builder","welcher KI-App-Builder am sichersten ist"," alle\nfünf nebeneinander.",{"title":495,"searchDepth":496,"depth":496,"links":497},"",3,[498,500,501,502,503,504,505,506,507],{"id":32,"depth":499,"text":33},2,{"id":93,"depth":499,"text":94},{"id":166,"depth":499,"text":167},{"id":188,"depth":499,"text":189},{"id":226,"depth":499,"text":227},{"id":274,"depth":499,"text":275},{"id":328,"depth":499,"text":329},{"id":383,"depth":499,"text":384},{"id":461,"depth":499,"text":462},"Sicherheitsgrundlagen","\u002Fblog\u002Fis-v0-safe\u002Fcover-1200x630.png","Ein Aktenschrank mit v0-Logo und einer leeren, aufgezogenen Schublade, daneben ein Schrank mit lauter verschlossenen Schubladen.","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.",false,"md",[515,517,520,523,526,529],{"q":33,"a":516},"Bei dem, was wir messen konnten, schnitt v0 sauberer ab als jeder andere Builder in unserem Scan. Alle 1.790 laufenden v0-Apps bekamen ein A, und ihr einziger gemeinsamer Fund war eine Browser-Header-Einstellung auf der Domain, von der v0 Vorschauen ausliefert. Nur 17 davon nannten allerdings eine Datenbank, und keine dieser 17 gab unserem Datenbank-Check eine Antwort, also beschreibt das A vor allem Frontends, hinter denen nichts steht. Sobald du Supabase verbindest oder auf einer eigenen Domain veröffentlichst, gelten die Checks, die über eine schlechte Note entscheiden, auch für dich.",{"q":518,"a":519},"Sind v0-Apps standardmäßig sicher?","Die Teile, die v0 kontrolliert, sind in gutem Zustand. Laut seiner Dokumentation durchläuft generierter Code vor der Ausführung eine Sicherheitsanalyse, und v0 warnt vor riskanter Nutzung des Präfixes NEXT_PUBLIC_. Im August 2025 schrieb Vercel, v0 habe in 30 Tagen über 17.000 Deployments wegen offengelegter Secrets blockiert. Was kein Standard entscheidet, ist das Schloss an deinen Datenbanktabellen. Supabase schaltet Row Level Security für Tabellen, die per SQL angelegt werden, nicht ein, und genau so legt v0 sie an. Lies also die Policy jeder Tabelle, nachdem du eine Datenbank verbunden hast.",{"q":521,"a":522},"Ist eine vusercontent.net-Vorschau-URL öffentlich?","Behandle sie als öffentlich. Jede der 1.790 v0-Vorschauen in unserem Scan öffnete sich ohne Anmeldung, und ihre Adressen fanden wir in einem öffentlichen Webarchiv. Die Freigabe-Einstellungen in v0 regeln, wer deinen Chat sehen kann, und die Dokumentation sagt nicht, dass sie für die Vorschau gelten. Halte echte Personendaten aus einer Vorschau heraus, und wähle beim Veröffentlichen Sichtbarkeit nur fürs Team oder per Passwort, bis die App für Fremde bereit ist.",{"q":524,"a":525},"Ist vusercontent.net sicher?","Die Domain ist echt und gehört Vercel, das darauf hostet, was Leute mit v0 erzeugen. Die Seite unter einer bestimmten Adresse hat aber gebaut, wer sie per Prompt erstellt hat, und im Juli 2025 berichtete Okta, dass Angreifer mit v0 Kopien von Anmeldeseiten gebaut hatten. Vercel hat den Zugriff auf die gefundenen eingeschränkt. Wenn ein Link, den du nicht erwartet hast, ein Anmeldeformular unter einer vusercontent.net-Adresse öffnet, tippe dort kein Passwort ein.",{"q":527,"a":528},"Was ändert sich, wenn ich Supabase mit v0 verbinde?","Hinter deinem Frontend liegen jetzt Daten, also haben die Checks, die bei v0-Apps leer zurückkamen, plötzlich etwas zu prüfen. v0 kann SQL ausführen, um Tabellen anzulegen, und Supabase schaltet Row Level Security für so angelegte Tabellen nicht ein. Dein veröffentlichbarer Schlüssel soll in der Seite stehen, also entscheidet allein die Policy jeder Tabelle, was ein Fremder lesen kann. Von den 3.553 Lovable-Apps, deren Datenbank wir fragen konnten, gaben 2.017 Zeilen an eine Anfrage ohne Anmeldung heraus.",{"q":530,"a":531},"Was ändert sich, wenn ich v0-Code selbst deploye?","Drei Dinge gehören dann dir. Die Security-Header, die bisher die v0-Vorschaudomain festgelegt hat, werden zu einer Einstellung in vercel.json oder deiner Next.js-Konfiguration. Deine Umgebungsvariablen, und welche davon das Präfix NEXT_PUBLIC_ tragen, liegen in deinem eigenen Projekt. Und Code, den du herunterlädst und woanders als bei Vercel hostest, läuft nicht mehr durch die Deployment-Prüfung, die Vercel für v0 beschreibt. Sieh dir die veröffentlichte Adresse von außen an, sobald sie live ist.","\u002Fblog\u002Fis-v0-safe\u002Fcard-800x500.png",[534,535,536,537,538,539,540,541,542],"v0 sicherheit","ist v0 sicher","v0.dev sicherheit","ist v0 sicher in der nutzung","vercel v0 sicherheit","sind v0 apps sicher","v0 app sicherheit","v0 deployment sicherheit","vusercontent.net sicher",{},true,"v0-Sicherheit: alle 1.790 gescannten Apps bekamen ein A","\u002Fblog\u002Fis-v0-safe","2026-10-03",{"title":5,"description":511},"blog\u002Fis-v0-safe",[551,552,553],"Bei der v0-Sicherheit schnitt v0 sauberer ab als jeder andere Builder, den wir gemessen haben: Alle 1.790 laufenden v0-Apps aus unserem Scan bekamen ein A, und ihr einziger gemeinsamer Fund ist eine Header-Einstellung auf der Domain, von der v0 sie ausliefert.","Das sagt vor allem etwas darüber, was diese Apps sind. Nur 17 der 1.790 nannten eine Datenbank, und keine dieser 17 gab unserem Datenbank-Check eine Antwort, die er beurteilen konnte.","Verbinde Supabase oder veröffentliche auf einer eigenen Domain, und die Checks, die leer zurückkamen, haben plötzlich etwas zu prüfen.","2NGGXXm_LkWWNm9Qb9Q-apjvIJb67rsutD1jnxIz16E",[556,562,568,574,580,586,592,598,604,605,610,616,622,628,635,641,647,652,657,663,669,675,680,686,692,697,703,709,715,721,727,733,738,744,750,756,762,768,774,779,785,791,797,803,809,815,821,827,833,839,845,851,857,862,868,873,879,885,890,895,901],{"path":557,"title":558,"description":559,"published":560,"category":508,"image":561,"draft":512},"\u002Fblog\u002Fstorage-upload-violates-row-level-security","\"Row-level security policy for table objects\" beim Upload","\"New row violates row-level security policy for table objects\" heißt: Deinem Upload fehlt eine insert-Regel. Ein öffentlicher Bucket fügt keine hinzu.","2026-10-11","\u002Fblog\u002Fstorage-upload-violates-row-level-security\u002Fcard-800x500.png",{"path":563,"title":564,"description":565,"published":566,"category":508,"image":567,"draft":512},"\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","\u002Fblog\u002Fbase44-security-scan\u002Fcard-800x500.png",{"path":569,"title":570,"description":571,"published":572,"category":508,"image":573,"draft":512},"\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":575,"title":576,"description":577,"published":578,"category":508,"image":579,"draft":512},"\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":581,"title":582,"description":583,"published":584,"category":508,"image":585,"draft":512},"\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":587,"title":588,"description":589,"published":590,"category":508,"image":591,"draft":512},"\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":593,"title":594,"description":595,"published":596,"category":508,"image":597,"draft":512},"\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":599,"title":600,"description":601,"published":602,"category":508,"image":603,"draft":512},"\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":546,"title":5,"description":511,"published":547,"category":508,"image":532,"draft":512},{"path":323,"title":606,"description":607,"published":608,"category":508,"image":609,"draft":512},"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":611,"title":612,"description":613,"published":614,"category":508,"image":615,"draft":512},"\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":617,"title":618,"description":619,"published":620,"category":508,"image":621,"draft":512},"\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":623,"title":624,"description":625,"published":626,"category":508,"image":627,"draft":512},"\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":629,"title":630,"description":631,"published":632,"category":633,"image":634,"draft":512},"\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","Backups","\u002Fblog\u002Ftest-your-supabase-backup\u002Fcard-800x500.png",{"path":636,"title":637,"description":638,"published":639,"category":633,"image":640,"draft":512},"\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":642,"title":643,"description":644,"published":645,"category":633,"image":646,"draft":512},"\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":648,"title":649,"description":650,"published":645,"category":508,"image":651,"draft":512},"\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":270,"title":653,"description":654,"published":655,"category":508,"image":656,"draft":512},"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":658,"title":659,"description":660,"published":661,"category":508,"image":662,"draft":512},"\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":664,"title":665,"description":666,"published":667,"category":633,"image":668,"draft":512},"\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":670,"title":671,"description":672,"published":673,"category":508,"image":674,"draft":512},"\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":253,"title":676,"description":677,"published":678,"category":508,"image":679,"draft":512},"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":681,"title":682,"description":683,"published":684,"category":508,"image":685,"draft":512},"\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":687,"title":688,"description":689,"published":690,"category":508,"image":691,"draft":512},"\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":119,"title":693,"description":694,"published":695,"category":508,"image":696,"draft":512},"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":698,"title":699,"description":700,"published":701,"category":508,"image":702,"draft":512},"\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":704,"title":705,"description":706,"published":707,"category":508,"image":708,"draft":512},"\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":710,"title":711,"description":712,"published":713,"category":508,"image":714,"draft":512},"\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":716,"title":717,"description":718,"published":719,"category":633,"image":720,"draft":512},"\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":722,"title":723,"description":724,"published":725,"category":633,"image":726,"draft":512},"\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":728,"title":729,"description":730,"published":731,"category":633,"image":732,"draft":512},"\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":491,"title":734,"description":735,"published":736,"category":508,"image":737,"draft":512},"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":739,"title":740,"description":741,"published":742,"category":508,"image":743,"draft":512},"\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":745,"title":746,"description":747,"published":748,"category":508,"image":749,"draft":512},"\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":751,"title":752,"description":753,"published":754,"category":508,"image":755,"draft":512},"\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":757,"title":758,"description":759,"published":760,"category":508,"image":761,"draft":512},"\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":763,"title":764,"description":765,"published":766,"category":508,"image":767,"draft":512},"\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":769,"title":770,"description":771,"published":772,"category":508,"image":773,"draft":512},"\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":183,"title":775,"description":776,"published":777,"category":508,"image":778,"draft":512},"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":780,"title":781,"description":782,"published":783,"category":508,"image":784,"draft":512},"\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":786,"title":787,"description":788,"published":789,"category":508,"image":790,"draft":512},"\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":792,"title":793,"description":794,"published":795,"category":633,"image":796,"draft":512},"\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":798,"title":799,"description":800,"published":801,"category":508,"image":802,"draft":512},"\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":804,"title":805,"description":806,"published":807,"category":633,"image":808,"draft":512},"\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":810,"title":811,"description":812,"published":813,"category":508,"image":814,"draft":512},"\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":816,"title":817,"description":818,"published":819,"category":508,"image":820,"draft":512},"\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":822,"title":823,"description":824,"published":825,"category":508,"image":826,"draft":512},"\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":828,"title":829,"description":830,"published":831,"category":508,"image":832,"draft":512},"\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":834,"title":835,"description":836,"published":837,"category":633,"image":838,"draft":512},"\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":840,"title":841,"description":842,"published":843,"category":633,"image":844,"draft":512},"\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":846,"title":847,"description":848,"published":849,"category":508,"image":850,"draft":512},"\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":852,"title":853,"description":854,"published":855,"category":508,"image":856,"draft":512},"\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":456,"title":858,"description":859,"published":860,"category":633,"image":861,"draft":512},"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":863,"title":864,"description":865,"published":866,"category":508,"image":867,"draft":512},"\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":869,"title":870,"description":871,"published":866,"category":508,"image":872,"draft":512},"\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":874,"title":875,"description":876,"published":877,"category":508,"image":878,"draft":512},"\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":880,"title":881,"description":882,"published":883,"category":633,"image":884,"draft":512},"\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":262,"title":886,"description":887,"published":888,"category":508,"image":889,"draft":512},"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":891,"title":892,"description":893,"published":888,"category":633,"image":894,"draft":512},"\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":896,"title":897,"description":898,"published":899,"category":633,"image":900,"draft":512},"\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":902,"title":903,"description":904,"published":899,"category":508,"image":905,"draft":512},"\u002Fblog\u002Fwhich-api-keys-are-safe-in-your-frontend","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",1791705957971]