Verifizierte Beweis-Karte
Direkt beobachtet · hohe Konfidenz · Evidenz redigiert
Beispiel-Report
Das hier ist ein erfundener Bericht einer Domain, die es nicht gibt — aber die Befunde sind die, die wir in echten Scans am häufigsten finden. Vollständig aufgeklappt, mit Fundstelle, Beweis und fertiger Anleitung. Genau das bekommst du nach der Freischaltung für deine eigene Domain.
Erfundene Daten. Die Domain beispiel-app.de existiert nicht — ein Beispielreport über eine echte fremde Seite wäre die Veröffentlichung ihrer Schwachstellen.
Sicherheitsbericht für
Geprüft am 1. August 2026 · Wird automatisch gelöscht am 30. Oktober 2026
Sicherheitsnote
Dringend beheben
2
kritisch
1
hoch
2
mittel
1
gering
1
Hinweis
Siegel-Vorschau · Beispiel
Nicht aktiv – erfundener Beispielreport
Direkt beobachtet · hohe Konfidenz · Evidenz redigiert
Sicherheitsziel, Anforderungen, Negativtest und Nachtest
2 behoben · 1 unverändert · 0 Regressionen
Deep Scan aktuell · Code-Scan fehlt · ready with limits
Schutzobjekt session:cookie stimmt auf beiden Ebenen überein
Beispiel: letzter Lauf erfolgreich · nächste Prüfung in 6 Tagen
Ein OpenAI-Schlüssel steht im Klartext in deinem Frontend-Bundle. Jeder Besucher kann ihn auslesen; automatisierte Bots durchsuchen öffentliche Bundles gezielt danach. Der Schlüssel gilt als kompromittiert, sobald er einmal ausgeliefert wurde — auch wenn du das Bundle jetzt austauschst.
Widerrufe den Schlüssel sofort unter platform.openai.com/api-keys — nicht später, der alte ist unwiederbringlich öffentlich. Danach: Der Aufruf gehört auf den Server, nicht in den Browser. Lege eine eigene Route an (z. B. eine Edge Function oder /api/chat), die den Schlüssel serverseitig hält und die Anfrage weiterreicht. Das Frontend ruft nur noch deine eigene Route auf. `dangerouslyAllowBrowser: true` ist der Hinweis des SDK selbst, dass dieser Weg nicht vorgesehen ist.
Wir konnten die Tabelle mit dem öffentlichen anon-Schlüssel aus deinem Frontend abfragen und haben Datensätze zurückbekommen. Das heißt: Jeder, der deine Seite öffnet, kann die vollständige Tabelle herunterladen — einschließlich der Zeilen anderer Nutzer.
In der Supabase-Konsole unter Authentication → Policies für die Tabelle `profiles`: ```sql ALTER TABLE profiles ENABLE ROW LEVEL SECURITY; CREATE POLICY "Eigenes Profil lesen" ON profiles FOR SELECT USING (auth.uid() = id); CREATE POLICY "Eigenes Profil ändern" ON profiles FOR UPDATE USING (auth.uid() = id); ``` Wichtig: `ENABLE ROW LEVEL SECURITY` allein sperrt alles; ohne Policy kommt auch die eigene App nicht mehr an die Daten. Beides gehört zusammen. Danach erneut prüfen — dieser Scan ist der Nachweis, dass es gewirkt hat.
Deine Source Maps liegen neben dem Bundle und sind ohne Anmeldung abrufbar. Damit lässt sich dein ungebauter Originalcode rekonstruieren — mit Dateinamen, Kommentaren und der Ordnerstruktur deines Projekts.
In `vite.config.ts`:
```ts
export default defineConfig({
build: { sourcemap: false },
});
```
Bei Next.js: `productionBrowserSourceMaps: false` (das ist bereits der Standard — prüfe, ob es irgendwo auf `true` gesetzt wurde).
Danach neu bauen und veröffentlichen. Vorhandene `.map`-Dateien auf dem Server löschen: Ein neuer Build entfernt sie nicht zwangsläufig.Ohne Content-Security-Policy kann eingeschleuster Code in deiner Seite beliebige Skripte nachladen. Das ist der Unterschied zwischen einer harmlosen und einer ausgenutzten XSS-Lücke.
Startpunkt für eine typische SPA: ``` Content-Security-Policy: default-src 'self'; script-src 'self'; object-src 'none'; base-uri 'self'; frame-ancestors 'none' ``` Rolle sie zuerst als `Content-Security-Policy-Report-Only` aus und sieh in der Browser-Konsole nach, was blockiert würde. Erst wenn nichts Wichtiges mehr auftaucht, auf den scharfen Header umstellen.
Ohne Referrer-Policy schickt der Browser die vollständige Adresse deiner Seite an fremde Server mit, sobald jemand einen Link nach außen anklickt — samt Parametern.
Header ergänzen: ``` Referrer-Policy: strict-origin-when-cross-origin ``` Das ist der Wert, den moderne Browser ohnehin als Standard verwenden — ihn ausdrücklich zu setzen macht das Verhalten unabhängig vom Browser des Besuchers.
Ohne DMARC kann jeder E-Mails mit deiner Absenderadresse verschicken. Für Phishing gegen deine eigenen Nutzer ist das die halbe Miete — und es trifft ausgerechnet die Leute, die dir vertrauen.
Als TXT-Eintrag anlegen, Name `_dmarc`: ``` v=DMARC1; p=none; rua=mailto:dmarc@beispiel-app.de ``` Beginne mit `p=none` — das verwirft noch nichts, sammelt aber Berichte darüber, wer in deinem Namen versendet. Wenn die Berichte sauber aussehen, auf `p=quarantine` und später `p=reject` hochstellen. Zuerst mit `p=reject` zu starten, kann eigene Mails aus Newslettern oder Buchhaltungssystemen unzustellbar machen.
Erkannt an der Bundle-Struktur und den aufgerufenen Adressen. Diese Angabe ist kein Mangel — sie steuert, welche Tiefenprüfungen für deine App überhaupt sinnvoll sind.
Nichts zu tun. Wir nennen es, weil daran hängt, welche Prüfungen wir für dich ausführen — und weil du wissen sollst, was von außen über deinen Aufbau erkennbar ist.
Der Scan ist kostenlos und dauert etwa zwanzig Sekunden. Du siehst sofort, wie viele Befunde es gibt und wie schwer sie wiegen.
Eigene App kostenlos scannen