Sicherheitsgrundlagen
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.

Kurz gesagt
- Ein Vibe-Coding-Security-Scanner liest das, was die Browser deiner Besucher ohnehin herunterladen: dein Bundle, deine Header, dein Zertifikat und die Antworten, die deine Datenbank einem Fremden gibt.
- Das deckt genau die Klasse von Fehlern ab, die beim Bauen mit KI am häufigsten passieren. Es deckt nichts ab, was auf deinem Server passiert.
- Ein sauberes Ergebnis heißt, dass jede Frage, die der Scan von außen stellen konnte, sauber zurückkam. Nimm es als eine Sorge weniger.
Du gibst die Adresse deiner App bei einem Scanner ein, wartest etwa zwanzig Sekunden, und ein Buchstabe kommt zurück. A, vielleicht C. Dann kommt die Frage, auf die es wirklich ankommt: Heißt das jetzt, dass meine App in Ordnung ist?
Hier ist der Teil, den die meisten Werkzeuge in dieser Kategorie dich selbst herausfinden lassen. Ein Vibe-Coding-Security-Scanner liest deine App von der Straße aus. Er sieht, was der Browser jedes Besuchers sieht, und das ist erstaunlich viel, und an deiner Haustür ist Schluss. Was dein Server im Verborgenen tut, bleibt auch vor dem Scanner verborgen.
Zu wissen, wo diese Linie verläuft, ist das, was einen Scan lohnend macht. Ein A sagt dir, dass die Türen zur Straße hin zu waren, als wir nachgesehen haben, und es sagt überhaupt nichts über das Zimmer dahinter.
Was ist ein Vibe-Coding-Security-Scanner?
Ein Werkzeug, das deine laufende App so lädt wie ein Besucher, und dann liest, was zurückkam.
Du gibst ihm eine URL. Er fragt nicht nach deinem Quellcode, deinem Repository, deinem Datenbankpasswort oder einem Konto bei dem Builder, den du benutzt hast. Er holt deine Seite, lässt das JavaScript laufen, damit er den Code sieht, den deine App tatsächlich ausliefert, liest die Header, die mit der Antwort kamen, sieht sich dein Zertifikat an und stellt deiner Datenbank und deinem Dateispeicher ein paar Fragen, die jeder Fremde stellen könnte.
Dann schreibt er auf, was geantwortet hat. Das ist die ganze Form der Sache, und deshalb dauert das zwanzig Sekunden und keine Woche.
Diese Kategorie gibt es, weil Apps aus Lovable, Bolt, v0, Cursor, Replit, Windsurf und Base44 an derselben kleinen Zahl von Stellen schiefgehen, und fast alle diese Stellen sind von außen sichtbar. Ein geheimer Key im Bundle. Eine Tabelle, die einem Fremden antwortet. Ein Storage-Bucket, der seinen eigenen Inhalt auflistet. Niemand braucht deinen Quellcode, um eines davon zu finden, denn deine App reicht sie jedem Besucher von sich aus.
Was ein Scan tatsächlich liest
Fünf Oberflächen, und vier davon laden deine eigenen Besucher herunter, ohne es zu merken.
| Was er liest | Woher das kommt | Was das findet |
|---|---|---|
| Dein JavaScript-Bundle | Die Dateien, die ein Browser lädt, um deine App auszuführen | Keys im Browser, die API-Pfade, die deine App aufruft, Tabellennamen, die sie benutzt |
| Deine Response-Header | Kommen mit jeder Seite mit, die dein Hoster ausliefert | Fehlende Browser-Schutzmechanismen, eine Regel, die Anfragen von jeder Website beantwortet |
| Die Antworten der Datenbank | Dieselbe Projekt-API, die deine App selbst aufruft | Eine Tabelle, die Zeilen an eine Anfrage ohne Anmeldung herausgibt |
| Deine Storage-Buckets | Dieselbe öffentliche Storage-API, über die deine App lädt | Ein Bucket, der einem Fremden seine Dateien auflistet |
| Zertifikat und Domain | Der TLS-Handshake und der öffentliche Registry-Eintrag | Ein Zertifikat kurz vor Ablauf, eine Domain kurz vor dem Verfall |
Das Bundle ist das, was die Leute überrascht. Der Code deiner App muss im Browser ankommen, bevor er dort laufen kann, also kommt auch jeder Key darin an, zusammen mit den API-Pfaden, die er aufruft, und oft den Namen der Tabellen, die er liest. Ein Scanner drückt dasselbe F12, das ein neugieriger Besucher drücken würde. Er ist nur schneller, und er liest jede Datei statt der ersten.
Die Frage an die Datenbank ist die, bei der alle mit einem Eingriff rechnen, und sie ist das Zahmste auf der Liste. Um herauszufinden, ob eine Tabelle für Fremde lesbar ist, fragt unserer die API nach einer Anzahl der Zeilen und liest die Zahl aus einem Response-Header. Eine Zahl über null heißt, dass diese Zeilen erreichbar sind. Es wird nie eine Zeile geholt, und der Key, mit dem er fragt, ist der veröffentlichbare, der ohnehin schon in deinem Bundle liegt und dort auch hingehört.
Die vier Dinge, die ein URL-Scan nicht sehen kann
Alles, was auf deinem Server passiert, denn nichts davon wird jemals an einen Browser geschickt.
Deinen Servercode. Edge Functions, API-Routen, Datenbankfunktionen, alles, was in Supabase oder bei deinem Hoster läuft. Ein Scanner kann einen Endpunkt aufrufen und lesen, was zurückkommt. Den Code, der das erzeugt hat, kann er nicht lesen, also bleibt ein Fehler, der nur bei bestimmten Eingaben auftritt, unsichtbar.
Deine Umgebungsvariablen. Die Keys, die du auf dem Server gelassen hast, und genau dorthin gehören sie. Ein Scan kann dir sagen, dass er in deinem Bundle kein Geheimnis gefunden hat. Er kann nicht bestätigen, dass das Geheimnis richtig abgelegt ist, denn er sieht den Ort nie, an dem du es abgelegt hast.
Deine Versionsgeschichte. Ein Key, den du im März eingecheckt und im April entfernt hast, ist aus deiner App verschwunden und liegt weiter in deinem Repository. Wer dieses Repository sehen kann, kann ihn weiter lesen, und kein noch so gründlicher Blick auf deine laufende Website fördert ihn zutage.
Die Logik deiner App. Ob ein angemeldeter Nutzer die Bestellung eines anderen öffnen kann, indem er eine Zahl in der Adresse ändert. Ob ein Formular einen Preis akzeptiert, den der Browser ihm geschickt hat. Das sind Entscheidungen deiner App darüber, was erlaubt ist, und um sie zu erwischen, muss man sich anmelden und Dinge ausprobieren, und das ist ein Penetrationstest.
Es gibt eine fünfte Grenze, die uns gehört und nicht der Kategorie, und es lohnt sich, sie zu kennen, bevor du einen unserer Berichte liest. Supabase liefert die Liste der Tabellen eines Projekts nicht mehr an einen veröffentlichbaren Key aus, also hat ein Scanner keine Möglichkeit mehr zu fragen, wie deine Tabellen heißen. Unserer arbeitet stattdessen mit drei Quellen: dem Projektindex bei älteren Projekten, wo er noch antwortet, den Tabellennamen, die er in deinem eigenen Bundle findet, und einer Liste von sechsundzwanzig Namen, die in vibe-coded Apps häufig vorkommen. Eine offene Tabelle mit einem ungewöhnlichen Namen, der in deinem Frontend-Code nie auftaucht, erreichen wir nicht. Supabases eigener Advisor erreicht sie, und das ist der Vergleich zwei Abschnitte weiter unten.
Heißt ein sauberer Scan, dass meine App sicher ist?
Nein. Es heißt, dass jede Frage, die der Scan von außen stellen konnte, sauber zurückkam, und das ist ein kleinerer Satz, als er klingt.
Ein Teil des Grundes sind die vier blinden Flecken oben. Der andere Teil ist, dass eine Prüfung auf drei Arten enden kann und nur eine davon ein Bestehen ist. Eine Prüfung findet etwas. Eine Prüfung fragt und bekommt ein klares Nein. Oder eine Prüfung bekommt überhaupt keine Antwort, weil die Anfrage abgelaufen ist, der Host sie abgelehnt hat oder die Seite nie fertig geladen wurde.
Dieser dritte Ausgang entscheidet darüber, ob man einem Bericht trauen kann, und er ist der, den man am leichtesten stillschweigend zu einem Haken aufrundet. Unserer schreibt "Konnte nicht geprüft werden" in die Zeile und lässt deine Note in Ruhe. Ein falscher Haken wäre das Schädlichste, was dieser Scanner auf einen Bildschirm bringen könnte, denn du würdest danach handeln.
Dieselbe Ehrlichkeit ist es, die unsere eigenen veröffentlichten Zahlen weniger alarmierend macht, als sie zunächst aussehen. Zwischen dem 12. und 14. August 2026 haben wir diese Prüfungen über 30.998 laufende vibe-coded Apps laufen lassen, und 99 % davon kamen mit mindestens einem Befund zurück. Fast alles davon ist eine einzige Zeile: Browser-Sicherheitsheader, die die Hosting-Plattform nie setzt und die die meisten Besitzer auf einer Builder-Subdomain nicht selbst einschalten können. Sie zu zählen ist richtig. 99 % als "fast jede App ist in Gefahr" zu lesen, ist es nicht.
URL-Scan, Repo-Scan oder Supabases eigener Advisor?
Sie lesen drei verschiedene Dinge, die nützliche Frage ist also, welches davon das Problem sehen kann, das du hast.
| Art | Was es liest | Was es von dir braucht | Wo es blind ist |
|---|---|---|---|
| URL-Scanner | Deine laufende App, von außen | Eine URL | Alles, was dein Server für sich behält |
| Repository-Scanner | Deinen Quellcode und seine Geschichte | Zugang zu deinem Repo | Ob dieser Code ausgeliefert ist und was deine Regeln im Betrieb tun |
| Supabase Security Advisor | Die Konfiguration dieses Projekts | Dein Supabase-Konto | Alles außerhalb des Projekts: Bundle, Header, andere Anbieter |
Sie überschneiden sich weit weniger, als die Namen vermuten lassen. Supabases Advisor durchsucht dein Projekt und meldet Konfigurationsprobleme, darunter Tabellen mit falsch eingerichteter Row Level Security. Ein URL-Scan liest die Folge davon, nämlich ob diese Zeilen gerade jetzt bei Fremden ankommen. Die beiden gehen häufiger auseinander, als man erwarten würde, denn die Einstellung einzuschalten heißt noch nicht, geschützt zu sein.
Ein Repository-Scanner ist der einzige der drei, der den Key finden kann, den du letzten Monat gelöscht hast. Er ist auch der einzige, der dir nicht sagen kann, ob der Code, den er gerade gelesen hat, der Code ist, den du ausgeliefert hast.
Wie du die Note liest
Der Buchstabe wird vom schlimmsten einzelnen Befund im Bericht gedeckelt, eine gute Punktzahl rettet also nie einen ernsten.
Jeder Scan startet bei 100. Ein kritischer Befund kostet 40 Punkte, ein hoher 15, ein mittlerer 5, ein niedriger 1. Dann sitzt eine Obergrenze über der Rechnung: Ein kritischer Befund deckelt die Note bei D, zwei deckeln sie bei F, und ein einzelner hoher Befund deckelt sie bei C. Eine ansonsten aufgeräumte App mit einer einzigen offenen Tabelle kommt als D heraus, und das ist so gewollt.
Was du richtig gemacht hast, steht im Bericht und kostet dich nichts. Dein veröffentlichbarer Supabase-Key im Bundle wird als korrekt aufgeführt, denn dafür ist er da, und ihn rot anzumalen ist die Art, wie ein Werkzeug dir beibringt, Rot zu ignorieren.
Was du mit einem Scan-Ergebnis machst
Was zu tun ist
- Lies zuerst die Zeilen, in denen "Konnte nicht geprüft werden" steht. Das sind die offenen Fragen, und sie sind kein Bestehen.
- Arbeite nach Schweregrad. Ein kritischer Befund heißt, dass heute jemand an deine Daten kommt; ein fehlender Header ist eine Einstellung, die niemand eingeschaltet hat.
- Kümmere dich getrennt um das Innere: geheime Keys auf dem Server lassen, die eigene Versionsgeschichte nach gelöschten Keys durchsuchen und dich als Testnutzer anmelden, um zu sehen, woran der herankommt.
- Scanne nach jedem Deploy erneut, und immer wenn jemand eine Datenbankregel anfasst. Das ist die Änderung, von der dir nichts erzählt.
- Wenn deine App Zahlungen abwickelt oder Gesundheitsdaten hält, buche irgendwann einen Penetrationstest. Eine automatische externe Prüfung ist kein Audit, und keine Abwesenheit von Befunden ist eine Garantie.
Unser eigener kostenloser Website-Security-Scanner führt neun rein lesende Prüfungen auf jeder laufenden URL aus, in etwa zwanzig Sekunden, ohne Konto. Er liest, er schreibt nie, und er meldet sich nie an.
Wenn du das lieber zuerst von Hand durchgehen willst: Die 10-Minuten-Sicherheitscheckliste deckt dasselbe Feld in der Reihenfolge ab, in der es sich lohnt.
FAQ
Was ist ein Vibe-Coding-Security-Scanner?
Ein Werkzeug, das deine laufende App so lädt wie ein Besucher und liest, was zurückkommt: das JavaScript, das deine App an den Browser ausliefert, die Header, die dein Hoster mitschickt, das Zertifikat und die Antworten, die deine Datenbank und dein Dateispeicher einer Anfrage von einem Fremden geben. Er braucht eine URL und sonst nichts. Er berichtet, was er auf der öffentlichen Oberfläche deiner App gefunden hat, und genau dort gehen mit KI gebaute Apps am häufigsten schief.
Ist es sicher, meine eigene App zu scannen?
Ja, solange der Scanner nur liest. Unserer stellt dieselbe Art von Anfragen wie ein gewöhnlicher Besucher, meldet sich nie an, schreibt, erstellt oder löscht nirgends etwas und lädt nie die Daten deiner Nutzer herunter. Um zu testen, ob eine Datenbanktabelle lesbar ist, fragt er die Anzahl der Zeilen ab und liest die Zahl, ohne eine einzige Zeile zu holen. Der Verkehr sind eine Handvoll Anfragen, also weniger als eine Person, die eine Minute auf deiner Website unterwegs ist.
Braucht ein Scan meinen Quellcode oder mein Datenbankpasswort?
Nein. Ein URL-Scanner arbeitet vollständig von außen, es gibt also nichts zu verbinden und keine Zugangsdaten zu übergeben. Das ist zugleich seine Grenze: Er sieht nur, was deine App ohnehin jedem Besucher zeigt. Ein Werkzeug, das dein Repository liest oder sich mit deinem Datenbankkonto verbindet, sieht andere Dinge, und der Artikel oben stellt die drei nebeneinander.
Funktioniert das mit Lovable, Bolt, Cursor, Replit, v0, Windsurf und Base44?
Ja, und mit allem anderen, das eine Website ins Netz stellt, denn der Scan sieht sich an, was live ist, und nicht, was es geschrieben hat. Der Builder zählt für die Behebung und nicht für die Prüfung: Die Reparatur einer offenen Tabelle ist in Lovable eine andere Klickfolge als in Replit, und deshalb nennt der Fix-Text deinen Builder.
Was prüft ein Security-Scanner nicht?
Alles, was auf deinem Server bleibt. Deinen Servercode und deine Datenbankfunktionen, die Umgebungsvariablen, die du aus dem Browser herausgehalten hast, den Key, den du eingecheckt und später aus dem Repository gelöscht hast, und Fehler in deiner eigenen Logik, etwa dass ein angemeldeter Nutzer die Bestellung eines anderen laden kann, indem er eine Zahl in der Adresse ändert. Um die letzte Gruppe zu finden, muss man sich anmelden und Dinge ausprobieren, und das ist ein Penetrationstest und kein Scan.
Ist ein Vibe-Coding-Security-Scanner kostenlos?
Unserer ist es, jedenfalls der Scan selbst: Du bekommst Note, Punktzahl und Anzahl der Befunde in etwa 20 Sekunden auf den Bildschirm, ohne Konto, und die ausführlichen Befunde samt Behebung, nachdem du eine E-Mail-Adresse angegeben hast. Bezahlte Pläne gibt es für das, was ein einmaliger Scan nicht kann, nämlich zu merken, wenn sich nächsten Monat etwas ändert. Eine Note stimmt in der Sekunde, in der du sie nimmst.