[{"data":1,"prerenderedAt":1086},["ShallowReactive",2],{"blog-de-is-bolt-safe":3,"blog-index-de":736},{"id":4,"title":5,"body":6,"category":694,"cover":695,"coverAlt":696,"description":697,"draft":698,"extension":699,"faq":700,"image":715,"keywords":716,"meta":725,"navigation":726,"ogTitle":5,"path":727,"published":728,"seo":729,"stem":730,"tldr":731,"updated":728,"__hash__":735},"blog_de\u002Fblog\u002Fis-bolt-safe.md","Ist Bolt sicher? Was 1.123 echte Bolt-Apps zeigten",{"type":7,"value":8,"toc":678},"minimark",[9,18,26,29,34,37,40,62,65,69,82,218,221,227,243,247,250,260,271,283,286,297,301,304,307,367,374,382,389,394,398,401,404,426,434,438,441,444,449,459,463,466,469,485,492,496,499,506,513,516,520,523,560,564,570,579,598,601,612,629,632,640,644,667],[10,11,12,13,17],"p",{},"Du hast etwas auf Bolt gebaut, auf Publish gedrückt, und jetzt liegt es unter\neiner Adresse, die auf ",[14,15,16],"code",{},"bolt.host"," endet. Bevor du den Link an echte Kunden\nschickst, hast du \"ist bolt sicher\" in ein Suchfeld getippt, und zurück kam eine\nListe von fünf Schwachstellen, die angeblich in fast jeder Bolt-App stecken, mit\neinem Scanner zum Kaufen ganz unten.",[10,19,20,21,25],{},"Und hier liegt der Fehler dieser Listen: ",[22,23,24],"strong",{},"Sie gewichten jedes Risiko gleich,\nund in laufenden Bolt-Apps tauchen die meisten davon kaum auf."," Source Maps,\noffene Cross-Origin-Header und ungeschützte API-Routen stehen dort gleichrangig\nneben geleakten Schlüsseln und offenen Tabellen. In unseren Daten traten die\nersten drei bei 13, 1 und 4 Apps von über tausend auf. Die anderen beiden sind\nder Ort, an dem die Funde lagen.",[10,27,28],{},"Zwischen dem 12. und 14. August 2026 haben wir dieselben neun externen Checks,\ndie jeder auf unserer Startseite kostenlos ausführen kann, über 30.998 laufende\nApps laufen lassen, und 1.123 davon waren auf Bolts eigenem Hosting\nveröffentlicht. Das kam für sie zurück, und hier endet unser Blick.",[30,31,33],"h2",{"id":32},"ist-bolt-sicher","Ist Bolt sicher?",[10,35,36],{},"Bei allem, was Bolt selbst entscheidet, ja. Sein Hosting kam genauso sauber\nzurück wie das von Lovable, und alles, was eine Note drückte, saß in einer App,\ndie ihr Inhaber gebaut hat.",[10,38,39],{},"Stell dir eine Bolt-App als Laden vor. Bolt stellt das Gebäude: die Adresse, das\nZertifikat, das Hosting. Du füllst das Schaufenster, also jede Seite, jedes Bild\nund jedes Skript, das deine App einem Besucher aushändigt, und jeder, der\nvorbeigeht, kann lesen, was darin liegt. Hinter dem Laden liegt das Lager, deine\nDatenbank, mit eigener Tür und eigenem Schloss. \"Ist Bolt sicher\" sind in\nWahrheit drei Fragen, eine zu jedem davon.",[41,42,43,50,56],"ol",{},[44,45,46,49],"li",{},[22,47,48],{},"Das Gebäude."," Veröffentlicht Bolt deine App ordentlich: gültiges\nZertifikat, eine Domain, die nicht abläuft, nichts Verirrtes unter einer\nöffentlichen Adresse. Das ist Bolts Aufgabe.",[44,51,52,55],{},[22,53,54],{},"Das Schaufenster."," Was der Browser eines Besuchers lädt. Ein Schlüssel,\nder darin liegt, ist für jeden lesbar, der hinsieht, egal wie er dorthin kam.",[44,57,58,61],{},[22,59,60],{},"Das Lager."," Ob deine Datenbank einem Fremden antwortet, der um das Haus\nherumgeht und fragt. Das hängt an einem Schloss, das du setzt, Tabelle für\nTabelle.",[10,63,64],{},"Unsere Checks lesen alle drei von außen. Keiner davon liest den Code, den Bolts\nAgent geschrieben hat, so wie du ihn im Editor lesen würdest, und dieser Beitrag\nrät dort nicht.",[30,66,68],{"id":67},"was-wir-in-1123-bolt-apps-gefunden-haben","Was wir in 1.123 Bolt-Apps gefunden haben",[10,70,71,72,75,76,81],{},"Neun Checks, von außen, ohne Anmeldung und ohne Zugriff auf irgendein Konto. Wo\neine Datenbank antwortete, haben wir gefragt, wie viele Zeilen sie herausgeben\nwürde, und dort aufgehört; gelesen haben wir keine. Keine App wird hier oder\nanderswo von uns genannt. Jeder Anteil unten bezieht sich auf die Apps, bei\ndenen der Check ",[22,73,74],{},"geantwortet"," hat, denn ein Check, der nicht durchlief, ist\nunbekannt und nicht bestanden. Deshalb bewegen sich die Nenner. Methode und\nDaten stehen ",[77,78,80],"a",{"href":79},"\u002Fresearch\u002Fvibe-coded-app-security-2026","im Bericht",".",[83,84,85,102],"table",{},[86,87,88],"thead",{},[89,90,91,95,99],"tr",{},[92,93,94],"th",{},"Was wir geprüft haben",[92,96,98],{"align":97},"right","Bolt-Apps",[92,100,101],{},"Wer es entscheidet",[103,104,105,117,128,138,149,159,169,179,197,208],"tbody",{},[89,106,107,111,114],{},[108,109,110],"td",{},"Browser-Sicherheitsheader fehlen",[108,112,113],{"align":97},"1.121 von 1.123",[108,115,116],{},"Bolts Hosting",[89,118,119,122,125],{},[108,120,121],{},"Etwas Schlüsselförmiges im Code, den ein Besucher lädt",[108,123,124],{"align":97},"75 von 1.123 (7 %)",[108,126,127],{},"Deine App",[89,129,130,133,136],{},[108,131,132],{},"Eine Datenbanktabelle ohne Anmeldung lesbar",[108,134,135],{"align":97},"27 von 35",[108,137,127],{},[89,139,140,143,146],{},[108,141,142],{},"Originalquellcode veröffentlicht (Source Maps)",[108,144,145],{"align":97},"13 von 1.123 (1 %)",[108,147,148],{},"Eine Build-Einstellung",[89,150,151,154,157],{},[108,152,153],{},"Ein Storage-Bucket, der seine Dateien auflistet",[108,155,156],{"align":97},"6 von 901",[108,158,127],{},[89,160,161,164,167],{},[108,162,163],{},"Eine API-Route, die einem Fremden Daten aushändigt",[108,165,166],{"align":97},"4 von 1.120",[108,168,127],{},[89,170,171,174,177],{},[108,172,173],{},"Jede Website darf deine API aufrufen",[108,175,176],{"align":97},"1 von 1.120",[108,178,127],{},[89,180,181,192,195],{},[108,182,183,184,187,188,191],{},"Eine private Datei wie ",[14,185,186],{},".env"," oder ",[14,189,190],{},".git\u002Fconfig"," unter offener URL",[108,193,194],{"align":97},"0 von 1.109",[108,196,127],{},[89,198,199,202,205],{},[108,200,201],{},"Zertifikat abgelaufen oder nicht vertrauenswürdig",[108,203,204],{"align":97},"0 von 1.119",[108,206,207],{},"Bolt",[89,209,210,213,216],{},[108,211,212],{},"Domain läuft bald ab",[108,214,215],{"align":97},"0 von 1.123",[108,217,207],{},[10,219,220],{},"Die Noten: 1.051 A, 33 B, 24 C, 15 D und überhaupt kein F.",[222,223],"diagram",{"alt":224,"caption":225,"src":226},"Sieben waagerechte Balken auf einer Skala, jeder mit einem kleinen Zeichen davor und einer Zahl dahinter: 1.121 für Header, 75 für Schlüssel, 27 für lesbare Tabellen, 13 für Source Maps, 6 für Storage-Buckets, 4 für offene Routen und 1 für den offenen Cross-Origin-Header. Der oberste Balken ist lang und blass grau, die übrigen sind kurz und türkis, und die letzten drei sind Haarlinien mit einem Ring darum.","Anzahl Apps auf einer Skala. Den grauen Balken entscheidet Bolts Hosting. Jeder türkise folgte aus etwas in der App, und die Zeile der lesbaren Tabellen misst gegen einen viel kleineren Nenner, den ein späteres Bild auseinandernimmt.","\u002Fblog\u002Fis-bolt-safe\u002Fwhat-we-found-1600x720.png",[10,228,229,230,233,234,238,239,242],{},"Diese erste Zeile entscheidet das, was deine Seiten ausliefert, und auf\n",[14,231,232],{},"yourapp.bolt.host"," ist das Bolt, also bekamen 1.121 Apps dieselbe Antwort.\nHeader sind ",[77,235,237],{"href":236},"\u002Fblog\u002Fmissing-security-headers","es wert, sie zu haben",", und aus\nihnen wird keine Note D. Lass diese Zeile weg, und ",[22,240,241],{},"1.008 der 1.123 Bolt-Apps\nhatten überhaupt nichts anderes",". Um die übrigen 115 geht es im Rest dieses\nBeitrags.",[30,244,246],{"id":245},"was-bolt-richtig-macht","Was Bolt richtig macht",[10,248,249],{},"Die Checks, die Bolt entscheidet, kamen fast leer zurück, und bei der einen\nBuild-Einstellung, die wir messen, lag es gleichauf mit Lovable.",[10,251,252,255,256,81],{},[22,253,254],{},"Source Maps."," 13 von 1.123 Bolt-Apps veröffentlichen die Originaldateien\nhinter der App, samt Kommentaren. Das ist etwas mehr als eine von hundert, etwa\ndieselbe Quote wie Lovables 225 von 18.553, und\n",[77,257,259],{"href":258},"\u002Fblog\u002Fsource-maps-exposed-in-production","eine Map verrät mehr, als die meisten erwarten",[10,261,262,265,266,270],{},[22,263,264],{},"Cross-Origin-Header."," Eine App von 1.120 erklärte jeder Website der Welt, sie\ndürfe ihre API aufrufen. Das ist der Fund, der\n",[77,267,269],{"href":268},"\u002Fblog\u002Fcors-wildcard-security-risk","am ehesten eine fremde Seite als dein Nutzer handeln lässt",",\nund auf Bolt kam er einmal vor.",[10,272,273,276,277,279,280,282],{},[22,274,275],{},"Das Gebäude selbst."," Das Zertifikat war auf allen 1.119 Apps gültig, bei\ndenen wir eines lesen konnten, keine Domain von 1.123 lief bald ab, und keine\nApp lieferte eine ",[14,278,186],{},"-Datei oder eine ",[14,281,190],{}," unter einer einfachen\nAdresse aus.",[10,284,285],{},"Nichts davon brauchte etwas von dir, und bei manchen anderen Buildern ist das\nanders.",[287,288,290],"callout",{"type":289},"note",[10,291,292,293,81],{},"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",[77,294,296],{"href":295},"\u002Fsecurity-scanner","App scannen",[30,298,300],{"id":299},"woraus-die-75-schlüssel-bestanden","Woraus die 75 Schlüssel bestanden",[10,302,303],{},"Die meisten waren in Ordnung, und die wenigen, die es nicht waren, sind das\nTeuerste in diesem Beitrag.",[10,305,306],{},"75 der 1.123 Bolt-Apps hatten etwas Schlüsselförmiges im Code, den ein Besucher\nlädt. Nach Formen gezählt sind das 7 % der Bolt-Apps, die \"Geheimnisse leaken\".\nDanach gezählt, was jeder Schlüssel kann, teilt es sich so auf, wobei jede App\neinmal gezählt wird, unter dem Ernstesten, was in ihr steckt:",[83,308,309,322],{},[86,310,311],{},[89,312,313,316,319],{},[92,314,315],{},"Was wir im Bundle gefunden haben",[92,317,318],{"align":97},"Apps",[92,320,321],{},"Was es bedeutet",[103,323,324,335,346,357],{},[89,325,326,329,332],{},[108,327,328],{},"Ein Google-API-Schlüssel, sonst nichts",[108,330,331],{"align":97},"38",[108,333,334],{},"Meist korrekt, sobald er auf deine Domain beschränkt ist",[89,336,337,340,343],{},[108,338,339],{},"Ein Geheimnis, das wir nicht zuordnen konnten",[108,341,342],{"align":97},"26",[108,344,345],{},"Wir konnten nicht sagen, zu welchem Anbieter es gehört",[89,347,348,351,354],{},[108,349,350],{},"Ein OpenAI-Schlüssel",[108,352,353],{"align":97},"10",[108,355,356],{},"Belastet dein Konto, direkt",[89,358,359,362,365],{},[108,360,361],{},"Ein Anthropic-Schlüssel",[108,363,364],{"align":97},"1",[108,366,356],{},[10,368,369,370,81],{},"Die 38 Google-Schlüssel sind der Grund, warum wir jeden Schlüssel einordnen,\nstatt nur ein Muster abzugleichen. Ein Google-Maps-Schlüssel im Browser ist\ndort, wo er hingehört, und der Fix ist,\n",[77,371,373],{"href":372},"\u002Fblog\u002Fgoogle-api-key-exposed-in-frontend","ihn auf deine eigene Domain zu beschränken",[10,375,376,377,381],{},"Die zehn OpenAI-Schlüssel sind der umgekehrte Fall. Ein OpenAI-Schlüssel ist\nein Bearer-Token: Wer ihn hat, kann damit Geld ausgeben, von überall, und OpenAI\nbietet keine Einstellung, die einen Schlüssel an deine Seite bindet. Alle zehn\ndieser Apps bekamen ein D, weil ein kritischer Fund die Note deckelt, egal was\ndie App sonst richtig gemacht hat.\n",[77,378,380],{"href":379},"\u002Fblog\u002Fopenai-api-key-exposed-in-frontend","Was mit einem solchen zu tun ist, der Reihe nach",",\nbeginnt damit, ihn noch heute zu rotieren.",[10,383,384,385,388],{},"Das ist die Zahl, die diesen Fund zum Bolt-Fund macht. Bolt-Apps waren weniger\nals 4 von 100 gescannten Apps, und sie trugen ",[22,386,387],{},"10 der 33 OpenAI-Schlüssel",",\ndie wir überhaupt gefunden haben. Pro App gerechnet ist das etwa eine\nBolt-App von 110, gegenüber 18 der 18.554 Lovable-Apps, etwa eine von tausend.\nZehn Apps sind eine kleine Stichprobe, und eine Handvoll mehr oder weniger würde\ndieses Verhältnis stark verschieben. Bolt läge trotzdem vor jedem anderen\nBuilder, den wir gemessen haben.",[222,390],{"alt":391,"caption":392,"src":393},"Zwei gleich lange Balken übereinander, jeder mit einem Zeichen davor. Der obere steht für 30.998 gescannte Apps und hat am linken Ende einen dünnen türkisen Abschnitt mit der Zahl 1.123 und dem Bolt-Logo daneben. Der untere steht für 33 OpenAI-Schlüssel und hat einen roten Abschnitt von fast einem Drittel seiner Länge mit der Zahl 10.","Bolt war ein dünner Streifen der gescannten Apps und fast ein Drittel der gefundenen OpenAI-Schlüssel. Die Anzahlen sind klein, deshalb stehen beide da, statt in eine Quote verwandelt zu werden.","\u002Fblog\u002Fis-bolt-safe\u002Fshare-of-openai-keys-1600x620.png",[30,395,397],{"id":396},"warum-leaken-bolt-apps-api-schlüssel","Warum leaken Bolt-Apps API-Schlüssel?",[10,399,400],{},"Von außen sehen wir nicht, wie einer dieser zehn Schlüssel dorthin kam, und\nBolts eigene Anleitung sagt, dass keiner von ihnen dort sein sollte.",[10,402,403],{},"Bolts Dokumentation beschreibt den vorgesehenen Weg. Bitte den Agenten, OpenAI\neinzubinden, und er wird, in den Worten der Dokumentation, \"das Programmieren\nabschließen und dann eine Nachricht anzeigen, die dich bittet, dein Secret\nhinzuzufügen\". Dieses Secret kommt in den Secrets-Bereich, wo nur eine\nServer-Funktion es lesen kann. Eine Server-Funktion läuft auf Bolts Seite, also\nbekommt der Browser des Besuchers den Schlüssel nie. So gebaut bleibt der\nSchlüssel im Lager.",[10,405,406,407,410,411,414,415,418,419,421,422,425],{},"Der Umweg, den wir benennen können, ist die Umgebungsvariable. Bolts eigene\nEinführung in Datenbanken sagt, dass Umgebungsvariablen diese Werte privat\nhalten, und zwei der drei Namen, die sie aufführt, ",[14,408,409],{},"VITE_SUPABASE_URL"," und\n",[14,412,413],{},"VITE_SUPABASE_ANON_KEY",", beginnen mit ",[14,416,417],{},"VITE_",". Dieses Präfix gehört zu Vite,\ndem Build-Tool, und Vites Dokumentation sagt das Gegenteil darüber: Eine\n",[14,420,417],{},"-Variable wird in den Code geschrieben, den der Browser lädt, und sie\nsollte nie einen API-Schlüssel enthalten. Für diese beiden Namen ist das\nharmlos, denn eine Projektadresse und ein veröffentlichbarer Schlüssel sollen\nöffentlich sein. Übertrag dasselbe Muster auf ",[14,423,424],{},"VITE_OPENAI_API_KEY",", und der\nSchlüssel liegt im Schaufenster.",[10,427,428,429,433],{},"Ein Schlüssel, den du in den Chat kopiert hast, während du etwas anderes\nrepariert hast, kann ebenfalls direkt in eine Seite geschrieben werden. So oder\nso ist das Ergebnis dieselbe Datei.\n",[77,430,432],{"href":431},"\u002Fblog\u002Fvite-and-next-public-env-vars","Wie das Präfix funktioniert"," erklärt,\nwelche Werte dahinter gehören und welche nie.",[30,435,437],{"id":436},"_27-von-35-die-bolt-datenbanken-die-wir-fragen-konnten","27 von 35: die Bolt-Datenbanken, die wir fragen konnten",[10,439,440],{},"Von den Bolt-Datenbanken, die uns eine brauchbare Antwort gaben, rückten 27 von\n35 Zeilen an eine Anfrage heraus, die gar keine Anmeldung trug. Das ist eine\nAnzahl, und die Basis ist zu klein, um sie als Prozentwert zu drucken.",[10,442,443],{},"Die Nenner zählen hier mehr als an jeder anderen Stelle dieses Beitrags. 266\nder 1.123 Bolt-Apps nannten ein Supabase-Projekt in dem Code, den sie\nausliefern. Nur 35 davon beantworteten unsere Anfrage gut genug, um sie zu\nbeurteilen. Die anderen 231 ließen sich nicht beurteilen, damit sind sie\nunbekannt, und wir haben sie weder als sauber noch als offen gezählt.",[222,445],{"alt":446,"caption":447,"src":448},"Vier gestapelte Balken, die von links nach rechts auf einer Skala schmaler werden: 1.123 Bolt-Apps, 266, die ein Supabase-Projekt nannten, 35, deren Datenbank eine brauchbare Antwort gab, und 27, die Zeilen ohne Anmeldung lieferten. Der dritte Balken setzt sich als gestrichelter Umriss bis zur Breite des zweiten fort, markiert mit einem Fragezeichen und der Zahl 231. Der letzte Balken ist rot.","Vier Nenner. Die 27 misst gegen die 35, und die 231, die wir nicht beurteilen konnten, sind als unbekannt eingezeichnet, statt weggelassen zu werden.","\u002Fblog\u002Fis-bolt-safe\u002Fwhere-it-lands-1600x620.png",[10,450,451,452,187,455,458],{},"Bei 4 der 27 hieß die Tabelle, die antwortete, so, wie Tabellen über Menschen\nheißen, etwa ",[14,453,454],{},"users",[14,456,457],{},"profiles",". Diese vier und die elf Apps mit einem\nOpenAI- oder Anthropic-Schlüssel ergeben alle 15 D-Noten. Bei den anderen 23 war\nes eine Tabelle, die wir von außen nicht benennen konnten, vielleicht eine\nProduktliste, die immer öffentlich sein sollte, vielleicht etwas ganz anderes.",[30,460,462],{"id":461},"warum-es-an-der-datenbank-hängt","Warum es an der Datenbank hängt",[10,464,465],{},"Weil die Adresse des Lagers im Schaufenster steht, und das muss sie.",[10,467,468],{},"Wenn eine Bolt-App ihre Daten von der Seite aus liest, braucht die Seite die\nAdresse der Datenbank und einen veröffentlichbaren Schlüssel, also reisen beide\nzu jedem Besucher. Dass dieser Schlüssel öffentlich ist, ist richtig; so kommt\ndeine eigene App hinein. Was er zurückbekommt, entscheidet eine Einstellung pro\nTabelle namens Row Level Security. Ist sie an und eine Policy geschrieben, liest\nder öffentliche Schlüssel nur die Zeilen, die die Policy erlaubt. Ist sie aus,\nliest er die Tabelle.",[10,470,471,472,475,476,479,480,484],{},"Supabase schaltet Row Level Security standardmäßig für Tabellen ein, die du im\nTable Editor zusammenklickst. Tabellen, die durch ",[22,473,474],{},"ausgeführtes SQL"," entstehen,\nbekommen sie nicht, und SQL ausführen ist genau die Art, wie ein Builder Tabellen\nfür dich anlegt. Das Einschalten ist außerdem nur Schritt eins, denn die Policy,\ndie ein Assistent schreibt, um einen Berechtigungsfehler loszuwerden, lautet oft\n",[14,477,478],{},"using (true)",". Sie erlaubt allen alles, während das Dashboard die Tabelle als\ngeschützt anzeigt.\n",[77,481,483],{"href":482},"\u002Fblog\u002Fsupabase-rls-on-but-table-still-public","RLS ist an und deine Tabelle ist trotzdem öffentlich","\nerzählt diese Geschichte ganz.",[10,486,487,488,81],{},"Bolts eigener Datenbank-Check sucht genau danach: Seine Dokumentation beschreibt\nihn so, dass er \"eine fehlende Row-Level-Security-Policy (RLS) oder eine zu\noffene Berechtigung\" findet. Die Erklärung in einfacher Sprache für diese\nPlattform ist ",[77,489,491],{"href":490},"\u002Fis-your-bolt-app-safe","ist deine Bolt-App sicher",[30,493,495],{"id":494},"was-bolts-eigenes-sicherheits-audit-prüft","Was Bolts eigenes Sicherheits-Audit prüft",[10,497,498],{},"Es liest dein Projekt von innen, und es läuft, wenn du auf den Knopf drückst.",[10,500,501,502,505],{},"Bolt hat das Audit am 30. Juli 2026 angekündigt. In einem bezahlten Tarif sitzt\nes im Publish-Menü als ",[22,503,504],{},"Run security audit",": Es prüft deinen Code und deine\nDatenbank, behebt die meisten Probleme selbst, markiert den Rest und verbraucht\nkeine deiner Tokens. In jedem Tarif, auch im kostenlosen, haben die\nEinstellungen einer Bolt-Datenbank einen Security-Bereich, der den oben\nbeschriebenen Row-Level-Security-Check ausführt.",[10,507,508,509,512],{},"Unser Scan lief zwei Wochen, nachdem dieser Knopf erschien, also können die\nZahlen oben nicht sagen, wie viel er seitdem verändert hat. Was wir sagen\nkönnen, ist, wie die beiden Blickwinkel zusammenpassen. Das Audit sieht dein\nProjekt von innen, einschließlich Tabellen, die deine Seiten nie erwähnen, und\ndas kann ein Scan von außen nie. Ein Scan von außen sieht, was ein Fremder aus\nder veröffentlichten App bekommt. Wenn ein Audit fertig ist, steht auf dem\nKnopf ",[22,510,511],{},"Security audit up to date",", und die nächste Änderung, die du\nveröffentlichst, hat es nicht gesehen.",[10,514,515],{},"Lass das Audit vor dem Veröffentlichen laufen und sieh danach von außen nach.\nWenn sich beide je uneinig sind, ob eine Tabelle lesbar ist, nimm die Antwort\nvon außen, denn das ist die, die ein Fremder bekommt.",[30,517,519],{"id":518},"so-prüfst-du-deine-eigene-bolt-app","So prüfst du deine eigene Bolt-App",[10,521,522],{},"Fünf Dinge zum Ansehen. Nimm ein privates Fenster, damit nicht deine eigene\nAnmeldung für einen Fremden antwortet.",[41,524,525,531,537,545,551],{},[44,526,527,530],{},[22,528,529],{},"Finde heraus, welche Datenbank du hast."," Neue Bolt-Projekte nutzen\nstandardmäßig eine Bolt-Datenbank. Wenn du beim Anlegen des Projekts Supabase\ngewählt oder später eines verbunden hast, liegen deine Tabellen in einem\nSupabase-Projekt, bei dem du dich anmelden kannst.",[44,532,533,536],{},[22,534,535],{},"Lies das Schloss an jeder Tabelle."," Bei einer Bolt-Datenbank öffnest du\nden Security-Bereich in den Datenbank-Einstellungen und lässt den Check\nlaufen. Bei Supabase öffnest du Authentication → Policies und liest die Liste\ndurch: Eine Tabelle mit deaktivierter Row Level Security ist für jeden\nlesbar, der deine Projektadresse hat, und die steht in deiner App. Eine\nPolicy, die allen alles erlaubt, zählt als deaktiviert.",[44,538,539,544],{},[22,540,541,542,81],{},"Durchsuche dein Projekt nach ",[14,543,417],{}," Jeder Wert hinter diesem Präfix\nliegt im Schaufenster. Eine Projektadresse und ein veröffentlichbarer\nSchlüssel gehören dorthin. Ein Schlüssel, der dir Kosten verursacht, gehört\nin den Secrets-Bereich, gelesen von einer Server-Funktion. Stand je einer\nhinter dem Präfix, rotiere ihn zuerst beim Anbieter, denn der alte Wert\nfunktioniert weiter, bis du das tust.",[44,546,547,550],{},[22,548,549],{},"Sieh dir deinen Storage an."," Ein als öffentlich markierter Bucket listet\njedem, der fragt, jede Datei darin auf, auch die, die deine App nie zeigt.",[44,552,553,556,557,81],{},[22,554,555],{},"Oder lass den Scan das machen."," Er prüft das von außen, dazu fünf weitere\nChecks, dauert etwa 20 Sekunden, braucht kein Konto und zeigt dir eine Note\nund was sie verursacht hat: ",[77,558,559],{"href":295},"App kostenlos scannen",[30,561,563],{"id":562},"damit-es-nach-dem-veröffentlichen-so-bleibt","Damit es nach dem Veröffentlichen so bleibt",[10,565,566,569],{},[22,567,568],{},"Ein Check vom letzten Monat beschreibt die App vom letzten Monat."," Auf Bolt\nist Veröffentlichen ein Knopf, also ist eine Tabelle von heute Morgen oder ein\nSchlüssel, der um Mitternacht eingefügt wurde, live, sobald du drückst.",[10,571,572],{},[22,573,574,578],{},[77,575,577],{"href":576},"\u002Fpricing","Reeve Monitor"," führt die neun Checks für dich erneut aus:",[580,581,582,585,588,595],"ul",{},[44,583,584],{},"alle neun Checks stündlich, für bis zu drei Apps",[44,586,587],{},"ob die App läuft, alle 60 Sekunden",[44,589,590,591,594],{},"eine Nachricht, wenn sich ein Ergebnis ",[22,592,593],{},"ändert",", damit ein neuer Fund nicht wartet, bis du nachsiehst",[44,596,597],{},"ein Monatsbericht über das, was er gesehen hat",[10,599,600],{},"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,602,603,611],{},[22,604,605,606,610],{},"Wenn deine Bolt-App ihre Daten in deinem eigenen Supabase-Projekt hält, bewahrt\n",[77,607,609],{"href":608},"\u002Fsupabase-backups","Reeve Care"," eine Kopie davon auf."," Das gilt für ein\nProjekt, das du von Anfang an verbunden hast, und für eine Bolt-Datenbank, die du\nin Supabase übernommen hast.",[580,613,614,617,620,623,626],{},[44,615,616],{},"jede Nacht eine verschlüsselte Kopie deiner Supabase-Datenbank, dort aufbewahrt, wo dein Projekt nicht hinkommt",[44,618,619],{},"jede Kopie geprüft, bevor sie zählt: Wir zählen die Zeilen jeder Tabelle nach",[44,621,622],{},"eine Wiederherstellung per Klick, wenn du sie brauchst",[44,624,625],{},"auch deine hochgeladenen Dateien, sobald du einen Storage-Zugang verbindest",[44,627,628],{},"alles, was Monitor macht",[10,630,631],{},"Care kostet €49 im Monat zum Listenpreis für eine App, mit denselben sieben\nfreien Tagen.",[10,633,634,635,639],{},"Eine offene Tabelle ist etwas, das ein Fremder lesen kann. Eine Migration, die\nfalsch herum lief, oder ein Agent mit Datenbankzugriff ist etwas, das sie leeren\nkann, und keiner der neun Checks in diesem Beitrag würde die Zeilen\nzurückbringen.\n",[77,636,638],{"href":637},"\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,641,643],{"id":642},"was-du-diese-woche-tun-solltest","Was du diese Woche tun solltest",[645,646,647],"key-takeaways",{},[580,648,649,655,658,661,664],{},[44,650,651,652,654],{},"Durchsuche dein Bolt-Projekt nach ",[14,653,417],{}," und lies jeden Wert dahinter. Ein Schlüssel, der dir Kosten verursacht, gehört in den Secrets-Bereich, gelesen von einer Server-Funktion.",[44,656,657],{},"Stand je ein OpenAI-Schlüssel oder ein anderer bezahlter Schlüssel in dieser Liste, rotiere ihn beim Anbieter, bevor du ihn aus dem Code entfernst.",[44,659,660],{},"Lass den Datenbank-Sicherheitscheck laufen oder öffne Authentication → Policies in Supabase und lies das Schloss an jeder Tabelle. Eine Policy, die allen alles erlaubt, lässt die Tabelle offen.",[44,662,663],{},"Lass Bolts eigenes Audit vor dem Veröffentlichen laufen und prüfe die veröffentlichte App danach von außen.",[44,665,666],{},"Bewahre eine Kopie deiner Datenbank dort auf, wo dein Projekt und dein Agent nicht hinkommen, und prüfe, dass sich die Kopie wiederherstellen lässt.",[10,668,669,670,672,673,677],{},"Fang mit der Suche nach ",[14,671,417],{}," an, denn das ist der eine Fund auf Bolt, der\nfür sich allein Geld kostet. Wenn du noch zwischen Buildern wählst, stellt\n",[77,674,676],{"href":675},"\u002Fblog\u002Fsafest-ai-app-builder","welcher KI-App-Builder am sichersten ist"," alle\nfünf nebeneinander.",{"title":679,"searchDepth":680,"depth":680,"links":681},"",3,[682,684,685,686,687,688,689,690,691,692,693],{"id":32,"depth":683,"text":33},2,{"id":67,"depth":683,"text":68},{"id":245,"depth":683,"text":246},{"id":299,"depth":683,"text":300},{"id":396,"depth":683,"text":397},{"id":436,"depth":683,"text":437},{"id":461,"depth":683,"text":462},{"id":494,"depth":683,"text":495},{"id":518,"depth":683,"text":519},{"id":562,"depth":683,"text":563},{"id":642,"depth":683,"text":643},"Sicherheitsgrundlagen","\u002Fblog\u002Fis-bolt-safe\u002Fcover-1200x630.png","Eine App als Schaufenster mit Bolt-Logo als Schild, ein roter Schlüssel darin, eine verschlossene Datenbank dahinter, ein Besucher draußen.","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.",false,"md",[701,704,707,709,712],{"q":702,"a":703},"Ist Bolt sicher in der Nutzung?","Für die Teile, die Bolt kontrolliert, sagen unsere Zahlen ja. In 1.123 laufenden Apps auf bolt.host fanden wir kein schlechtes Zertifikat, keine Domain kurz vor dem Ablauf, 13 Apps mit veröffentlichten Source Maps und eine, die jede Website ihre API aufrufen ließ. Was über deine eigene App entscheidet, steckt in ihr: ob ein Schlüssel, der dir Kosten verursacht, im Code gelandet ist, den Besucher laden, und ob deine Datenbanktabellen einem Fremden antworten. Beides sind Einstellungen, die du selbst prüfen kannst.",{"q":705,"a":706},"Sind Bolt-Apps standardmäßig sicher?","Die Teile, die Bolt für dich veröffentlicht, waren in unserem Scan sauber. Der Rest hängt davon ab, was im Chat passiert ist. Bolt soll einen bezahlten API-Schlüssel im Secrets-Bereich hinter einer Server-Funktion halten, und es hat einen Datenbank-Check, der nach fehlender Row Level Security sucht. Keins von beidem läuft von allein: Das Projekt-Audit ist ein Knopf im Publish-Menü der bezahlten Tarife, und der Datenbank-Check ist ein Bereich, den du öffnest. Im August 2026 hatten 75 von 1.123 Bolt-Apps etwas Schlüsselförmiges im Frontend, und 27 der 35 Datenbanken, die wir fragen konnten, antworteten einem Fremden.",{"q":397,"a":708},"Von außen sehen wir nicht, wie ein einzelner Schlüssel dorthin kam. Der Weg, den wir benennen können, ist die Umgebungsvariable. Eine Variable, deren Name mit VITE_ beginnt, wird in das JavaScript geschrieben, das jeder Besucher lädt, und Vite, das Build-Tool hinter diesem Präfix, sagt, dass solche Variablen nie einen API-Schlüssel enthalten sollen. Für eine Projektadresse oder einen veröffentlichbaren Schlüssel ist das harmlos. Für einen OpenAI-Schlüssel ist es eine Rechnung. Zehn der 1.123 gescannten Bolt-Apps lieferten einen aus.",{"q":710,"a":711},"Sind meine Supabase-Daten in einer Bolt-App sicher?","Das hängt an einer Einstellung pro Tabelle. Wenn eine Bolt-App von der Seite aus mit Supabase spricht, nutzt sie einen veröffentlichbaren Schlüssel, der öffentlich sein soll, also entscheidet allein Row Level Security, was ein Fremder zurückbekommt. Wir konnten 35 Bolt-Datenbanken ohne Anmeldung nach Zeilen fragen, und 27 gaben sie heraus. Das ist eine Anzahl, und die Basis ist zu klein für einen Prozentwert. Deine eigenen Policies kannst du in wenigen Minuten lesen.",{"q":713,"a":714},"Ist Bolt sicherer als Lovable?","Auf der Plattformseite lagen sie gleichauf: 13 von 1.123 Bolt-Apps und 225 von 18.553 Lovable-Apps veröffentlichten Source Maps, jeweils etwas mehr als eine von hundert, und keine hatte ein Problem mit Zertifikat oder Domain. Der Unterschied waren Schlüssel. Zehn der 1.123 Bolt-Apps trugen einen OpenAI-Schlüssel, gegenüber 18 von 18.554 auf Lovable. Zehn ist eine kleine Zahl, also lies das als Richtung. Der vollständige Vergleich aller fünf Builder steht in einem eigenen Artikel.","\u002Fblog\u002Fis-bolt-safe\u002Fcard-800x500.png",[717,718,719,720,721,722,723,724],"ist bolt sicher","bolt.new sicherheit","ist bolt.new sicher","bolt app sicherheit","sind bolt apps sicher","bolt supabase sicherheit","bolt sicherheitsprobleme","bolt deployment sicherheit",{},true,"\u002Fblog\u002Fis-bolt-safe","2026-10-02",{"title":5,"description":697},"blog\u002Fis-bolt-safe",[732,733,734],"Ist Bolt sicher? Bei allem, was Bolt selbst entscheidet, ja. In 1.123 laufenden Bolt-Apps fanden wir 13, die ihre Source Maps veröffentlichen, eine, die jede Website ihre API aufrufen ließ, und kein einziges schlechtes Zertifikat.","75 dieser Apps lieferten etwas Schlüsselförmiges im Code aus, den ein Besucher lädt. Meist waren es Google-Schlüssel, und die sind in der Regel in Ordnung. Zehn waren OpenAI-Schlüssel, und wer einen findet, kann damit Geld ausgeben.","Von den 35 Bolt-Datenbanken, die wir tatsächlich fragen konnten, gaben 27 Zeilen an eine Anfrage ohne Anmeldung heraus. Beide Probleme sind Einstellungen in deinem eigenen Projekt.","6LSh7TOlGy9__ZJAa9Izyuvld7n-WlNz_Ub65cun4bQ",[737,743,749,755,761,767,773,779,785,791,792,798,804,810,817,823,829,834,840,846,852,858,864,870,876,881,887,893,899,905,911,917,922,928,934,940,946,952,958,963,968,974,980,986,992,998,1004,1010,1015,1021,1027,1033,1038,1043,1049,1053,1059,1065,1070,1075,1081],{"path":738,"title":739,"description":740,"published":741,"category":694,"image":742,"draft":698},"\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":744,"title":745,"description":746,"published":747,"category":694,"image":748,"draft":698},"\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":750,"title":751,"description":752,"published":753,"category":694,"image":754,"draft":698},"\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":756,"title":757,"description":758,"published":759,"category":694,"image":760,"draft":698},"\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":762,"title":763,"description":764,"published":765,"category":694,"image":766,"draft":698},"\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":768,"title":769,"description":770,"published":771,"category":694,"image":772,"draft":698},"\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":774,"title":775,"description":776,"published":777,"category":694,"image":778,"draft":698},"\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":780,"title":781,"description":782,"published":783,"category":694,"image":784,"draft":698},"\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":786,"title":787,"description":788,"published":789,"category":694,"image":790,"draft":698},"\u002Fblog\u002Fis-v0-safe","v0-Sicherheit: alle 1.790 gescannten v0-Apps bekamen ein A","v0-Sicherheit, gemessen an 1.790 laufenden v0-Apps: Jede bekam ein A. Nur 17 nannten eine Datenbank, und genau das misst das A vor allem.","2026-10-03","\u002Fblog\u002Fis-v0-safe\u002Fcard-800x500.png",{"path":727,"title":5,"description":697,"published":728,"category":694,"image":715,"draft":698},{"path":793,"title":794,"description":795,"published":796,"category":694,"image":797,"draft":698},"\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":799,"title":800,"description":801,"published":802,"category":694,"image":803,"draft":698},"\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":805,"title":806,"description":807,"published":808,"category":694,"image":809,"draft":698},"\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":811,"title":812,"description":813,"published":814,"category":815,"image":816,"draft":698},"\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":818,"title":819,"description":820,"published":821,"category":815,"image":822,"draft":698},"\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":824,"title":825,"description":826,"published":827,"category":815,"image":828,"draft":698},"\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":830,"title":831,"description":832,"published":827,"category":694,"image":833,"draft":698},"\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":835,"title":836,"description":837,"published":838,"category":694,"image":839,"draft":698},"\u002Fblog\u002Fopen-api-endpoint-exposed","Ist ein offener API-Endpunkt ein Sicherheitsproblem? Sieh ins JSON","Dein Scan hat einen offenen API-Endpunkt gemeldet. Ob das zählt, hängt davon ab, was zurückkam, und die meisten hier gehörten der Plattform.","2026-09-25","\u002Fblog\u002Fopen-api-endpoint-exposed\u002Fcard-800x500.png",{"path":841,"title":842,"description":843,"published":844,"category":694,"image":845,"draft":698},"\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":847,"title":848,"description":849,"published":850,"category":815,"image":851,"draft":698},"\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":853,"title":854,"description":855,"published":856,"category":694,"image":857,"draft":698},"\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":859,"title":860,"description":861,"published":862,"category":694,"image":863,"draft":698},"\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":865,"title":866,"description":867,"published":868,"category":694,"image":869,"draft":698},"\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":871,"title":872,"description":873,"published":874,"category":694,"image":875,"draft":698},"\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":431,"title":877,"description":878,"published":879,"category":694,"image":880,"draft":698},"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":882,"title":883,"description":884,"published":885,"category":694,"image":886,"draft":698},"\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":888,"title":889,"description":890,"published":891,"category":694,"image":892,"draft":698},"\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":894,"title":895,"description":896,"published":897,"category":694,"image":898,"draft":698},"\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":900,"title":901,"description":902,"published":903,"category":815,"image":904,"draft":698},"\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":906,"title":907,"description":908,"published":909,"category":815,"image":910,"draft":698},"\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":912,"title":913,"description":914,"published":915,"category":815,"image":916,"draft":698},"\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":675,"title":918,"description":919,"published":920,"category":694,"image":921,"draft":698},"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":923,"title":924,"description":925,"published":926,"category":694,"image":927,"draft":698},"\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":929,"title":930,"description":931,"published":932,"category":694,"image":933,"draft":698},"\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":935,"title":936,"description":937,"published":938,"category":694,"image":939,"draft":698},"\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":941,"title":942,"description":943,"published":944,"category":694,"image":945,"draft":698},"\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":947,"title":948,"description":949,"published":950,"category":694,"image":951,"draft":698},"\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":953,"title":954,"description":955,"published":956,"category":694,"image":957,"draft":698},"\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":236,"title":959,"description":960,"published":961,"category":694,"image":962,"draft":698},"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":379,"title":964,"description":965,"published":966,"category":694,"image":967,"draft":698},"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":969,"title":970,"description":971,"published":972,"category":694,"image":973,"draft":698},"\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":975,"title":976,"description":977,"published":978,"category":815,"image":979,"draft":698},"\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":981,"title":982,"description":983,"published":984,"category":694,"image":985,"draft":698},"\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":987,"title":988,"description":989,"published":990,"category":815,"image":991,"draft":698},"\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":993,"title":994,"description":995,"published":996,"category":694,"image":997,"draft":698},"\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":999,"title":1000,"description":1001,"published":1002,"category":694,"image":1003,"draft":698},"\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":1005,"title":1006,"description":1007,"published":1008,"category":694,"image":1009,"draft":698},"\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":268,"title":1011,"description":1012,"published":1013,"category":694,"image":1014,"draft":698},"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":1016,"title":1017,"description":1018,"published":1019,"category":815,"image":1020,"draft":698},"\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":1022,"title":1023,"description":1024,"published":1025,"category":815,"image":1026,"draft":698},"\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":1028,"title":1029,"description":1030,"published":1031,"category":694,"image":1032,"draft":698},"\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":372,"title":1034,"description":1035,"published":1036,"category":694,"image":1037,"draft":698},"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":637,"title":1039,"description":1040,"published":1041,"category":815,"image":1042,"draft":698},"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":1044,"title":1045,"description":1046,"published":1047,"category":694,"image":1048,"draft":698},"\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":258,"title":1050,"description":1051,"published":1047,"category":694,"image":1052,"draft":698},"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":1054,"title":1055,"description":1056,"published":1057,"category":694,"image":1058,"draft":698},"\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":1060,"title":1061,"description":1062,"published":1063,"category":815,"image":1064,"draft":698},"\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":482,"title":1066,"description":1067,"published":1068,"category":694,"image":1069,"draft":698},"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":1071,"title":1072,"description":1073,"published":1068,"category":815,"image":1074,"draft":698},"\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":1076,"title":1077,"description":1078,"published":1079,"category":815,"image":1080,"draft":698},"\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":1082,"title":1083,"description":1084,"published":1079,"category":694,"image":1085,"draft":698},"\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]