[{"data":1,"prerenderedAt":1005},["ShallowReactive",2],{"blog-de-is-lovable-safe":3,"blog-index-de":771},{"id":4,"title":5,"body":6,"category":724,"cover":725,"coverAlt":726,"description":727,"draft":728,"extension":729,"faq":730,"image":749,"keywords":750,"meta":760,"navigation":761,"ogTitle":5,"path":762,"published":763,"seo":764,"stem":765,"tldr":766,"updated":763,"__hash__":770},"blog_de\u002Fblog\u002Fis-lovable-safe.md","Ist Lovable sicher? Was 18.554 echte Lovable-Apps zeigten",{"type":7,"value":8,"toc":707},"minimark",[9,13,21,24,29,32,35,57,60,66,70,83,220,223,228,240,247,251,254,264,275,287,290,301,305,308,314,319,341,348,352,355,362,368,375,387,391,394,401,408,411,415,418,421,427,430,434,437,440,534,542,555,562,566,569,577,581,584,618,631,635,638,641,652,663,671,675,699],[10,11,12],"p",{},"Du hast etwas auf Lovable gebaut, es funktioniert, und du willst echte Menschen\ndarauf loslassen. Irgendwann in dieser Woche hast du \"ist lovable sicher\" in ein\nSuchfeld getippt, und zurück kam entweder eine Seite über eine\nSicherheitsveröffentlichung von 2025 oder ein Anbieter, der dir einen Scan\nverkaufen will. Keine von beiden sagte etwas über die App, die du gleich\nveröffentlichst.",[10,14,15,16,20],{},"Und hier liegt der Fehler in den meisten dieser Antworten: ",[17,18,19],"strong",{},"\"ist Lovable\nsicher\" sind drei Fragen in einem Satz",", und die eine, die darüber entscheidet,\nob Fremde die Daten deiner Nutzer lesen können, misst fast niemand.",[10,22,23],{},"Wir können sie messen. Zwischen dem 12. und 14. August 2026 haben wir dieselben\nneun externen Checks, die jeder auf unserer Startseite kostenlos ausführen kann,\nüber 30.998 laufende Apps laufen lassen, und 18.554 davon waren auf Lovable\nveröffentlicht. Das ist unsere größte Kohorte, drei von fünf Apps, die wir je\ngescannt haben. Das kam für sie zurück, und hier endet unser Blick.",[25,26,28],"h2",{"id":27},"ist-lovable-sicher","Ist Lovable sicher?",[10,30,31],{},"Als Plattform ja, und mit größerem Abstand als erwartet. Was Lovable selbst\nausliefert, war das sauberste der fünf Builder, die wir gemessen haben. Alles,\nwas über eine Note entschied, saß in der App, die ihr Inhaber gebaut hat.",[10,33,34],{},"Stell dir einen Laden vor, dessen Lager auf der anderen Straßenseite liegt.\nLovable baut den Laden: die Schaufenster, den Tresen, das Schild. Supabase\ngehört das Lager, und das hat sein eigenes Schloss an seiner eigenen Tür. Was\nder Laden einem Passanten aushändigt, ist die eine Frage. Was das Lager jedem\naushändigt, der hingeht und fragt, ist eine völlig andere, und kein noch so\naufgeräumter Laden ändert daran etwas.",[36,37,38,45,51],"ol",{},[39,40,41,44],"li",{},[17,42,43],{},"Die Plattform."," Veröffentlicht Lovable deine App ordentlich: gültiges\nZertifikat, Domain, die nicht abläuft, nichts, was aus dem Build sickert.\nDas ist der Laden.",[39,46,47,50],{},[17,48,49],{},"Der Agent."," Taugt der Code, den Lovables KI schreibt. Kein Scan von außen\nsieht die Verkabelung, und dieser Beitrag sagt das lieber, als zu raten.",[39,52,53,56],{},[17,54,55],{},"Die App, die du veröffentlicht hast."," Was ein Fremder vom Bürgersteig aus\nerreicht: ein Schlüssel im Code, den ein Browser herunterlädt, ein\nStorage-Bucket, der seine Dateien auflistet, eine Datenbanktabelle, die jedem\nantwortet, der fragt.",[10,58,59],{},"Unsere Checks lesen die dritte Frage und zwei Teile der ersten. Zur Plattform:\nDas Zertifikat war auf allen 18.486 Apps gültig, bei denen wir eines lesen\nkonnten, und keine einzige Domain von 18.554 lief bald ab. Zum Agenten haben wir\nnichts zu messen. Zur App haben wir 18.554 Antworten.",[61,62],"diagram",{"alt":63,"caption":64,"src":65},"Drei Felder nebeneinander. Im ersten das Lovable-Logo mit einem Vorhängeschloss und einem Zertifikat. Im zweiten ein Code-Zeichen mit einem Funkeln darüber. Im dritten eine Browserseite mit einer separaten Datenbank außerhalb, drei Besucher, die nach beiden greifen, und eine Lupe nur über diesem Feld, darunter die Zahl 18.554.","Drei Fragen in einer Suche. Ein Scan von außen liest das dritte Feld und einen Teil des ersten, und im mittleren gar nichts.","\u002Fblog\u002Fis-lovable-safe\u002Fthree-questions-1600x700.png",[25,67,69],{"id":68},"was-wir-in-18554-lovable-apps-gefunden-haben","Was wir in 18.554 Lovable-Apps gefunden haben",[10,71,72,73,76,77,82],{},"Neun Checks, von außen, ohne Anmeldung und ohne Zugriff auf irgendein Konto. Wir\nhaben nie eine Zeile gelesen: Wo eine Datenbank antwortete, haben wir gefragt,\nwie viele Zeilen sie herausgeben würde, und dort aufgehört. Keine App wird hier\noder anderswo von uns genannt. Jeder Anteil unten bezieht sich auf die Apps, bei\ndenen der Check ",[17,74,75],{},"geantwortet"," hat, denn ein Check, der nicht durchlief, ist\nunbekannt und nicht bestanden. Deshalb bewegen sich die Nenner. Methode und\nDaten stehen ",[78,79,81],"a",{"href":80},"\u002Fresearch\u002Fvibe-coded-app-security-2026","im Bericht",".",[84,85,86,103],"table",{},[87,88,89],"thead",{},[90,91,92,96,100],"tr",{},[93,94,95],"th",{},"Was wir geprüft haben",[93,97,99],{"align":98},"right","Lovable-Apps",[93,101,102],{},"Wer es entscheidet",[104,105,106,118,129,139,149,160,170,180,199,210],"tbody",{},[90,107,108,112,115],{},[109,110,111],"td",{},"Browser-Sicherheitsheader fehlen",[109,113,114],{"align":98},"18.539 von 18.554 (99 %)",[109,116,117],{},"Lovables Hosting",[90,119,120,123,126],{},[109,121,122],{},"Eine Datenbanktabelle ohne Anmeldung lesbar",[109,124,125],{"align":98},"2.017 von 3.553 (57 %)",[109,127,128],{},"Deine App",[90,130,131,134,137],{},[109,132,133],{},"Etwas Schlüsselförmiges im Code, den ein Besucher lädt",[109,135,136],{"align":98},"822 von 18.554 (4 %)",[109,138,128],{},[90,140,141,144,147],{},[109,142,143],{},"Ein Storage-Bucket, der seine Dateien auflistet",[109,145,146],{"align":98},"768 von 16.565 (5 %)",[109,148,128],{},[90,150,151,154,157],{},[109,152,153],{},"Originalquellcode veröffentlicht (Source Maps)",[109,155,156],{"align":98},"225 von 18.553 (1 %)",[109,158,159],{},"Eine Build-Einstellung",[90,161,162,165,168],{},[109,163,164],{},"Eine API-Route, die einem Fremden Daten aushändigt",[109,166,167],{"align":98},"8 von 18.518",[109,169,128],{},[90,171,172,175,178],{},[109,173,174],{},"Jede Website darf deine API aufrufen",[109,176,177],{"align":98},"0 von 18.518",[109,179,128],{},[90,181,182,194,197],{},[109,183,184,185,189,190,193],{},"Eine private Datei wie ",[186,187,188],"code",{},".env"," oder ",[186,191,192],{},".git\u002Fconfig"," unter offener URL",[109,195,196],{"align":98},"0 von 18.442",[109,198,128],{},[90,200,201,204,207],{},[109,202,203],{},"Zertifikat abgelaufen oder nicht vertrauenswürdig",[109,205,206],{"align":98},"0 von 18.486",[109,208,209],{},"Lovable",[90,211,212,215,218],{},[109,213,214],{},"Domain läuft bald ab",[109,216,217],{"align":98},"0 von 18.554",[109,219,209],{},[10,221,222],{},"Die Noten: 15.963 A, 370 B, 1.814 C, 402 D und 5 F. Neun Apps hatten überhaupt\nkeinen Fund.",[61,224],{"alt":225,"caption":226,"src":227},"Sechs waagerechte Balken auf einer Skala, jeder mit einem kleinen Zeichen davor und einer Zahl dahinter: 18.539 für Header, 2.017 für offene Tabellen, 822 für Schlüssel, 768 für Storage-Buckets, 225 für Source Maps und 8 für offene Routen. Der oberste Balken ist blass grau, die übrigen türkis, und die 8 ist eine Haarlinie mit einem Ring darum.","Anzahl Apps, keine Quoten: eine Skala, sechs Funde. Der graue Balken wird vom Hosting entschieden. Jeder türkise folgte aus etwas in der App. Die Zeile der offenen Tabellen misst gegen einen kleineren Nenner, den das nächste Bild auseinandernimmt.","\u002Fblog\u002Fis-lovable-safe\u002Fwhat-we-found-1600x680.png",[10,229,230,231,234,235,239],{},"Diese erste Zeile ist der Grund, warum \"99 % der Lovable-Apps haben ein\nSicherheitsproblem\" ein Satz ist, den du irgendwo lesen und ignorieren solltest.\nBrowser-Sicherheitsheader schickt das, was deine Seite ausliefert, und auf\n",[186,232,233],{},"deineapp.lovable.app"," ist das Lovable, weshalb jede App auf diesem Host\ndieselbe Antwort bekommt. Sie sind ",[78,236,238],{"href":237},"\u002Fblog\u002Fmissing-security-headers","es wert",",\nund sie sind nicht das, woraus ein D gemacht ist.",[10,241,242,243,246],{},"Lässt man diese Zeile weg, hatten ",[17,244,245],{},"15.453 der 18.554 Apps sonst gar nichts",".\nDie verbleibenden 3.092 sind der Rest dieses Beitrags.",[25,248,250],{"id":249},"was-lovable-richtig-macht-und-das-ist-das-meiste","Was Lovable richtig macht, und das ist das meiste",[10,252,253],{},"Drei der Zahlen oben sind die besten, die wir bei irgendeinem Builder notiert\nhaben, und alle drei entscheidet die Plattform und nicht du.",[10,255,256,259,260,82],{},[17,257,258],{},"Source Maps."," 225 von 18.553 Lovable-Apps veröffentlichen die Originaldateien\nhinter der App, Kommentare inklusive. Das ist etwa 1 von 80. Bei Base44 schlägt\nderselbe Check bei 59 % der Apps an, bei Replit bei 6 %. Lovables Produktions-\nBuild macht es standardmäßig richtig, also ist\n",[78,261,263],{"href":262},"\u002Fblog\u002Fsource-maps-exposed-in-production","das hier meist nicht dein Problem",[10,265,266,269,270,274],{},[17,267,268],{},"Cross-Origin-Header."," Null Apps von 18.518 sagten irgendeiner Website der\nWelt, sie dürfe ihre API aufrufen, und null erlaubten das mit den\nAnmelde-Cookies des Besuchers. Das ist der Fund, der\n",[78,271,273],{"href":272},"\u002Fblog\u002Fcors-wildcard-security-risk","am ehesten eine fremde Seite als deinen Nutzer handeln lässt",",\nund auf Lovable tauchte er kein einziges Mal auf.",[10,276,277,280,281,283,284,286],{},[17,278,279],{},"Verirrte private Dateien."," Null Apps von 18.442 lieferten eine ",[186,282,188],{}," oder\neine ",[186,285,192],{}," unter einer schlichten URL aus. Eine Lovable-App hat keinen\neigenen Server, den man falsch konfigurieren könnte, also liegt hinten auch\nkeine Datei herum.",[10,288,289],{},"Das ist kein Trostpflaster. Das ist der Teil der Arbeit, über den du nicht\nnachdenken musstest und über den bei den meisten anderen Buildern jemand\nnachdenkt.",[291,292,294],"callout",{"type":293},"note",[10,295,296,297,82],{},"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",[78,298,300],{"href":299},"\u002Fsecurity-scanner","App scannen",[25,302,304],{"id":303},"die-eine-zahl-auf-die-es-ankommt-2017-von-3553","Die eine Zahl, auf die es ankommt: 2.017 von 3.553",[10,306,307],{},"Von den Lovable-Apps, deren Supabase-Datenbank wir tatsächlich fragen konnten,\ngaben 57 % Zeilen an eine Anfrage ganz ohne Anmeldung heraus.",[10,309,310,311,82],{},"Die Nenner sind es wert, durchgegangen zu werden, denn das ist die Zahl, die\nalle zitieren und fast niemand einordnet. Von 18.554 Lovable-Apps nannten 6.532\nein Supabase-Projekt im ausgelieferten Code. Davon beantworteten 3.553 unsere\nAnfrage gut genug, dass wir urteilen konnten, die übrigen 2.979 nicht, also sind\nsie unbekannt und nicht sauber. Von den 3.553 gaben ",[17,312,313],{},"2.017 Zeilen an einen\nFremden heraus",[61,315],{"alt":316,"caption":317,"src":318},"Ein Trichter aus vier gestapelten Balken, die nach unten schmaler werden: 18.554 Lovable-Apps, 6.532 mit einem genannten Supabase-Projekt, 3.553 deren Datenbank eine brauchbare Antwort gab, und 2.017 die ohne Anmeldung Zeilen zurückgaben. Der letzte Balken ist rot, und der dritte trägt ein Fragezeichen für die 2.979, über die nicht geurteilt werden konnte.","Vier Nenner, nicht einer. Der Balken, der als Schlagzeile zitiert wird, ist der letzte, und er misst gegen den dritten.","\u002Fblog\u002Fis-lovable-safe\u002Fwhere-it-lands-1600x620.png",[10,320,321,322,325,326,329,330,333,334,333,337,340],{},"In ",[17,323,324],{},"373"," dieser Apps hieß die antwortende Tabelle nach Menschen: ",[186,327,328],{},"users",",\n",[186,331,332],{},"profiles",", ",[186,335,336],{},"orders",[186,338,339],{},"messages",". Das sind 373 Apps, nicht 373 Tabellen. In den\nanderen 1.644 war es etwas, das wir von außen nicht benennen konnten, vielleicht\nein Produktkatalog, der immer öffentlich sein sollte, vielleicht etwas ganz\nanderes.",[10,342,343,344,347],{},"Gemessen an allen gescannten Lovable-Apps statt an der Teilmenge, über die wir\nurteilen konnten, sind 2.017 von 18.554 rund ",[17,345,346],{},"11 von je 100",". Merk dir die\nZahl für zwei Abschnitte.",[25,349,351],{"id":350},"warum-es-an-der-datenbank-hängt-und-nicht-an-lovable","Warum es an der Datenbank hängt und nicht an Lovable",[10,353,354],{},"Wegen einer Design-Entscheidung, die richtig und bewusst getroffen ist und der\nPerson, die sie betrifft, fast nie erklärt wird.",[10,356,357,358,361],{},"Eine Lovable-App hat keinen eigenen Server. Die Seite im Browser des Besuchers\nspricht direkt mit Supabase, weshalb sich das Ganze an einem Nachmittag bauen\nlässt und weshalb so wenige dieser Apps eine offene API-Route haben: Es gibt\nkeine API von dir, die offen stehen könnte. Damit das funktioniert, müssen die\nAdresse deiner Datenbank und ein Schlüssel dazu in der App stehen, wo jeder sie\nlesen kann. Dieser Schlüssel ist der ",[17,359,360],{},"veröffentlichbare"," Schlüssel, und dass\ner öffentlich ist, ist richtig. Er gehört genau dorthin.",[10,363,364,365,367],{},"Damit steht zwischen einem Fremden und deiner ",[186,366,328],{},"-Tabelle nur eine\nSupabase-Einstellung pro Tabelle namens Row Level Security. Ist sie an und eine\nPolicy geschrieben, liest der öffentliche Schlüssel nur die Zeilen, die die\nPolicy erlaubt. Ist sie aus, liest er die Tabelle.",[10,369,370,371,374],{},"Jetzt der Teil, der die meisten Lovable-Projekte entscheidet. Supabase schaltet\nRow Level Security standardmäßig für Tabellen ein, die du im Table Editor\nzusammenklickst. Tabellen, die per ",[17,372,373],{},"SQL"," entstehen, bekommen sie nicht, und\nSQL ausführen ist die Art, wie ein Builder Tabellen für dich anlegt. Die\nübliche Form eines Lovable-Projekts ist also: ein paar Tabellen von Hand, die\ngeschützt sind, daneben die generierten, die es vielleicht nicht sind. Beide\nsehen identisch aus. Keine beschwert sich. Die App funktioniert so oder so\neinwandfrei, und genau das ist das Problem: Von vorne sagt dir nichts, welche\nSorte du hast.",[10,376,377,378,382,383,82],{},"Die längere Fassung davon, mit dem SQL,\n",[78,379,381],{"href":380},"\u002Fblog\u002Fenable-rls-on-every-supabase-table","steht hier",", und die Anleitung in\neinfacher Sprache für diese Plattform ist\n",[78,384,386],{"href":385},"\u002Fis-your-lovable-app-safe","ist deine Lovable-App sicher",[25,388,390],{"id":389},"die-policy-die-den-fehler-beseitigt-und-die-tabelle-offen-lässt","Die Policy, die den Fehler beseitigt und die Tabelle offen lässt",[10,392,393],{},"Row Level Security einzuschalten ist Schritt eins von zwei, und in Schritt zwei\ntut ein KI-Assistent bereitwillig das Falsche.",[10,395,396,397,400],{},"Mit der Einstellung an und ohne geschriebene Policy hört deine eigene App auf zu\nfunktionieren. Du bekommst einen Fehler, fügst ihn in den Chat ein, und es kommt\netwas zurück, das den Fehler verschwinden lässt. Sehr oft ist das eine Policy,\ndie allen alles erlaubt, geschrieben als ",[186,398,399],{},"using (true)",". Sie ist eine gültige\nPolicy. Sie erfüllt die Anforderung, dass eine Policy existiert. Sie erlaubt\njede Zeile jeder Anfrage.",[10,402,403,404,82],{},"Das Dashboard meldet die Tabelle jetzt als geschützt, der Fehler ist weg, deine\nApp läuft, und die Tabelle ist genauso lesbar wie vorher. Dazu haben wir einen\nganzen Artikel, weil es das überzeugendste Versagen im ganzen Stack ist:\n",[78,405,407],{"href":406},"\u002Fblog\u002Fsupabase-rls-on-but-table-still-public","RLS ist an, und deine Tabelle ist trotzdem öffentlich",[10,409,410],{},"Wenn du je einen Row-Level-Security-Fehler in ein Chatfenster kopiert und den\nersten Fix übernommen hast, der durchlief, lies diese Policy noch heute.",[25,412,414],{"id":413},"cve-2025-48757-und-warum-das-nicht-mehr-deine-frage-ist","CVE-2025-48757, und warum das nicht mehr deine Frage ist",[10,416,417],{},"Sie ist echt, sie war ernst, und auf Lovables Seite ist sie seit über einem Jahr\nerledigt. Sie ist auch nicht das, wonach du suchen solltest.",[10,419,420],{},"Im Mai 2025 veröffentlichte der Sicherheitsforscher Matt Palmer CVE-2025-48757\nzu Lovable-Apps, deren Supabase-Tabellen keine oder eine zu großzügige Row Level\nSecurity hatten. Er scannte 1.645 Lovable-Apps und fand 170 mit offenen\nDatenbanken. Lovables Antwort war ein Sicherheitscheck, der vor dem\nVeröffentlichen läuft und vor ungeschützten Tabellen warnt.",[10,422,423,424],{},"Und hier die ehrliche Lesart, und sie ist der Grund, warum die CVE der falsche\nRahmen ist. Diese Veröffentlichung fand rund 10 offene Apps je 100. Sechzehn\nMonate später, in einer elfmal so großen Kohorte, fanden wir rund 11 je 100. Die\nNenner sind nicht identisch und keine der beiden Stichproben ist das ganze\nInternet, nimm die zwei also als dieselbe Größenordnung und nicht als genauen\nVergleich. Die Richtung ist klar genug: ",[17,425,426],{},"Die Quote ist nicht gefallen.",[10,428,429],{},"Das ist kein gescheiterter Fix. Es ist ein Zeichen dafür, dass es nie wirklich\neine Schwachstelle in einem Produkt war. Es ist eine Einstellung an deinen\neigenen Tabellen, in deinem eigenen Supabase-Projekt, die niemand sonst für dich\nanschalten kann. Ein Patch kommt da nicht hin, und genau deshalb kommt ein Check\nhin, den du selbst ausführst.",[25,431,433],{"id":432},"woraus-die-822-schlüssel-wirklich-bestanden","Woraus die 822 Schlüssel wirklich bestanden",[10,435,436],{},"Fast alle waren in Ordnung, und ein Scanner, der dir etwas anderes sagt, würde\ndir beibringen, ihn zu ignorieren.",[10,438,439],{},"822 der 18.554 Lovable-Apps hatten etwas Schlüsselförmiges im Code, den ein\nBesucher herunterlädt. Als Liste von Mustern gelesen sind das 4 % der Apps, die\n\"Geheimnisse leaken\". Gelesen als das, was jeder Schlüssel tatsächlich kann,\nsieht es so aus:",[84,441,442,455],{},[87,443,444],{},[90,445,446,449,452],{},[93,447,448],{},"Was im Bundle stand",[93,450,451],{"align":98},"Apps",[93,453,454],{},"Was es bedeutet",[104,456,457,468,479,490,500,510,523],{},[90,458,459,462,465],{},[109,460,461],{},"Ein Google-API-Schlüssel",[109,463,464],{"align":98},"727",[109,466,467],{},"Meist korrekt, sobald auf deine Domain beschränkt",[90,469,470,473,476],{},[109,471,472],{},"Ein nicht zuordenbares Secret",[109,474,475],{"align":98},"82",[109,477,478],{},"Wir konnten nicht sagen, zu welchem Anbieter es gehört",[90,480,481,484,487],{},[109,482,483],{},"Ein OpenAI-Schlüssel",[109,485,486],{"align":98},"18",[109,488,489],{},"Belastet dein Konto, direkt",[90,491,492,495,498],{},[109,493,494],{},"Ein AWS-Zugriffsschlüssel",[109,496,497],{"align":98},"7",[109,499,489],{},[90,501,502,505,508],{},[109,503,504],{},"Ein Anthropic-Schlüssel",[109,506,507],{"align":98},"3",[109,509,489],{},[90,511,512,518,520],{},[109,513,514,515],{},"Ein Supabase-",[186,516,517],{},"service_role",[109,519,507],{"align":98},[109,521,522],{},"Liest und schreibt jede Zeile in jeder Tabelle, ignoriert jede Regel",[90,524,525,528,531],{},[109,526,527],{},"Ein echtes Stripe-Secret",[109,529,530],{"align":98},"2",[109,532,533],{},"Dein Zahlungskonto",[10,535,536,537,541],{},"Die 727 Google-Schlüssel sind der Grund, warum wir klassifizieren statt nur zu\nvergleichen. Ein Google-Maps-Schlüssel im Browser ist dort, wo er hingehört, und\nder Fix ist,\n",[78,538,540],{"href":539},"\u002Fblog\u002Fgoogle-api-key-exposed-in-frontend","ihn auf deine eigene Domain zu beschränken",",\nstatt in Panik zu verfallen.",[10,543,544,545,547,548,550,551,82],{},"Auf die unteren vier Zeilen kommt es an, und sie sind selten: 30 Apps von\n18.554. Sie sind auch die Funde, die von allein Geld kosten, und sie tauchen\nmeist als Rechnung auf, bevor sie jemand bemerkt hat. Zwei Details fürs\nProtokoll. Alle drei ",[186,546,517],{},"-Schlüssel im gesamten Scan über 30.998 Apps\nsteckten in Lovable-Apps, und ebenso zwei der drei echten Stripe-Secrets. Ein\n",[186,549,517],{},"-Schlüssel im Browser macht jede Row-Level-Security-Policy in\ndeinem Projekt in einer Zeile gegenstandslos, weshalb er der eine Fund ist, den\nwir auf Sicht als kritisch werten, und der,\n",[78,552,554],{"href":553},"\u002Fblog\u002Frotate-supabase-service-role-key","den man am selben Tag rotiert",[10,556,557,558,82],{},"Die beiden Sorten auseinanderzuhalten dauert etwa eine Minute, und\n",[78,559,561],{"href":560},"\u002Fblog\u002Fwhich-api-keys-are-safe-in-your-frontend","wir haben die Anleitung geschrieben",[25,563,565],{"id":564},"die-768-storage-buckets-die-niemand-öffnen-wollte","Die 768 Storage-Buckets, die niemand öffnen wollte",[10,567,568],{},"Ein als öffentlich markierter Supabase-Bucket liefert nicht nur die Dateien aus,\ndie deine App verlinkt. Er listet auch jede Datei darin für jeden auf, der\nfragt.",[10,570,571,572,576],{},"768 der 16.565 prüfbaren Lovable-Apps hatten mindestens einen Bucket, der seinen\nInhalt auflistete. Der Grund ist derselbe wie bei den lesbaren Tabellen: Einen\nBucket öffentlich zu machen ist der Weg, ein Bild sichtbar zu bekommen, es\nfunktioniert sofort, und danach sagt dir nichts, dass die Auflistung mit dabei\nwar. Hochgeladene Rechnungen, Ausweisfotos und Profilbilder landen alle am\nselben Ort.\n",[78,573,575],{"href":574},"\u002Fblog\u002Fsupabase-storage-bucket-public","Was ein öffentlicher Bucket wirklich preisgibt","\nerklärt den Fix, und der heißt signierte URLs und nicht ein privater Bucket, aus\ndem du dann selbst nicht mehr lesen kannst.",[25,578,580],{"id":579},"der-fünf-minuten-check-für-deine-eigene-lovable-app","Der Fünf-Minuten-Check für deine eigene Lovable-App",[10,582,583],{},"Jeder Punkt ist eine Seite, die du öffnest. Nimm ein privates Fenster, damit\nnicht deine eigene Anmeldung für einen Fremden antwortet.",[36,585,586,592,598,604,610],{},[39,587,588,591],{},[17,589,590],{},"Supabase → Authentication → Policies."," Lies die Liste durch. Jede Tabelle,\nbei der Row Level Security deaktiviert ist, ist für jeden lesbar, der deine\nProjektadresse hat, und die steht in deiner App.",[39,593,594,597],{},[17,595,596],{},"Lies die Policies der Tabellen, bei denen sie an ist."," Erlaubt eine davon\nallen alles, ist die Tabelle offen, und das Dashboard nennt sie trotzdem\ngeschützt.",[39,599,600,603],{},[17,601,602],{},"Supabase → Storage."," Jeder als öffentlich markierte Bucket listet seine\nDateien für jeden auf. Sieh nach, was drin ist, bevor du entscheidest, dass\ndas in Ordnung ist.",[39,605,606,609],{},[17,607,608],{},"Supabase → Settings → API."," Prüfe, dass der Schlüssel in deiner App der\nveröffentlichbare ist. Wurde je ein geheimer Schlüssel ins Projekt eingefügt,\nrotiere ihn dort, bevor du ihn aus dem Code löschst, denn der alte Wert\nfunktioniert bis dahin weiter.",[39,611,612,615,616,82],{},[17,613,614],{},"Oder lass den Scan das machen."," Er führt diese vier von außen aus und fünf\nweitere, dauert etwa 20 Sekunden, braucht kein Konto und zeigt dir eine Note\nund was sie verursacht hat: ",[78,617,300],{"href":299},[10,619,620,621,625,626,630],{},"Wenn du die ganze Fläche lieber als Liste durchgehst, deckt die\n",[78,622,624],{"href":623},"\u002Fchecklist","10-Minuten-Sicherheitscheckliste"," ab, was bei jeder frisch\ngestarteten App bestätigt werden sollte, und\n",[78,627,629],{"href":628},"\u002Fblog\u002Fcan-anyone-read-your-supabase-database","kann jeder deine Supabase-Datenbank lesen","\nist der Test, den du machen solltest, wenn du nur eine Sache machst.",[25,632,634],{"id":633},"deine-app-ändert-sich-bei-jeder-veröffentlichung","Deine App ändert sich bei jeder Veröffentlichung",[10,636,637],{},"Ein Scan von letztem Monat beschreibt die App von letztem Monat, und auf Lovable\nist das ein kürzerer Monat als anderswo.",[10,639,640],{},"Veröffentlichen ist ein Klick, also ist eine Änderung live, sobald du sie\nannimmst. Zwischen dir und dem Internet steht kein Deploy-Schritt, der eine\nTabelle abfängt, die heute Morgen ohne Row Level Security dazukam, oder einen\nSchlüssel, der um Mitternacht in den Chat kopiert wurde, um an einem\nscheiternden Build vorbeizukommen. Jede der 2.017 offenen Datenbanken, die wir\ngefunden haben, gehörte jemandem, dessen App einwandfrei lief.",[10,642,643,647,648,651],{},[78,644,646],{"href":645},"\u002Fpricing","Reeve Monitor"," ist die Fassung dieses Beitrags, die sich selbst\nausführt. Er wiederholt alle neun Checks stündlich für bis zu drei Apps, schaut\njede 60 Sekunden nach, ob die App läuft, meldet sich, wenn sich ein Ergebnis\n",[17,649,650],{},"ändert",", statt darauf zu warten, dass du nachsiehst, und schickt einen\nMonatsbericht. Er kostet €12 im Monat zum Listenpreis, mit sieben freien Tagen,\nbevor abgerechnet wird; die Preisseite liegt manchmal unter der Zahl hier und\nnie darüber.",[10,653,654,657,658,662],{},[17,655,656],{},"Wenn deine Lovable-App Supabase nutzt, und 6.532 der 18.554 gescannten tun\ndas, ist die andere Hälfte des Problems die Kopie."," Eine offene Tabelle ist\netwas, das ein Fremder lesen kann. Ein Agent mit Datenbankzugriff oder eine\nMigration, die falsch herum lief, ist etwas, das sie löschen kann, und Supabases\neigenes tägliches Backup im kostenlosen Tarif ist nichts, aus dem du selbst\nwiederherstellen kannst. ",[78,659,661],{"href":660},"\u002Fsupabase-backups","Reeve Care"," zieht jede Nacht eine\nverschlüsselte Kopie deiner Supabase-Datenbank, bewahrt sie dort auf, wo dein\nProjekt nicht hinkommt, prüft, dass sich jede Kopie wirklich wiederherstellen\nlässt, und gibt dir im Ernstfall eine Wiederherstellung per Klick. Alles aus\nMonitor ist enthalten. Care kostet €49 im Monat zum Listenpreis für eine App,\nmit denselben sieben freien Tagen.",[10,664,665,666,670],{},"Wie dieses zweite Versagen aussieht, erzählt von jemandem, dem es passiert ist,\nsteht in\n",[78,667,669],{"href":668},"\u002Fblog\u002Fai-agent-deleted-my-database","dem Tag, an dem ein KI-Agent eine Produktionsdatenbank gelöscht hat",".\nKeiner der neun Checks in diesem Artikel hätte dort geholfen. Eine Kopie schon.",[25,672,674],{"id":673},"was-du-diese-woche-tun-solltest","Was du diese Woche tun solltest",[676,677,678],"key-takeaways",{},[679,680,681,684,687,690,696],"ul",{},[39,682,683],{},"Öffne Supabase → Authentication → Policies und lies die Liste. Jede Tabelle mit deaktivierter Row Level Security ist für jeden lesbar, der die Adresse deiner App hat.",[39,685,686],{},"Lies die Policies der Tabellen, bei denen sie an ist. Eine, die allen alles erlaubt, lässt die Tabelle offen, während das Dashboard sie als geschützt meldet.",[39,688,689],{},"Prüfe Storage auf öffentliche Buckets. Ein öffentlicher Bucket listet jede Datei darin auf, nicht nur die, die deine App verlinkt.",[39,691,692,693,695],{},"Bestätige, dass der Schlüssel in deiner App der veröffentlichbare ist. Ein ",[186,694,517],{},"-Schlüssel im Browser macht jede geschriebene Policy gegenstandslos, und das ist eine Aufgabe für denselben Tag.",[39,697,698],{},"Halte eine Kopie deiner Datenbank dort, wo dein Projekt und dein Agent nicht hinkommen, und prüfe, dass sich die Kopie wiederherstellen lässt.",[10,700,701,702,706],{},"Lovable hat seine Hälfte gut gemacht. Die 2.017 sind die Hälfte, die dir gehört,\nund sie ist eine Einstellung und keine Neufassung. Wenn du stattdessen den\nVergleich über die Builder willst:\n",[78,703,705],{"href":704},"\u002Fblog\u002Fsafest-ai-app-builder","welcher KI-App-Builder ist am sichersten"," hat die\nTabelle für alle fünf.",{"title":708,"searchDepth":709,"depth":709,"links":710},"",3,[711,713,714,715,716,717,718,719,720,721,722,723],{"id":27,"depth":712,"text":28},2,{"id":68,"depth":712,"text":69},{"id":249,"depth":712,"text":250},{"id":303,"depth":712,"text":304},{"id":350,"depth":712,"text":351},{"id":389,"depth":712,"text":390},{"id":413,"depth":712,"text":414},{"id":432,"depth":712,"text":433},{"id":564,"depth":712,"text":565},{"id":579,"depth":712,"text":580},{"id":633,"depth":712,"text":634},{"id":673,"depth":712,"text":674},"Sicherheitsgrundlagen","\u002Fblog\u002Fis-lovable-safe\u002Fcover-1200x630.png","Das Lovable-Logo auf weißer Kachel, ein Pfeil zur veröffentlichten App, ein Pfeil weiter zu drei Besuchern und eine Datenbank unter der App.","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.",false,"md",[731,734,737,740,743,746],{"q":732,"a":733},"Ist Lovable sicher genug für ein echtes Produkt?","Die Plattformseite war die sauberste der fünf Builder, die wir gescannt haben. Jedes lesbare Zertifikat war gültig, keine Domain lief bald ab, keine App erlaubte irgendeiner Website den Zugriff auf ihre API, und 225 von 18.553 veröffentlichten ihren Quellcode. Ob dein Produkt dort sicher läuft, entscheidet die Datenbank dahinter: 2.017 der 3.553 Lovable-Apps, deren Supabase wir fragen konnten, gaben Zeilen an eine Anfrage ohne Anmeldung heraus. Das ist eine Einstellung an deinen Tabellen, sie gehört dir, und du prüfst sie in etwa fünf Minuten.",{"q":735,"a":736},"Können Fremde meinen Lovable-Quellcode sehen?","Die Browser-Hälfte immer, denn ein Browser kann keine Seite zeichnen, die er nicht bekommen hat. Was normalerweise unlesbar bleibt, sind deine Originaldateien mit Kommentaren und Variablennamen, und genau die gibt eine veröffentlichte Source Map preis. 225 der 18.553 geprüften Lovable-Apps taten das, etwa 1 von 80, die niedrigste Quote aller gemessenen Builder. Deine Datenbankabfragen sind eine andere Sache: Eine Lovable-App spricht direkt aus dem Browser mit Supabase, also sind die Tabellennamen und Spalten für jeden sichtbar, der den Netzwerk-Tab öffnet.",{"q":738,"a":739},"Sind meine Supabase-Daten in einer Lovable-App sicher?","Das hängt an einer einzigen Einstellung pro Tabelle und an sonst nichts. Eine Lovable-App erreicht Supabase direkt aus dem Browser des Besuchers, mit einem veröffentlichbaren Schlüssel, der öffentlich sein soll. Zwischen einem Fremden und einer Tabelle steht damit nur Row Level Security. Ist sie aus, liest dieser öffentliche Schlüssel die ganze Tabelle. Wir haben das an 3.553 Lovable-Apps gemessen, und 2.017 beantworteten eine anonyme Anfrage mit Zeilen. In 373 davon hieß die offene Tabelle nach Menschen: users, profiles, orders, messages.",{"q":741,"a":742},"Was war CVE-2025-48757 und betrifft es mich noch?","Das ist die Veröffentlichung des Sicherheitsforschers Matt Palmer aus dem Jahr 2025 zu Lovable-Apps, deren Supabase-Tabellen keine oder eine zu großzügige Row Level Security hatten. Er scannte 1.645 Lovable-Apps und fand 170 mit offenen Datenbanken. Lovable reagierte mit einem Sicherheitscheck, der vor dem Veröffentlichen läuft. Es ist kein Patch, auf den du wartest, und war es nie, denn die Offenlegung ist eine Einstellung an deinen eigenen Tabellen und kein Defekt in Lovable-Code. Genau deshalb sehen unsere Zahlen von 2026 seinen von 2025 so ähnlich. Ob es dich betrifft, beantwortet heute eine einzige Seite in Supabase.",{"q":744,"a":745},"Findet der Sicherheitscheck von Lovable eine offene Tabelle?","Lovable führt vor dem Veröffentlichen einen Check aus, der dein Projekt von innen liest: Schema, Policies, Abhängigkeiten. Das sieht Dinge, die ein Scan von außen strukturell nicht sehen kann, etwa eine Tabelle, die dein Frontend nie nennt. Was er nicht beweisen kann, ist, dass eine Policy auch hält, denn eine Policy kann existieren, gültig aussehen und trotzdem jede Zeile an jeden zurückgeben. Die beiden Blickwinkel beantworten verschiedene Fragen. Führe den inneren vor dem Veröffentlichen aus und einen äußeren danach, und wenn sie sich widersprechen, gewinnt die Antwort von außen.",{"q":747,"a":748},"Ist Lovable sicherer als Bolt oder Replit?","Bei dem, was die Plattform entscheidet, lag Lovable vor den vier anderen, die wir gemessen haben: weniger veröffentlichte Source Maps als bei allen anderen, überhaupt keine offenen Cross-Origin-Header und keine Probleme mit Zertifikaten oder Domains. Bei dem, was der Inhaber entscheidet, sieht es aus wie überall sonst, denn diese Funde folgen daraus, wie eine App gebaut wurde, und nicht daraus, wo. Den vollständigen Vergleich haben wir in einen eigenen Artikel gelegt, statt die Tabelle hier zu wiederholen.","\u002Fblog\u002Fis-lovable-safe\u002Fcard-800x500.png",[751,752,753,754,755,756,757,758,759],"ist lovable sicher","lovable sicherheit","lovable projekt retten","sind lovable apps sicher","lovable supabase sicherheit","lovable rls","ist lovable produktionsreif","lovable sicherheitsprobleme","lovable datenleck",{},true,"\u002Fblog\u002Fis-lovable-safe","2026-09-21",{"title":5,"description":727},"blog\u002Fis-lovable-safe",[767,768,769],"Ist Lovable sicher? Die Plattform war die sauberste der fünf Builder, die wir gemessen haben. 225 von 18.553 Apps veröffentlichten ihren Quellcode, keine einzige erlaubte jeder Website den Zugriff auf ihre API, und 15.963 von 18.554 bekamen ein A.","Alles Ernste, das wir gefunden haben, saß in der App, die der Inhaber gebaut hat. Von den 3.553 Lovable-Apps, deren Supabase-Datenbank wir tatsächlich fragen konnten, gaben 2.017 Zeilen an eine Anfrage ohne Anmeldung heraus.","Das sind rund 11 von je 100 Lovable-Apps in unserem Scan. Ein Forscher hat dasselbe im Mai 2025 gemessen und kam auf 10 von 100. Sechzehn Monate später hat sich die Quote also nicht bewegt.","MfKb5lfekOx-xM458fo8wVQOTedhadeH04Y_tT-fQys",[772,779,785,786,792,798,804,810,816,822,828,834,840,845,850,856,861,867,873,879,884,890,896,902,908,914,920,926,932,937,943,949,954,959,964,969,973,979,985,990,995,1001],{"path":773,"title":774,"description":775,"published":776,"category":777,"image":778,"draft":728},"\u002Fblog\u002Fsupabase-backup-auth-users","Warum in deinem Supabase-Dump keine Nutzer stehen","Führe supabase db dump allein aus und du bekommst die Form deiner Datenbank und keine einzige Zeile, und das auth-Schema mit deinen Nutzern fehlt ganz.","2026-09-23","Backups","\u002Fblog\u002Fsupabase-backup-auth-users\u002Fcard-800x500.png",{"path":780,"title":781,"description":782,"published":783,"category":724,"image":784,"draft":728},"\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":762,"title":5,"description":727,"published":763,"category":724,"image":749,"draft":728},{"path":787,"title":788,"description":789,"published":790,"category":724,"image":791,"draft":728},"\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":793,"title":794,"description":795,"published":796,"category":724,"image":797,"draft":728},"\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":799,"title":800,"description":801,"published":802,"category":724,"image":803,"draft":728},"\u002Fblog\u002Fvite-and-next-public-env-vars","Vite-Env-Variablen offengelegt: der Präfix heißt veröffentlichen","Vite-Env-Variablen offengelegt: Deine App hat getan, was der Präfix verlangt. VITE_ und NEXT_PUBLIC_ heißen veröffentlichen, und die KI kannte den Preis nie.","2026-09-18","\u002Fblog\u002Fvite-and-next-public-env-vars\u002Fcard-800x500.png",{"path":805,"title":806,"description":807,"published":808,"category":724,"image":809,"draft":728},"\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":811,"title":812,"description":813,"published":814,"category":724,"image":815,"draft":728},"\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":817,"title":818,"description":819,"published":820,"category":724,"image":821,"draft":728},"\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":823,"title":824,"description":825,"published":826,"category":777,"image":827,"draft":728},"\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":829,"title":830,"description":831,"published":832,"category":777,"image":833,"draft":728},"\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":835,"title":836,"description":837,"published":838,"category":777,"image":839,"draft":728},"\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":704,"title":841,"description":842,"published":843,"category":724,"image":844,"draft":728},"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":380,"title":846,"description":847,"published":848,"category":724,"image":849,"draft":728},"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":851,"title":852,"description":853,"published":854,"category":724,"image":855,"draft":728},"\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":553,"title":857,"description":858,"published":859,"category":724,"image":860,"draft":728},"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":862,"title":863,"description":864,"published":865,"category":724,"image":866,"draft":728},"\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":868,"title":869,"description":870,"published":871,"category":724,"image":872,"draft":728},"\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":874,"title":875,"description":876,"published":877,"category":724,"image":878,"draft":728},"\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":237,"title":880,"description":881,"published":882,"category":724,"image":883,"draft":728},"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":885,"title":886,"description":887,"published":888,"category":724,"image":889,"draft":728},"\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":891,"title":892,"description":893,"published":894,"category":724,"image":895,"draft":728},"\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":897,"title":898,"description":899,"published":900,"category":777,"image":901,"draft":728},"\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":903,"title":904,"description":905,"published":906,"category":724,"image":907,"draft":728},"\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":909,"title":910,"description":911,"published":912,"category":777,"image":913,"draft":728},"\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":915,"title":916,"description":917,"published":918,"category":724,"image":919,"draft":728},"\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":921,"title":922,"description":923,"published":924,"category":724,"image":925,"draft":728},"\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":927,"title":928,"description":929,"published":930,"category":724,"image":931,"draft":728},"\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":272,"title":933,"description":934,"published":935,"category":724,"image":936,"draft":728},"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":938,"title":939,"description":940,"published":941,"category":777,"image":942,"draft":728},"\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":944,"title":945,"description":946,"published":947,"category":777,"image":948,"draft":728},"\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":574,"title":950,"description":951,"published":952,"category":724,"image":953,"draft":728},"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":539,"title":955,"description":956,"published":957,"category":724,"image":958,"draft":728},"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":668,"title":960,"description":961,"published":962,"category":777,"image":963,"draft":728},"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":628,"title":965,"description":966,"published":967,"category":724,"image":968,"draft":728},"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":262,"title":970,"description":971,"published":967,"category":724,"image":972,"draft":728},"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":974,"title":975,"description":976,"published":977,"category":724,"image":978,"draft":728},"\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":980,"title":981,"description":982,"published":983,"category":777,"image":984,"draft":728},"\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":406,"title":986,"description":987,"published":988,"category":724,"image":989,"draft":728},"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":991,"title":992,"description":993,"published":988,"category":777,"image":994,"draft":728},"\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":996,"title":997,"description":998,"published":999,"category":777,"image":1000,"draft":728},"\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":560,"title":1002,"description":1003,"published":999,"category":724,"image":1004,"draft":728},"Welche API-Schlüssel im Frontend sicher sind, und welche nicht","Dein Supabase-anon-Schlüssel darf öffentlich sein. Der service_role-Schlüssel nicht. Er ignoriert jede Regel, die du setzt. So erkennst du den Unterschied.","\u002Fblog\u002Fwhich-api-keys-are-safe-in-your-frontend\u002Fcard-800x500.png",1790150951364]