[{"data":1,"prerenderedAt":727},["ShallowReactive",2],{"blog-de-stripe-secret-key-in-frontend":3,"blog-index-de":484},{"id":4,"title":5,"body":6,"category":437,"cover":438,"coverAlt":439,"description":440,"draft":441,"extension":442,"faq":443,"image":462,"keywords":463,"meta":471,"navigation":472,"ogTitle":473,"path":474,"published":475,"seo":476,"stem":477,"tldr":478,"updated":475,"__hash__":483},"blog_de\u002Fblog\u002Fstripe-secret-key-in-frontend.md","Ein geheimer Stripe-Schlüssel im Frontend kann Geld bewegen",{"type":7,"value":8,"toc":425},"minimark",[9,18,33,42,47,56,59,64,69,72,76,79,183,194,204,208,211,214,220,227,230,233,237,240,274,277,282,285,288,292,295,302,305,308,312,323,332,337,340,356,360,393,396,403],[10,11,12,13,17],"p",{},"Öffne deine laufende App in einem Browser, sieh dir den Seitenquelltext an und\nsuch darin nach ",[14,15,16],"code",{},"sk_live_",". Kommt eine lange Zeichenkette zurück, liegt ein\ngeheimer Stripe-Schlüssel offen in deinem Frontend, und jeder Besucher, den du\nje hattest, hätte ihn kopieren können.",[10,19,20,21,25,26,29,30,32],{},"Hier ist der Punkt, an dem der allgemeine Rat zu API-Schlüsseln danebenliegt:\nStripe gibt dir zwei aktive Schlüssel, sie sehen fast gleich aus, und ",[22,23,24],"strong",{},"einer\ndavon soll in deiner App liegen."," Der Schlüssel, der mit ",[14,27,28],{},"pk_live_"," beginnt,\ngehört dorthin. Der Schlüssel, der mit ",[14,31,16],{}," beginnt, hat in Stripes\neigenen Worten uneingeschränkte Rechte für alle APIs. Sie unterscheiden sich um\nein Zeichen mitten in einer langen Zeichenkette, und das ist der größte Teil des\nGrundes, warum das immer wieder passiert.",[10,34,35,36,41],{},"Zwischen dem 12. und 14. August 2026 haben wir neun externe Prüfungen über\n30.998 laufende Apps laufen lassen, gebaut mit Lovable, Bolt, v0, Replit und\nBase44. Drei davon lieferten einen aktiven geheimen Stripe-Schlüssel aus, zwei\nweitere einen eingeschränkten, womit das zu den seltensten Funden des Durchlaufs\ngehört; dieselben neun Prüfungen fanden in 1.142 Apps einen Google-API-Schlüssel.\nAlle drei geheimen Schlüssel kamen mit Note D heraus, weil ein einziger\nkritischer Befund die Note dort deckelt, egal was die App sonst richtig gemacht\nhat. Die vollständigen Zahlen stehen in\n",[37,38,40],"a",{"href":39},"\u002Fresearch\u002Fvibe-coded-app-security-2026","unserem Scan-Bericht",".",[43,44,46],"h2",{"id":45},"ist-ein-geheimer-stripe-schlüssel-im-frontend-ein-problem","Ist ein geheimer Stripe-Schlüssel im Frontend ein Problem?",[10,48,49,50,52,53,55],{},"Ja, wenn die Zeichenkette mit ",[14,51,16],{}," beginnt. Nein, wenn sie mit ",[14,54,28],{},"\nbeginnt.",[10,57,58],{},"Stripe gibt zwei aktive Schlüssel aus, weil die beiden Hälften einer Zahlung an\nzwei verschiedenen Orten stattfinden. Stell dir einen Ladentresen vor. Das\nKartenlesegerät zeigt zur Kundschaft und ist gut sichtbar festgeschraubt, und\ndas Schlimmste, was eine Fremde damit anstellen kann, ist dich zu bezahlen. Die\nKasse hinter dem Tresen ist ein ganz anderes Ding. Sie geht auf, sie enthält die\nTageseinnahmen, und in der Schublade darunter liegt für jeden Kunden eine Karte\nmit seiner Anschrift darauf.",[10,60,61,63],{},[14,62,28],{}," ist das Kartenlesegerät. Seine Aufgabe ist es, im Browser von jemand\nanderem ein Bezahlformular aufzubauen, und Stripes Dokumentation sagt, dass\nöffentliche Schlüssel im Frontend-Code offenliegen dürfen.",[10,65,66,68],{},[14,67,16],{}," ist der Kassenschlüssel. Stripe beschreibt geheime Schlüssel als\nSchlüssel mit uneingeschränkten Rechten für alle APIs, was derselbe Satz von der\nanderen Seite gelesen ist: es gibt nichts in deinem Konto, was er nicht\nerreicht.",[10,70,71],{},"Deine App braucht das Kartenlesegerät im Browser, um überhaupt eine Zahlung\nannehmen zu können. Den Kassenschlüssel sollte sie nie brauchen.",[43,73,75],{"id":74},"pk_live_-und-sk_live_-wie-du-sie-auseinanderhältst","pk_live_ und sk_live_: wie du sie auseinanderhältst",[10,77,78],{},"Lies das zweite Zeichen des Präfixes. Das ist die ganze Prüfung.",[80,81,82,101],"table",{},[83,84,85],"thead",{},[86,87,88,92,95,98],"tr",{},[89,90,91],"th",{},"Schlüssel",[89,93,94],{},"Beginnt mit",[89,96,97],{},"Im Browser unbedenklich?",[89,99,100],{},"Was er tut",[102,103,104,125,144,161],"tbody",{},[86,105,106,110,115,122],{},[107,108,109],"td",{},"Öffentlich",[107,111,112],{},[14,113,114],{},"pk_live_…",[107,116,117],{},[118,119,121],"key-verdict",{"type":120},"safe","Gehört hierhin",[107,123,124],{},"Baut das Bezahlformular und tokenisiert eine Karte. Kann keine Kunden lesen und kein Geld bewegen.",[86,126,127,130,135,141],{},[107,128,129],{},"Geheim",[107,131,132],{},[14,133,134],{},"sk_live_…",[107,136,137],{},[118,138,140],{"type":139},"danger","Niemals",[107,142,143],{},"Uneingeschränkte Rechte für alle APIs von Stripe, über dein ganzes Konto.",[86,145,146,149,154,158],{},[107,147,148],{},"Eingeschränkt",[107,150,151],{},[14,152,153],{},"rk_live_…",[107,155,156],{},[118,157,140],{"type":139},[107,159,160],{},"Nur die Rechte, die du beim Anlegen angekreuzt hast. Trotzdem ein gültiger Zugang in fremder Hand.",[86,162,163,166,175,180],{},[107,164,165],{},"Testschlüssel",[107,167,168,171,172],{},[14,169,170],{},"sk_test_",", ",[14,173,174],{},"pk_test_",[107,176,177],{},[118,178,179],{"type":139},"Nein",[107,181,182],{},"Berührt nur deine Sandbox. Ein kleineres Problem mit derselben Gewohnheit dahinter.",[10,184,185,186,189,190,193],{},"Die Mitte des Präfixes ist das Zweite, was du liest. ",[14,187,188],{},"_test_"," erreicht nichts\naußer deiner Sandbox, ein geleakter Testschlüssel kostet dich also kein Geld; er\nveröffentlicht trotzdem, wie deine Integration gebaut ist, und Stripes Leitlinie\nlautet, jeden geheimen oder eingeschränkten Schlüssel an der falschen Stelle als\nkompromittiert zu behandeln. Neuere Konten können außerdem einen\nOrganisationsschlüssel tragen, der mit ",[14,191,192],{},"sk_org_"," beginnt und über mehr als ein\nStripe-Konto hinweg arbeitet. Für ihn gilt dieselbe Regel, und ein Leck reicht\ndort weiter als über ein einzelnes Konto.",[195,196,198],"callout",{"type":197},"warn",[10,199,200,203],{},[22,201,202],{},"Es geht nichts kaputt, wenn du den falschen einfügst."," Eine Kasse, die mit\ndem geheimen Schlüssel gebaut ist, funktioniert. Zahlungen kommen an, das\nDashboard füllt sich, und die App verhält sich genau so, wie sie sich mit dem\nöffentlichen Schlüssel verhalten hätte, weil der geheime Schlüssel alles darf,\nwas der öffentliche darf, und noch einiges mehr. Es gibt keinen Fehler zu\nbemerken und keine Warnung wegzuklicken, und deshalb ist dieser Befund\nüblicherweise Monate alt, wenn ihn endlich jemand aus einem Scan abliest.",[43,205,207],{"id":206},"was-jemand-mit-einem-geleakten-geheimen-stripe-schlüssel-anstellen-kann","Was jemand mit einem geleakten geheimen Stripe-Schlüssel anstellen kann",[10,209,210],{},"Alles, was du in deinem eigenen Dashboard tun kannst und wofür kein Passwort\nnötig ist.",[10,212,213],{},"Nicht „unbefugten Zugriff erlangen\". Konkret, mit nichts als der Zeichenkette\nund einem Terminal: deine vollständige Kundenliste lesen, mit Namen,\nE-Mail-Adressen, Rechnungsanschriften und den letzten vier Ziffern jeder Karte.\nJede Zahlung nachlesen, die du je erhalten hast, und wofür jeder Kunde bezahlt\nhat. Erstattungen auslösen. Abbuchungen und Bezahllinks in deinem Namen anlegen.\nAbos kündigen.",[215,216],"diagram",{"alt":217,"caption":218,"src":219},"Ein Raster mit vier Zeilen Symbolen an der linken Seite: ein Kartenlesegerät, drei Personen, zwei gestapelte Münzen und ein Stapel Tabellenzeilen. Zwei Spalten sind mit pk_live_ und sk_live_ überschrieben. In der Spalte pk_live_ hat die Zeile mit dem Kartenlesegerät einen grünen Haken, die anderen drei Zeilen haben blasse Kreuze. In der Spalte sk_live_ haben alle vier Zeilen rote Haken.","Beide Schlüssel liegen in derselben Datei. Die zweite Spalte ist das, was das eine zusätzliche Zeichen einkauft, und jeder rote Haken darin ist eine Anfrage, die durchgeht.","\u002Fblog\u002Fstripe-secret-key-in-frontend\u002Fwhat-each-key-can-do-1600x820.png",[10,221,222,223,226],{},"Dann gibt es noch den Gebrauch, der mit dir gar nichts zu tun hat. Dein Konto\nwird zum Ort für ",[22,224,225],{},"Card Testing",", Stripes eigener Begriff dafür, dass eine\nBetrügerin gestohlene Kartennummern durch die Integration von irgendwem schickt,\num die noch gültigen zu finden. Die Karten gehören anderen Leuten. Die\nAblehnungen, die Rückbuchungen und das Erklären gehören dir.",[10,228,229],{},"Was sie meistens nicht können, ist sich selbst bezahlen. Eine Erstattung geht\nzurück auf die Karte, mit der ursprünglich bezahlt wurde, und eine Auszahlung\ngeht auf das hinterlegte Bankkonto, und das ist deins. Das klingt nach einer\nguten Nachricht und ist keine: es bedeutet, dass der Schaden als abfließendes\nGeld, als kopierte Kundendaten und als ein für fremden Betrug benutztes Konto\nankommt, statt als Überweisung, auf die du zeigen und der du nachgehen könntest.",[10,231,232],{},"Nichts davon braucht raffinierte Angreifer. Stripes eigene Dokumentation sagt,\ndass betrügerische Akteure fortlaufend öffentliche Codebestände nach\noffenliegenden Schlüsseln durchsuchen, und diese Scanner müssen nicht wissen,\nwer du bist, um deinen zu finden.",[43,234,236],{"id":235},"wie-du-einen-geheimen-stripe-schlüssel-ohne-zahlungsausfall-austauschst","Wie du einen geheimen Stripe-Schlüssel ohne Zahlungsausfall austauschst",[10,238,239],{},"Erzeuge zuerst den Ersatz, nimm ihn in Betrieb, lass dann den alten ablaufen. In\ndieser Reihenfolge.",[241,242,243,250,256,262,268],"ol",{},[244,245,246,249],"li",{},[22,247,248],{},"Lege im Stripe-Dashboard einen neuen geheimen Schlüssel an."," Lass den alten vorerst in Ruhe; beide funktionieren gleichzeitig, und genau diese Überlappung hält deine Kasse am Laufen.",[244,251,252,255],{},[22,253,254],{},"Leg den neuen Schlüssel dorthin, wo der alte lag",", und das sollte ein Server sein, eine Edge Function oder eine Serverless-Route. Niemals die App, die der Browser herunterlädt.",[244,257,258,261],{},[22,259,260],{},"Deploye, dann nimm eine echte Zahlung an."," Eine gelungene Zahlung ist der einzige Beweis, dass der neue Schlüssel richtig verdrahtet ist.",[244,263,264,267],{},[22,265,266],{},"Lass den alten Schlüssel ablaufen."," Stripe beschreibt das genau so: einen geheimen oder eingeschränkten Schlüssel ablaufen zu lassen hindert ihn an jedem weiteren API-Aufruf.",[244,269,270,273],{},[22,271,272],{},"Lies deine Zahlungshistorie"," für den Zeitraum, in dem der Schlüssel offenlag, und deine Stripe-Mails auf alles, was nicht von dir kam.",[10,275,276],{},"Ist der Schlüssel schon draußen und verlierst du lieber ein paar Zahlungen, als\nihn noch eine Stunde aktiv zu lassen, dann mach es andersherum. Einen Schlüssel\nauszutauschen sperrt ihn unmittelbar und erzeugt einen neuen, und Stripe weist\ndarauf hin, dass mit dem alten Schlüssel angelegte Webhook-Endpunkte aktiv\nbleiben, deine Ereignisverarbeitung überlebt den Notfall also.",[215,278],{"alt":279,"caption":280,"src":281},"Drei nummerierte Felder von links nach rechts. Im ersten Feld ist ein App-Fenster mit einem einzelnen Schlüssel-Chip verbunden. Im zweiten Feld ist ein zweiter Schlüssel-Chip aufgetaucht, das App-Fenster ist jetzt mit diesem verbunden, und der erste Chip ist blass und ohne Linie gezeichnet. Im dritten Feld ist der erste Chip durchgestrichen und verschwunden, und das App-Fenster hängt allein am neuen Chip.","Die Überlappung im mittleren Feld ist der ganze Sinn. Beide Schlüssel sind gleichzeitig aktiv, und das ist es, was den Wechsel ohne Lücke in deiner Kasse möglich macht.","\u002Fblog\u002Fstripe-secret-key-in-frontend\u002Frolling-the-key-1600x620.png",[10,283,284],{},"Es gibt noch einen Schritt, und es ist der, den die meisten zuerst machen: den\nSchlüssel aus dem Code löschen. Mach es, und sei dir im Klaren darüber, was es\nbewirkt. Deine Besucher haben die Datei, die ihn trug, längst heruntergeladen,\ndiese Datei liegt in Browser-Caches, über die du keine Kontrolle hast, und der\nalte Wert steht weiterhin in deiner Versionsgeschichte. Den Schlüssel bei Stripe\nablaufen zu lassen ist das, was die Tür schließt. Die Zeile zu entfernen hält\ndich davon ab, ihn erneut auszuliefern.",[10,286,287],{},"Öffentliche Schlüssel lassen sich übrigens gar nicht ablaufen. Stripe hat die\nFunktion nie gebaut, weil dieser Schlüssel nie geheim sein sollte.",[43,289,291],{"id":290},"was-ein-eingeschränkter-stripe-schlüssel-ist-und-wann-er-die-antwort-ist","Was ein eingeschränkter Stripe-Schlüssel ist und wann er die Antwort ist",[10,293,294],{},"Ein Schlüssel, der für eine Aufgabe zugeschnitten ist statt für jede.",[10,296,297,298,301],{},"Ein eingeschränkter Schlüssel beginnt mit ",[14,299,300],{},"rk_live_"," und trägt nur die Rechte,\ndie du beim Anlegen ankreuzt. Ein Schlüssel, der Rechnungen lesen darf, kann\nkeine Erstattung auslösen. Ein Schlüssel, der Abbuchungen anlegen darf, kann\ndeine Kundenliste nicht lesen. Stripe empfiehlt aus genau diesem Grund den\nUmstieg von geheimen auf eingeschränkte Schlüssel, und das ist guter Rat für den\nCode, der auf deinem Server läuft.",[10,303,304],{},"Es ist kein Weg, einen Schlüssel im Browser vertretbar zu machen. Zwei der\n30.998 Apps in unserem Durchlauf lieferten einen eingeschränkten Schlüssel im\nFrontend aus, und beide kamen mit Note C heraus. Unser Scan bewertet einen\neingeschränkten Schlüssel als hohen Befund, wo ein geheimer ein kritischer ist,\nund ein einziger hoher Befund deckelt die Note bei C. Wer diesen Schlüssel\nfindet, bekommt weiterhin jedes Recht, das du angekreuzt hast, von überall.",[10,306,307],{},"Wo ein eingeschränkter Schlüssel seinen Platz verdient, ist der unbequeme Fall\ndazwischen, und vibe-codierte Apps produzieren eine Menge davon. Ein\nAutomatisierungswerkzeug, das deine Auszahlungen lesen muss. Ein\nAuswertungsskript, das jemand auf Fiverr für dich geschrieben hat. Eine Edge\nFunction, die immer nur eine einzige Art von Abbuchung anlegt. Jedes davon läuft\nauf einem Server und jedes davon braucht einen Bruchteil deines Kontos, also\nbekommt jedes seinen eigenen Schlüssel mit genau diesem Bruchteil angekreuzt,\nund an dem Tag, an dem eines leckt, ziehst du einen Schlüssel zurück, statt\ndeine ganze Integration neu zu verdrahten.",[43,309,311],{"id":310},"wie-du-prüfst-was-deine-app-tatsächlich-ausliefert","Wie du prüfst, was deine App tatsächlich ausliefert",[10,313,314,315,317,318,317,320,322],{},"Fang von Hand an, es kostet nichts und braucht nichts Installiertes. Öffne deine\nlaufende Website, sieh dir den Seitenquelltext an und such darin nach\n",[14,316,16],{},", dann nach ",[14,319,300],{},[14,321,28],{},". Den dritten zu finden\nund die ersten beiden nicht, ist das Ergebnis, das du willst.",[10,324,325,326,328,329,331],{},"Was eine Suche im Seitenquelltext verpasst, ist das JavaScript, das die Seite\ndanach lädt, und bei einer App von Lovable, Bolt oder Replit ist das so gut wie\nalles. Unser kostenloser Scanner öffnet deine App in einem echten Browser,\nwartet, bis die Bundles eintreffen, und liest die. Er ordnet ein, was er findet,\nstatt nur nach schlüsselförmigen Zeichenketten zu suchen, also kommt ",[14,327,28],{},"\nals richtig markiert zurück und ",[14,330,16],{}," als kritischer Befund, und die beiden\nlanden nie auf demselben Stapel.",[215,333],{"alt":334,"caption":335,"src":336},"Das Reeve-Zeichen über einem Raster aus neun umrissenen Symbolen, eines je Prüfung: ein Schlüssel, ein Datenbankzylinder, ein Dokument, ein Vorhängeschloss, eine Kiste mit Deckel, ein Paar Code-Klammern, ein Globus, eine Zertifikatsrosette und ein Kalender.","Schlüssel sind eine von neun rein lesenden Prüfungen. Die übrigen sind der Grund, warum eine Note dir mehr sagt als eine Suche in deinem eigenen Seitenquelltext.","\u002Fblog\u002Fstripe-secret-key-in-frontend\u002Fnine-checks-1600x420.png",[10,338,339],{},"Note, Punktzahl und die Anzahlen stehen in etwa 20 Sekunden auf dem Bildschirm,\nohne Konto. Gibst du eine E-Mail-Adresse an, kommt die ausführliche Liste dazu,\nzusammen mit einer Lösung, die für den von dir benutzten Builder geschrieben ist\nund die du direkt einfügen kannst.",[10,341,342,343,346,347,351,352,41],{},"Drei Dinge, die der Scan nicht tut, und das sind die Gründe, warum du ihn ohne\nSorge auf eine laufende App mit echten Zahlungen richten kannst: er meldet sich\nnie an, er schreibt nie etwas, und er behält nie einen gefundenen Schlüssel. Ein\noffenliegendes Geheimnis wird als maskierter Hinweis der Form ",[14,344,345],{},"sk_live_…a1b2","\ngespeichert, und der echte Wert wird weggeworfen.\n",[37,348,350],{"href":349},"\u002F#scan","Scanne deine App",", oder lies vorher,\n",[37,353,355],{"href":354},"\u002Fsecurity-scanner","worauf jede der neun Prüfungen schaut",[43,357,359],{"id":358},"was-du-jetzt-tun-solltest","Was du jetzt tun solltest",[361,362,363],"key-takeaways",{},[364,365,366,378,381,384,387,390],"ul",{},[244,367,368,369,371,372,374,375,377],{},"Lies vor allem anderen das zweite Zeichen. ",[14,370,28],{}," in deinem Bundle ist richtig und braucht nichts; ",[14,373,16],{}," und ",[14,376,300],{}," brauchen etwas.",[244,379,380],{},"Erzeuge zuerst den Ersatzschlüssel und bestätige eine echte Zahlung damit, lass dann bei Stripe den alten ablaufen. Das Ablaufen ist es, was die Tür schließt.",[244,382,383],{},"Den Schlüssel aus dem Code zu löschen schließt für sich genommen nichts. Die Datei, die ihn trug, ist längst heruntergeladen, zwischengespeichert und in deiner Versionsgeschichte.",[244,385,386],{},"Verleg alles, was den Schlüssel brauchte, auf einen Server: eine Edge Function, eine Serverless-Route, irgendetwas, das nicht der Browser ist.",[244,388,389],{},"Lies deine Zahlungshistorie und deine Kundenliste für den Zeitraum, in dem der Schlüssel aktiv war. Der Austausch stoppt, was als Nächstes passiert, und sagt nichts über das, was schon passiert ist.",[244,391,392],{},"Gib jeder serverseitigen Aufgabe ihren eigenen eingeschränkten Schlüssel mit nur den nötigen Rechten, damit das nächste Leck dich einen Schlüssel kostet und nicht alle.",[10,394,395],{},"Ein Stripe-Schlüssel kommt meistens spät. Die App geht live, sie läuft eine\nWeile, und dann fügst du eines Tages die Kasse hinzu, und genau dieses Deploy\nlegt zum ersten Mal einen Zahlungszugang ins Bundle. Der Scan, den du beim Start\nlaufen ließest, war eine Momentaufnahme einer App, die noch kein Geld annehmen\nkonnte.",[10,397,398,402],{},[37,399,401],{"href":400},"\u002Fpricing","Reeve Monitor"," ist für diese Lücke gebaut. Es lässt alle neun\nPrüfungen jede Stunde über bis zu drei Apps laufen, prüft die Erreichbarkeit\nalle 60 Sekunden, sagt dir an dem Tag Bescheid, an dem sich ein Ergebnis ändert,\nstatt darauf zu warten, dass du nachsiehst, und schickt einen monatlichen\nBericht in verständlicher Sprache. Ein Schlüssel, der mit einem Deploy am\nDonnerstag ins Bundle gerät, ist in dem Scan dieser Stunde. Es kostet €12 im\nMonat laut Liste, mit sieben kostenlosen Tagen, bevor es abbucht, und die\nPreisseite liegt manchmal unter der Zahl hier und nie darüber.",[10,404,405,406,410,411,415,416,420,421,41],{},"Wenn du das lieber als Liste durchgehst: die\n",[37,407,409],{"href":408},"\u002Fchecklist","10-Minuten-Sicherheitscheckliste"," deckt das hier zusammen mit den\nanderen Dingen ab, die es in einer frisch gestarteten App zu schließen lohnt.\nFür die größere Frage, welche Schlüssel überhaupt in einen Browser gehören,\nhaben wir\n",[37,412,414],{"href":413},"\u002Fblog\u002Fwhich-api-keys-are-safe-in-your-frontend","eine Anleitung zum Unterscheiden öffentlicher und geheimer Schlüssel",",\n",[37,417,419],{"href":418},"\u002Fblog\u002Fopenai-api-key-exposed-in-frontend","dieselbe Frage für einen OpenAI-Schlüssel",",\nund ",[37,422,424],{"href":423},"\u002Fblog\u002Fwhat-secrets-leak-from-vibe-coded-apps","eine Bestandsaufnahme dessen, was 30.998 Apps tatsächlich ausgeliefert haben",{"title":426,"searchDepth":427,"depth":427,"links":428},"",3,[429,431,432,433,434,435,436],{"id":45,"depth":430,"text":46},2,{"id":74,"depth":430,"text":75},{"id":206,"depth":430,"text":207},{"id":235,"depth":430,"text":236},{"id":290,"depth":430,"text":291},{"id":310,"depth":430,"text":311},{"id":358,"depth":430,"text":359},"Sicherheitsgrundlagen","\u002Fblog\u002Fstripe-secret-key-in-frontend\u002Fcover-1200x630.png","Eine Ladenkasse mit offen stehender Geldschublade, und ein Schlüssel steckt noch im Schloss an der Vorderseite des Geräts.","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.",false,"md",[444,447,450,453,456,459],{"q":445,"a":446},"Ist mein öffentlicher Stripe-Schlüssel im Frontend unbedenklich?","Ja. Ein Schlüssel, der mit pk_live_ beginnt, gehört in die Seite, und Stripe sagt das in seiner eigenen Dokumentation: öffentliche Schlüssel dürfen im Frontend-Code offenliegen. Er baut das Bezahlformular und tokenisiert eine Karte. Er kann deine Kunden nicht lesen, kein Geld bewegen und nichts erstatten. Wenn ein Scanner oder eine Bekannte dir sagt, ein Stripe-Schlüssel liege offen, lies zuerst das zweite Zeichen, denn ein pk_live_-Schlüssel in deinem Bundle ist deine Integration so, wie Stripe sie entworfen hat.",{"q":448,"a":449},"Was kann jemand mit einem geleakten geheimen Stripe-Schlüssel anstellen?","Alles, was du in deinem eigenen Dashboard tun kannst und wofür kein Passwort nötig ist. Er kann deine vollständige Kundenliste mit Namen, E-Mail-Adressen, Rechnungsanschriften und den letzten vier Ziffern jeder Karte lesen, jede Zahlung nachlesen, die du je erhalten hast, Erstattungen auslösen, bis dein Guthaben leer ist, Abbuchungen und Bezahllinks anlegen und gestohlene Kartennummern durch dein Konto laufen lassen, um die noch gültigen zu finden. Das Letzte nennt Stripe Card Testing, und bei dir kommt es als Rückbuchungen und Ablehnungen auf einem Konto an, das du für ruhig gehalten hast.",{"q":451,"a":452},"Wie tausche ich einen Stripe-Schlüssel ohne Ausfall aus?","Erzeuge zuerst den Ersatz. Lege im Stripe-Dashboard einen neuen geheimen Schlüssel an, leg ihn dorthin, wo der alte auf deinem Server lag, deploye und bestätige eine echte Zahlung über den neuen Schlüssel. Erst danach lässt du den alten ablaufen, was ihn an jedem weiteren API-Aufruf hindert. Ist der Schlüssel schon öffentlich und verlierst du lieber ein paar Zahlungen, als ihn aktiv zu lassen, dann tausche ihn stattdessen sofort: das Austauschen sperrt den Schlüssel unmittelbar und erzeugt einen neuen, und Stripe weist darauf hin, dass mit dem alten Schlüssel angelegte Webhook-Endpunkte aktiv bleiben.",{"q":454,"a":455},"Was ist ein eingeschränkter Stripe-Schlüssel?","Ein Schlüssel, den du für eine einzige Aufgabe zuschneidest. Ein eingeschränkter Schlüssel beginnt mit rk_live_ und trägt nur die Rechte, die du beim Anlegen ankreuzt, sodass ein Schlüssel, der Rechnungen lesen darf, keine Erstattung auslösen kann. Stripe empfiehlt aus genau diesem Grund den Umstieg von geheimen auf eingeschränkte Schlüssel. Lies das als Rat für den Code auf deinem Server, nicht als Weg, einen Schlüssel im Browser vertretbar zu machen: ein eingeschränkter Schlüssel in deinem Bundle bleibt eine Zugangsberechtigung, die eine Fremde benutzen kann, und unser Scan bewertet ihn als hohen Befund.",{"q":457,"a":458},"Sagt Stripe mir Bescheid, wenn mein Schlüssel leakt?","Manchmal, und verlassen kannst du dich nicht darauf. Stripe sagt, es durchsuche das Internet aktiv nach geleakten API-Schlüsseln, unter anderem mit dem GitHub Token Scanner, und benachrichtige dich womöglich oder deaktiviere einen gefundenen Schlüssel. Die eigene Best-Practices-Seite ergänzt, dass eine Erkennung nicht garantiert ist. Am besten funktioniert diese Suche bei öffentlichen Code-Repositories, und ein Schlüssel, der ins JavaScript deiner eigenen Domain kompiliert wurde, ist kein Repository. Behandle jeden Schlüssel, den du irgendwo gesehen hast, wo er nicht hingehört, als kompromittiert, ob Stripe sich meldet oder nicht.",{"q":460,"a":461},"Ist ein Testschlüssel (sk_test_) im Frontend gefährlich?","Er ist ein deutlich kleineres Problem als ein aktiver und trotzdem eine Sache, die du schließen solltest. Ein Testschlüssel berührt nur deine Sandbox, niemand kann damit also dein Geld nehmen. Was er herausgibt, ist eine brauchbare Karte deiner Integration, und meistens bedeutet er, dass dieselbe Kopieren-und-Einfügen-Gewohnheit nur ein Deploy davon entfernt ist, den aktiven Schlüssel auszuliefern. Stripe behandelt jeden geheimen oder eingeschränkten Schlüssel, der an der falschen Stelle auftaucht, als kompromittiert. Lass ihn ablaufen und verleg den Aufruf auf einen Server.","\u002Fblog\u002Fstripe-secret-key-in-frontend\u002Fcard-800x500.png",[464,465,466,467,468,469,470],"stripe geheimer schlüssel offengelegt","sk_live schlüssel im frontend","stripe schlüssel geleakt was tun","stripe eingeschränkter schlüssel","ist mein stripe publishable key sicher","stripe api-schlüssel austauschen","stripe schlüssel im javascript-bundle",{},true,"Geheimer Stripe-Schlüssel im Frontend sichtbar?","\u002Fblog\u002Fstripe-secret-key-in-frontend","2026-09-19",{"title":5,"description":440},"blog\u002Fstripe-secret-key-in-frontend",[479,480,481,482],"Ein geheimer Stripe-Schlüssel im Frontend ist das Leck, das deinem Konto berechnet wird: Erstattungen, neue Abbuchungen und jeder Kundendatensatz, den du hast.","pk_live_ gehört in deine App und gehörte immer dorthin. sk_live_ unterscheidet sich um ein Zeichen und hat uneingeschränkte Rechte über dein ganzes Stripe-Konto.","Erzeuge zuerst den Ersatzschlüssel, nimm ihn in Betrieb, lass dann den alten ablaufen. Die Zeile aus dem Code zu löschen holt nichts zurück, was schon heruntergeladen wurde.","Wir fanden einen aktiven geheimen Stripe-Schlüssel in 3 von 30.998 gescannten Apps. Alle drei kamen mit Note D heraus.","DW-gdwsP5JNDWmuuLWw2_EuINcgYpUYSyBeeNKzMvdE",[485,492,498,504,510,511,517,523,529,535,541,547,553,559,565,571,577,583,589,595,601,606,611,617,623,629,635,641,647,653,659,665,671,677,683,689,694,700,706,712,717,723],{"path":486,"title":487,"description":488,"published":489,"category":490,"image":491,"draft":441},"\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":493,"title":494,"description":495,"published":496,"category":437,"image":497,"draft":441},"\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":499,"title":500,"description":501,"published":502,"category":437,"image":503,"draft":441},"\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":505,"title":506,"description":507,"published":508,"category":437,"image":509,"draft":441},"\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":474,"title":5,"description":440,"published":475,"category":437,"image":462,"draft":441},{"path":512,"title":513,"description":514,"published":515,"category":437,"image":516,"draft":441},"\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":518,"title":519,"description":520,"published":521,"category":437,"image":522,"draft":441},"\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":524,"title":525,"description":526,"published":527,"category":437,"image":528,"draft":441},"\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":530,"title":531,"description":532,"published":533,"category":437,"image":534,"draft":441},"\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":536,"title":537,"description":538,"published":539,"category":490,"image":540,"draft":441},"\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":542,"title":543,"description":544,"published":545,"category":490,"image":546,"draft":441},"\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":548,"title":549,"description":550,"published":551,"category":490,"image":552,"draft":441},"\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":554,"title":555,"description":556,"published":557,"category":437,"image":558,"draft":441},"\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":560,"title":561,"description":562,"published":563,"category":437,"image":564,"draft":441},"\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":566,"title":567,"description":568,"published":569,"category":437,"image":570,"draft":441},"\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":572,"title":573,"description":574,"published":575,"category":437,"image":576,"draft":441},"\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":578,"title":579,"description":580,"published":581,"category":437,"image":582,"draft":441},"\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":584,"title":585,"description":586,"published":587,"category":437,"image":588,"draft":441},"\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":590,"title":591,"description":592,"published":593,"category":437,"image":594,"draft":441},"\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":596,"title":597,"description":598,"published":599,"category":437,"image":600,"draft":441},"\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":418,"title":602,"description":603,"published":604,"category":437,"image":605,"draft":441},"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":423,"title":607,"description":608,"published":609,"category":437,"image":610,"draft":441},"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":612,"title":613,"description":614,"published":615,"category":490,"image":616,"draft":441},"\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":618,"title":619,"description":620,"published":621,"category":437,"image":622,"draft":441},"\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":624,"title":625,"description":626,"published":627,"category":490,"image":628,"draft":441},"\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":630,"title":631,"description":632,"published":633,"category":437,"image":634,"draft":441},"\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":636,"title":637,"description":638,"published":639,"category":437,"image":640,"draft":441},"\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":642,"title":643,"description":644,"published":645,"category":437,"image":646,"draft":441},"\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":648,"title":649,"description":650,"published":651,"category":437,"image":652,"draft":441},"\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":654,"title":655,"description":656,"published":657,"category":490,"image":658,"draft":441},"\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":660,"title":661,"description":662,"published":663,"category":490,"image":664,"draft":441},"\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":666,"title":667,"description":668,"published":669,"category":437,"image":670,"draft":441},"\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":672,"title":673,"description":674,"published":675,"category":437,"image":676,"draft":441},"\u002Fblog\u002Fgoogle-api-key-exposed-in-frontend","Ist ein Google-API-Schlüssel im Frontend ein Problem?","Ein Google-API-Schlüssel im Frontend ist der Fund unseres Scanners Nummer eins, und meistens unbedenklich. Eine kostenlose Einstellung entscheidet darüber.","2026-08-22","\u002Fblog\u002Fgoogle-api-key-exposed-in-frontend\u002Fcard-800x500.png",{"path":678,"title":679,"description":680,"published":681,"category":490,"image":682,"draft":441},"\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":684,"title":685,"description":686,"published":687,"category":437,"image":688,"draft":441},"\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":690,"title":691,"description":692,"published":687,"category":437,"image":693,"draft":441},"\u002Fblog\u002Fsource-maps-exposed-in-production","Source-Maps öffentlich: deine App veröffentlicht ihren Quellcode","Eine öffentliche Source-Map lässt jeden den Originalcode deiner App lesen, Kommentare inklusive. Der 30-Sekunden-Check, und was wirklich zählt.","\u002Fblog\u002Fsource-maps-exposed-in-production\u002Fcard-800x500.png",{"path":695,"title":696,"description":697,"published":698,"category":437,"image":699,"draft":441},"\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":701,"title":702,"description":703,"published":704,"category":490,"image":705,"draft":441},"\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":707,"title":708,"description":709,"published":710,"category":437,"image":711,"draft":441},"\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":713,"title":714,"description":715,"published":710,"category":490,"image":716,"draft":441},"\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":718,"title":719,"description":720,"published":721,"category":490,"image":722,"draft":441},"\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":413,"title":724,"description":725,"published":721,"category":437,"image":726,"draft":441},"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]