[{"data":1,"prerenderedAt":584},["ShallowReactive",2],{"blog-de-replit-secrets-explained":3,"blog-index-de":342},{"id":4,"title":5,"body":6,"category":299,"cover":300,"coverAlt":301,"description":302,"draft":303,"extension":304,"faq":305,"image":320,"keywords":321,"meta":328,"navigation":329,"ogTitle":330,"path":331,"published":332,"seo":333,"stem":334,"tldr":335,"updated":340,"__hash__":341},"blog_de\u002Fblog\u002Freplit-secrets-explained.md","Secrets in Replit nutzen, und was trotzdem veröffentlicht wird",{"type":7,"value":8,"toc":288},"minimark",[9,13,21,24,33,38,41,80,83,90,94,97,100,103,107,110,113,116,122,136,147,160,167,171,174,184,190,195,205,208,212,215,218,221,232,238,246,250,276],[10,11,12],"p",{},"Irgendwann zwischen Bauen und Veröffentlichen hat Replit dir gesagt, du sollst\ndeinen API-Schlüssel nicht mehr in den Code schreiben. Also hast du\nnachgeschlagen, wie man Secrets in Replit nutzt, den Schlüssel ins\nSecrets-Werkzeug gelegt, und die Warnung war weg. Dann hat dir jemand gesagt,\nder Schlüssel sei in deiner veröffentlichten App immer noch zu sehen, und beides\nscheint gleichzeitig zu stimmen.",[10,14,15,16,20],{},"Tut es auch. Hier ist der Teil, den die meisten Ratschläge dazu auslassen: ",[17,18,19],"strong",{},"das\nSecrets-Werkzeug entscheidet, wo ein Wert liegt. Dein Code entscheidet, wohin er\ngetragen wird."," Das sind zwei getrennte Fragen, und nur die erste hat\nüberhaupt etwas mit dem Werkzeug zu tun.",[10,22,23],{},"Auf Replit trifft das besonders hart, weil die Hälfte deiner App, die auf\nReplits Maschine läuft, und die Hälfte, die auf dem Laptop deines Besuchers\nläuft, im selben Projekt liegen, oft in benachbarten Dateien. Nichts im Editor\nzieht eine Linie zwischen ihnen.",[10,25,26,27,32],{},"Zwischen dem 12. und dem 14. August 2026 haben wir dieselben neun externen\nPrüfungen über 30.998 live erreichbare Apps laufen lassen, davon 3.042 auf\nReplit veröffentlicht. In 219 dieser Replit-Apps lag etwas Schlüsselförmiges im\nCode, den ein Besucher herunterlädt. Über die ganze Stichprobe hinweg ist das\nmeiste, was diese Prüfung findet, ein Google-Schlüssel, der eingeschränkt\nnormalerweise in Ordnung ist. Die, die nicht in Ordnung sind, sind die, die ein\nSecrets-Werkzeug verhindern sollte. Die vollständigen Zahlen stehen in\n",[28,29,31],"a",{"href":30},"\u002Fresearch\u002Fvibe-coded-app-security-2026","unserem Scan-Bericht",".",[34,35,37],"h2",{"id":36},"wie-nutze-ich-secrets-in-replit","Wie nutze ich Secrets in Replit?",[10,39,40],{},"Öffne das Secrets-Werkzeug, trage einen Namen und einen Wert ein und lies den\nWert in deinem Code als Umgebungsvariable aus. Das dauert etwa eine Minute.",[42,43,44,52,64,67,77],"ol",{},[45,46,47,48,51],"li",{},"Öffne in deinem Projekt ",[17,49,50],{},"Secrets",". Es steht in der Werkzeugliste, und die\nSuche im Werkzeugbereich nach dem Wort findet es.",[45,53,54,55,58,59,63],{},"Wähle ",[17,56,57],{},"+ New secret",". Gib ihm einen Namen in Großbuchstaben mit\nUnterstrichen, etwa ",[60,61,62],"code",{},"OPENAI_API_KEY",". Diesen Namen benutzt später dein Code,\ner ist also wichtiger, als er aussieht.",[45,65,66],{},"Füge den Wert in das zweite Feld ein und speichere. Replit verschlüsselt ihn\nund hält ihn außerhalb deiner Projektdateien.",[45,68,69,70,73,74,32],{},"Lies ihn in deinem Code aus. In JavaScript ist das\n",[60,71,72],{},"process.env.OPENAI_API_KEY",", in Python ",[60,75,76],{},"os.getenv(\"OPENAI_API_KEY\")",[45,78,79],{},"Geh zurück und lösche den Wert dort, wo er vorher stand.",[10,81,82],{},"Schritt fünf ist der, den Leute überspringen, und der, an dem hängt, ob das\nalles etwas gebracht hat. Ein Secret anzulegen entfernt die Kopie nicht, die du\nschon hattest. Ein Schlüssel, der letzte Woche in eine Datei geschrieben wurde,\nsteht immer noch in dieser Datei, immer noch in deiner Projekthistorie und immer\nnoch in jeder Kopie deiner App, die seitdem veröffentlicht wurde.",[10,84,85,86,89],{},"Eine ",[60,87,88],{},".env","-Datei macht dieselbe Arbeit wie das Secrets-Werkzeug, mit einem\nUnterschied, der zählt: Sie ist eine Datei und reist mit dem Projekt mit, wenn\njemand es forkt oder an ein Repository anschließt.",[34,91,93],{"id":92},"sind-replit-secrets-sicher","Sind Replit Secrets sicher?",[10,95,96],{},"Für das, was sie tun, ja. Der Wert ist verschlüsselt, er liegt außerhalb deines\nQuellcodes, und die drei häufigsten Wege, auf denen einem ein Schlüssel\nabhandenkommt, sind damit alle zu: Du teilst dein Projekt mit jemandem, du\nschließt es an ein Repository an, oder jemand sieht dir beim Arbeiten zu.",[10,98,99],{},"Stell es dir als abgeschlossene Schublade vor. Was in der Schublade liegt, ist\nvor jedem verborgen, der deine Dateien liest. Was die Schublade nicht\nentscheiden kann, ist, was deine App mit dem Inhalt anstellt, sobald dein\neigener Code sie geöffnet hat und damit losgezogen ist.",[10,101,102],{},"Und eine veröffentlichte Replit-App zieht mit ziemlich viel los. Jeder Besucher,\nder deine Seite lädt, bekommt die gesamte vordere Hälfte davon geschickt, denn\nein Browser kann keine Seite zeichnen, die er nicht bekommen hat. Wenn der Code,\nder die Schublade öffnet, zu den Besuchern geschickt wird, reist der\nherausgenommene Wert mit.",[34,104,106],{"id":105},"welche-hälfte-deiner-app-liest-den-schlüssel","Welche Hälfte deiner App liest den Schlüssel?",[10,108,109],{},"Die Hälfte, die auf Replits Maschine läuft, kann ein Secret gefahrlos lesen. Die\nHälfte, die im Browser deines Besuchers läuft, kann es nicht, und der übliche\nWeg, es doch zum Laufen zu bringen, ist zugleich der Weg, auf dem der Schlüssel\nöffentlich wird.",[10,111,112],{},"Dein Server-Code ist der Teil, den Replit ausführt: eine Express-Route, ein\nPython-Handler, eine Funktion, die mit OpenAI oder Stripe spricht und deiner App\neine Antwort zurückgibt. Sie liest ein Secret, benutzt es, und der Wert verlässt\ndie Maschine nie.",[10,114,115],{},"Dein Browser-Code ist alles, was der Laptop deines Besuchers ausführt. In einem\nReact-Projekt ist das das meiste von dem, was du bearbeitet hast. Es wird zu\neinem Bündel JavaScript kompiliert und vollständig von jedem heruntergeladen,\nder deine Seite öffnet.",[117,118],"diagram",{"alt":119,"caption":120,"src":121},"Ein verschlossener Speicher voller Werte innerhalb eines gestrichelten Rahmens, der für Replits Maschine steht, und zwei Wege heraus. Der obere Weg erreicht einen Server, der innerhalb des Rahmens bleibt, wo der Wert weiter als verborgene Punkte gezeichnet und mit einem Haken versehen ist. Der untere Weg erreicht ein Browserfenster mit der Aufschrift VITE_, überquert dann den Rahmen und endet bei einer Person, die denselben Wert als lesbaren Balken hält, durchgestrichen.","Eine Schublade, zwei Leser. Der Wert geht dorthin, wohin der Code geht, der sie geöffnet hat.","\u002Fblog\u002Freplit-secrets-explained\u002Fwhich-half-reads-it-1600x760.png",[10,123,124,127,128,131,132,135],{},[60,125,126],{},"process.env"," gibt es in einem Browser nicht, Browser-Code, der es liest,\nbekommt also überhaupt nichts. Damit der Wert doch ankommt, benennt ihn jemand\num: ",[60,129,130],{},"VITE_OPENAI_API_KEY"," in einem Vite-Projekt oder\n",[60,133,134],{},"NEXT_PUBLIC_OPENAI_API_KEY"," in einem von Next.js. Es funktioniert sofort, denn\ndieses Präfix ist eine Anweisung an das Build-Werkzeug, den Wert in das Bündel\nzu schreiben. Vites eigene Dokumentation sagt genau das und warnt aus ebendiesem\nGrund davor, API-Schlüssel dort abzulegen.",[10,137,138,139,142,143,146],{},"Die schnellste Prüfung in diesem Artikel ist deshalb eine Suche. Öffne dein\nProjekt und such nach ",[60,140,141],{},"VITE_"," und ",[60,144,145],{},"NEXT_PUBLIC_",". Jeder Treffer ist ein Wert,\nden dein Build-Werkzeug veröffentlichen soll.",[10,148,149,150,154,155,159],{},"Für manche davon ist das richtig. Ein veröffentlichbarer Supabase-Schlüssel ist\ndafür gebaut, in einem Browser zu sitzen, und ein Google-Maps-Schlüssel mit\neiner ",[28,151,153],{"href":152},"\u002Fblog\u002Fgoogle-api-key-exposed-in-frontend","Referrer-Einschränkung"," auch.\nFalsch ist es für alles, was Geld ausgibt oder eine Datenbank liest, ohne zu\nfragen, wer da klopft, und\n",[28,156,158],{"href":157},"\u002Fblog\u002Fwhich-api-keys-are-safe-in-your-frontend","die beiden auseinanderzuhalten","\ndauert etwa eine Minute pro Schlüssel.",[10,161,162,163,32],{},"Wenn du lieber sehen willst, was deine veröffentlichte App herausgibt, bevor du\nDatei für Datei gehst: Unser kostenloser Scan liest deine Website von außen und\nsagt dir, was er dort finden kann. Er dauert etwa 20 Sekunden und braucht kein\nKonto: ",[28,164,166],{"href":165},"\u002Fsecurity-scanner","App scannen",[34,168,170],{"id":169},"warum-funktioniert-mein-replit-secret-nicht","Warum funktioniert mein Replit-Secret nicht?",[10,172,173],{},"Zwei Gründe, und von deinem Platz aus erzeugen sie dasselbe Symptom: einen\nleeren Wert und eine App, die nicht läuft.",[10,175,176,179,180,183],{},[17,177,178],{},"Der Code, der es liest, läuft im Browser."," Dort gibt es keine Umgebung zum\nAuslesen, ",[60,181,182],{},"process.env.DEIN_KEY"," ist also leer und bleibt es. Das ist kein\nKonfigurationsproblem, und kein noch so häufiges Neuanlegen des Secrets bewegt\ndaran etwas. Der Aufruf, der den Schlüssel braucht, muss in die Server-Hälfte\ndeiner App umziehen.",[10,185,186,189],{},[17,187,188],{},"Deine veröffentlichte App läuft in einer älteren Version."," Replit hält zwei\nSätze von Werten, die in deinem Workspace und die, mit denen deine\nveröffentlichte App läuft. Sie gleichen sich ab, ein neu angelegtes Secret\nerreicht das Deployment also normalerweise. Was die laufende App tatsächlich\nbenutzt, ist aber das, was beim letzten Veröffentlichen da war. Legst du danach\nein Secret an, weiß die laufende App nichts davon, bis du erneut\nveröffentlichst.",[117,191],{"alt":192,"caption":193,"src":194},"Zwei Tafeln nebeneinander. In der Editor-Tafel enthält der verschlossene Speicher einen gefüllten Wert, und die Vorschau daneben trägt einen Haken. In der Tafel der veröffentlichten App hat derselbe Speicher einen leeren Platz, die laufende App daneben ist durchgestrichen, und darunter steht das Wort undefined.","Derselbe Name an beiden Orten. Die laufende App arbeitet mit den Werten, die beim letzten Veröffentlichen da waren.","\u002Fblog\u002Freplit-secrets-explained\u002Ftwo-stores-one-name-1600x560.png",[10,196,197,198,201,202,204],{},"Replits eigene Fehlersuche für eine App, die im Editor läuft und veröffentlicht\nkaputtgeht, fängt genau an dieser Stelle an. Es lohnt sich also, die\nDeployment-Secrets zu öffnen und die Namen zu lesen, bevor du irgendetwas für\nkaputt hältst. Ein Name, der an einer Stelle ",[60,199,200],{},"OPENAI_KEY"," heißt und an der\nanderen ",[60,203,62],{},", erzeugt denselben leeren Wert wie ein fehlendes\nSecret.",[10,206,207],{},"Ein Deployment, das um Mitternacht scheitert, ist der Moment, in dem die\nAbkürzung genommen wird. Den Wert direkt in den Code zu schreiben löst die\nBlockade in Sekunden, die App ist zurück, und der Schlüssel steckt von da an in\ndeinem veröffentlichten Bündel.",[34,209,211],{"id":210},"der-schlüssel-ist-schon-in-meiner-veröffentlichten-app-was-jetzt","Der Schlüssel ist schon in meiner veröffentlichten App. Was jetzt?",[10,213,214],{},"Tausche ihn, bevor du irgendeinen Code änderst. Erzeuge im Dashboard des\nAnbieters einen neuen Schlüssel und ziehe den alten zurück.",[10,216,217],{},"Diese Reihenfolge zählt, weil nur der Tausch dafür sorgt, dass der offengelegte\nWert nicht mehr funktioniert. Deinen Code zu bearbeiten entfernt ihn aus der\naktuellen Version und lässt ihn in deiner Projekthistorie stehen, und gegen die\nKopien deines Bündels, die längst heruntergeladen, zwischengespeichert und\ngecrawlt wurden, tut es überhaupt nichts. Dass deine App klein ist, hilft\nebenfalls nicht: Automatische Crawler lesen öffentliche Seiten fortlaufend nach\nschlüsselförmigen Zeichenketten ab, ohne eine Ahnung davon, wer du bist.",[10,219,220],{},"Dann, in dieser Reihenfolge:",[42,222,223,226,229],{},[45,224,225],{},"Leg den neuen Schlüssel in Secrets und lies ihn nur aus Server-Code.",[45,227,228],{},"Verschiebe den Aufruf, der ihn brauchte. Alles, was mit OpenAI, Anthropic,\nStripe oder deiner Datenbank mit einem administrativen Schlüssel spricht,\ngehört hinter eine Route, die deine App aufruft, damit der Browser deinen\nServer fragt und dein Server den Schlüssel hält.",[45,230,231],{},"Sieh dir die Nutzungs- und Abrechnungsseiten des Anbieters für den Zeitraum\nan, in dem der alte Schlüssel öffentlich war. Der Tausch stoppt, was als\nNächstes passiert, und sagt nichts über das, was schon passiert ist.",[10,233,234,235,237],{},"Schlüssel von Modellanbietern sind auf Replit die, die zuerst zu prüfen sind.\n",[60,236,62],{}," ist das Beispiel, zu dem Replits eigene Dokumentation greift,\nwenn sie dir das Anlegen eines Secrets zeigt, und von einem OpenAI- oder\nAnthropic-Schlüssel gibt es keine veröffentlichbare Variante. Jeder einzelne\nrechnet direkt über dein Konto ab.",[10,239,240,241,245],{},"Eine Stelle noch, wenn du schon dabei bist: Wenn dein Projekt\n",[28,242,244],{"href":243},"\u002Fblog\u002Fsource-maps-exposed-in-production","Source Maps veröffentlicht",", kann ein\nBesucher dieses Bündel als die Originaldateien lesen, die du geschrieben hast,\nmit deinen eigenen Variablennamen darauf.",[34,247,249],{"id":248},"was-du-diese-woche-tun-solltest","Was du diese Woche tun solltest",[251,252,253],"key-takeaways",{},[254,255,256,259,267,270,273],"ul",{},[45,257,258],{},"Leg jeden Schlüssel ins Secrets-Werkzeug und lösche danach die Kopien, die in Dateien zurückgeblieben sind. Ein Secret anzulegen entfernt den alten Wert nicht.",[45,260,261,262,142,264,266],{},"Such dein Projekt nach ",[60,263,141],{},[60,265,145],{}," ab. Jeder Treffer ist ein Wert, den dein Build-Werkzeug absichtlich veröffentlicht, und jeder davon muss ein Schlüssel sein, der veröffentlicht werden durfte.",[45,268,269],{},"Für jeden, der das nicht ist: Verschiebe den Aufruf in deine Server-Hälfte, damit der Browser deine App fragt und deine App den Schlüssel hält.",[45,271,272],{},"Ist ein Secret in der veröffentlichten App leer, im Editor aber nicht, veröffentliche noch einmal und prüfe den Namen in deinen Deployment-Secrets, bevor du Code änderst.",[45,274,275],{},"Tausche beim Anbieter alles, was schon draußen war, bevor du den Code anfasst. Lies danach die Abrechnungsseite für die Wochen, in denen er öffentlich war.",[10,277,278,279,283,284,32],{},"Mach zuerst die Suche. Sie dauert eine Minute, braucht nichts Installiertes und\nsagt dir, welche der Schlüssel in deinem Projekt bereits öffentlich sind. Die\n",[28,280,282],{"href":281},"\u002Fchecklist","10-Minuten-Sicherheitscheckliste"," deckt den Rest ab, was bei einer\nfrisch gestarteten App zu prüfen ist, und die Anleitung in einfacher Sprache für\ndiese Plattform ist ",[28,285,287],{"href":286},"\u002Fis-your-replit-app-safe","Ist deine Replit-App sicher",{"title":289,"searchDepth":290,"depth":290,"links":291},"",3,[292,294,295,296,297,298],{"id":36,"depth":293,"text":37},2,{"id":92,"depth":293,"text":93},{"id":105,"depth":293,"text":106},{"id":169,"depth":293,"text":170},{"id":210,"depth":293,"text":211},{"id":248,"depth":293,"text":249},"Sicherheitsgrundlagen","\u002Fblog\u002Freplit-secrets-explained\u002Fcover-1200x630.png","Das Replit-Logo, ein Pfeil zu einem verschlossenen Speicher verborgener Werte und ein weiterer zur laufenden App, die daraus liest.","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.",false,"md",[306,308,311,314,317],{"q":93,"a":307},"Für das, was sie tun, ja. Replit verschlüsselt die Werte und hält sie aus deinen Dateien heraus. Dein Projekt zu teilen, es an ein Repository anzuschließen oder dir beim Arbeiten zusehen zu lassen, gibt den Schlüssel damit nicht mehr weiter. Was das Werkzeug nicht entscheiden kann, ist, wohin deine App den Wert danach trägt. Ein Schlüssel, den Code auf Replits Maschine liest, bleibt auf Replit. Derselbe Schlüssel, den Code im Browser deines Besuchers liest, wird in das eingebaut, was du veröffentlichst, und ihn vorher in Secrets zu legen ändert daran nichts.",{"q":309,"a":310},"Warum ist mein Replit-Secret undefined?","Zwei Ursachen, und von deinem Platz aus sehen sie gleich aus. Entweder läuft der Code, der es liest, im Browser, wo es keine Umgebung zum Auslesen gibt und in process.env nichts steht, oder deine veröffentlichte App läuft in einer Version, die vor dem Anlegen des Secrets deployt wurde. Für den zweiten Fall: noch einmal veröffentlichen. Eine laufende App benutzt die Werte, die beim letzten Veröffentlichen da waren.",{"q":312,"a":313},"Kann ich ein Secret in meinem React-Frontend auf Replit benutzen?","Du kannst einen Wert dorthin legen, geheim wird er dadurch nicht. React-Code läuft auf der Maschine deines Besuchers, also muss alles, was er liest, erst dorthin geschickt werden. Build-Werkzeuge machen das über ein Präfix sichtbar: Vite gibt nur Variablen mit VITE_ an den Browser-Code weiter, Next.js nur solche mit NEXT_PUBLIC_. Dieses Präfix zu setzen ist die übliche Art, einen Schlüssel im Frontend zum Laufen zu bringen, und zugleich der Moment, in dem er öffentlich wird. Veröffentlichbare Schlüssel gehören dorthin. Alles, was Geld ausgibt oder eine Datenbank liest, gehört auf den Server.",{"q":315,"a":316},"Muss ich meine Secrets beim Veröffentlichen noch einmal eintragen?","Meistens nicht, weil sich die Deployment-Secrets mit denen deines Workspace abgleichen. Deine laufende App benutzt aber die Werte, die beim letzten Veröffentlichen vorhanden waren. Ein danach angelegtes Secret erreicht das Deployment beim nächsten Mal. Replits eigene Fehlersuche für eine App, die im Editor läuft und veröffentlicht scheitert, fängt genau hier an. Wenn beim Deployen etwas fehlt, öffne also die Deployment-Secrets und prüfe, ob der Name da ist und gleich geschrieben wird.",{"q":318,"a":319},"Ich habe einen API-Schlüssel in eine Datei geschrieben, bevor ich das Secrets-Werkzeug fand. Reicht es, die Datei zu löschen?","Nein. Tausche den Schlüssel zuerst beim Anbieter, denn das ist es, was die Tür wirklich schließt, und lege den Wert danach in Secrets. Eine Zeile Code zu löschen entfernt sie aus der aktuellen Version, aber nicht aus deiner Projekthistorie und auch nicht aus einer Kopie deiner veröffentlichten App, die jemand schon hat. Nur der Tausch sorgt dafür, dass der alte Wert nicht mehr funktioniert, und er dauert im Dashboard des Anbieters meist etwa eine Minute.","\u002Fblog\u002Freplit-secrets-explained\u002Fcard-800x500.png",[322,323,324,325,326,327],"secrets in replit nutzen","replit secrets","replit secrets funktionieren nicht","sind replit secrets sicher","replit umgebungsvariablen","replit secret",{},true,"Secrets in Replit nutzen","\u002Fblog\u002Freplit-secrets-explained","2026-08-31",{"title":5,"description":302},"blog\u002Freplit-secrets-explained",[336,337,338,339],"Secrets in Replit nutzen geht so: das Secrets-Werkzeug öffnen, Namen und Wert eintragen und den Wert im Code als Umgebungsvariable auslesen.","Das hält den Schlüssel aus deinen Dateien heraus. Aus deiner veröffentlichten App hält es ihn nicht heraus, denn was dein Browser-Code liest, wird in das eingebaut, was jeder Besucher herunterlädt.","Das Erkennungszeichen ist der Name. Eine Variable, die mit VITE_ oder NEXT_PUBLIC_ beginnt, hat dein Build-Werkzeug absichtlich in den Browser gelegt.","Ist ein Secret in der veröffentlichten App leer, wurde die laufende Version meist vor dem Anlegen veröffentlicht. Veröffentliche noch einmal.","2026-09-21","3tTtbIF04FM3_aXt0IeUUahMXqBafP5u8gls5bEdMEk",[343,350,356,361,367,373,379,385,391,397,403,409,415,421,427,433,439,445,451,457,463,469,475,481,482,488,494,500,506,512,518,524,530,535,541,547,551,557,563,569,574,580],{"path":344,"title":345,"description":346,"published":347,"category":348,"image":349,"draft":303},"\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":351,"title":352,"description":353,"published":354,"category":299,"image":355,"draft":303},"\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":357,"title":358,"description":359,"published":340,"category":299,"image":360,"draft":303},"\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.","\u002Fblog\u002Fis-lovable-safe\u002Fcard-800x500.png",{"path":362,"title":363,"description":364,"published":365,"category":299,"image":366,"draft":303},"\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":368,"title":369,"description":370,"published":371,"category":299,"image":372,"draft":303},"\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":374,"title":375,"description":376,"published":377,"category":299,"image":378,"draft":303},"\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":380,"title":381,"description":382,"published":383,"category":299,"image":384,"draft":303},"\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":386,"title":387,"description":388,"published":389,"category":299,"image":390,"draft":303},"\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":392,"title":393,"description":394,"published":395,"category":299,"image":396,"draft":303},"\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":398,"title":399,"description":400,"published":401,"category":348,"image":402,"draft":303},"\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":404,"title":405,"description":406,"published":407,"category":348,"image":408,"draft":303},"\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":410,"title":411,"description":412,"published":413,"category":348,"image":414,"draft":303},"\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":416,"title":417,"description":418,"published":419,"category":299,"image":420,"draft":303},"\u002Fblog\u002Fsafest-ai-app-builder","Welcher KI-App-Builder ist am sichersten? 30.998 Apps im Test","Welcher KI-App-Builder ist am sichersten? Wir haben 30.998 aktive Apps von Lovable, Base44, Replit, v0 und Bolt gescannt. Der Builder entscheidet das nicht.","2026-09-11","\u002Fblog\u002Fsafest-ai-app-builder\u002Fcard-800x500.png",{"path":422,"title":423,"description":424,"published":425,"category":299,"image":426,"draft":303},"\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":428,"title":429,"description":430,"published":431,"category":299,"image":432,"draft":303},"\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":434,"title":435,"description":436,"published":437,"category":299,"image":438,"draft":303},"\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":440,"title":441,"description":442,"published":443,"category":299,"image":444,"draft":303},"\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":446,"title":447,"description":448,"published":449,"category":299,"image":450,"draft":303},"\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":452,"title":453,"description":454,"published":455,"category":299,"image":456,"draft":303},"\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":458,"title":459,"description":460,"published":461,"category":299,"image":462,"draft":303},"\u002Fblog\u002Fmissing-security-headers","Fehlende Sicherheitsheader: wann sie wirklich zählen","Fehlende Sicherheitsheader ist unser häufigster Befund. Wogegen sie schützen, und wann sie die unwichtigste Zeile in deinem Bericht sind.","2026-09-04","\u002Fblog\u002Fmissing-security-headers\u002Fcard-800x500.png",{"path":464,"title":465,"description":466,"published":467,"category":299,"image":468,"draft":303},"\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":470,"title":471,"description":472,"published":473,"category":299,"image":474,"draft":303},"\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":476,"title":477,"description":478,"published":479,"category":348,"image":480,"draft":303},"\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":331,"title":5,"description":302,"published":332,"category":299,"image":320,"draft":303},{"path":483,"title":484,"description":485,"published":486,"category":348,"image":487,"draft":303},"\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":489,"title":490,"description":491,"published":492,"category":299,"image":493,"draft":303},"\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":495,"title":496,"description":497,"published":498,"category":299,"image":499,"draft":303},"\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":501,"title":502,"description":503,"published":504,"category":299,"image":505,"draft":303},"\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":507,"title":508,"description":509,"published":510,"category":299,"image":511,"draft":303},"\u002Fblog\u002Fcors-wildcard-security-risk","Ist eine CORS-Wildcard ein Sicherheitsrisiko? Meist nicht.","Ist eine CORS-Wildcard ein Sicherheitsrisiko? Meist ist sie die Voreinstellung deines Builders und gibt nichts preis, was dein Server nicht ohnehin herausgab.","2026-08-26","\u002Fblog\u002Fcors-wildcard-security-risk\u002Fcard-800x500.png",{"path":513,"title":514,"description":515,"published":516,"category":348,"image":517,"draft":303},"\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":519,"title":520,"description":521,"published":522,"category":348,"image":523,"draft":303},"\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":525,"title":526,"description":527,"published":528,"category":299,"image":529,"draft":303},"\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":152,"title":531,"description":532,"published":533,"category":299,"image":534,"draft":303},"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":536,"title":537,"description":538,"published":539,"category":348,"image":540,"draft":303},"\u002Fblog\u002Fai-agent-deleted-my-database","Ein KI-Agent hat meine Supabase-Daten gelöscht. Was hole ich zurück?","Ein KI-Agent hat Daten aus deiner Datenbank gelöscht. Was du zurückholst, stand schon vorher fest, und die nächsten Minuten entscheiden über den Rest.","2026-08-21","\u002Fblog\u002Fai-agent-deleted-my-database\u002Fcard-800x500.png",{"path":542,"title":543,"description":544,"published":545,"category":299,"image":546,"draft":303},"\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":243,"title":548,"description":549,"published":545,"category":299,"image":550,"draft":303},"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":552,"title":553,"description":554,"published":555,"category":299,"image":556,"draft":303},"\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":558,"title":559,"description":560,"published":561,"category":348,"image":562,"draft":303},"\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":564,"title":565,"description":566,"published":567,"category":299,"image":568,"draft":303},"\u002Fblog\u002Fsupabase-rls-on-but-table-still-public","Supabase Row Level Security ist an. Die Tabelle ist trotzdem offen.","Supabase Row Level Security anzuschalten schützt keine Tabelle. Erst deine Policies tun das, und die, die deine App repariert hat, lässt oft alle herein.","2026-08-10","\u002Fblog\u002Fsupabase-rls-on-but-table-still-public\u002Fcard-800x500.png",{"path":570,"title":571,"description":572,"published":567,"category":348,"image":573,"draft":303},"\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":575,"title":576,"description":577,"published":578,"category":348,"image":579,"draft":303},"\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":157,"title":581,"description":582,"published":578,"category":299,"image":583,"draft":303},"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]