Wie diese Prüfung funktioniert
Scanaris fordert /.well-known/security.txt an, den Standardort aus RFC 9116, und wenn es dort nichts findet, probiert es /security.txt im Root, den alten Ort. Die Datei gilt nur als vorhanden, wenn sie mit 200 antwortet und eine Zeile enthält, die mit Contact: beginnt, dem einzigen Pflichtfeld neben Expires. Das schließt Single-Page-Apps aus, die für jeden Pfad ihr HTML zurückgeben. Findet er sie nicht, öffnet er einen informativen Befund: Das kostet keine Punkte, weil das Fehlen keine Sicherheitslücke ist; es ist eine gute Praxis, die dir fehlt.
Wozu das dient
Wenn jemand einen Fehler auf deiner Seite findet (ein Forscher, ein neugieriger Nutzer, ein anderes Unternehmen), muss er wissen, wem er Bescheid sagt. Ohne klaren Kanal passiert meist Folgendes: Er sagt nichts, oder er veröffentlicht es, oder er schreibt ans allgemeine Kontaktformular, das niemand liest. security.txt ist eine Textdatei an einem bekannten Pfad, in der du sagst: „Schreib mir hierhin, in dieser Sprache, und das ist meine Richtlinie." Menschen und Werkzeuge lesen sie, und immer mehr Bug-Bounty-Programme und Versicherer setzen sie voraus. Sie schützt auch dich: Sie macht klar, dass du verantwortungsvolle Meldungen annimmst und zu welchen Bedingungen.
So erstellst du sie
Eine minimale gültige Datei:
Contact: mailto:security@deinedomain.de
Expires: 2027-10-01T00:00:00.000Z
Preferred-Languages: de, en
Canonical: https://deinedomain.de/.well-known/security.txt
- Contact (Pflicht): ein
mailto:, eine Formular-URL oder eintel:. Du kannst mehrere angeben, nach Präferenz geordnet. Das Postfach muss existieren und gelesen werden. - Expires (Pflicht): Datum im Format ISO 8601, ab dem die Datei nicht mehr gilt. Die RFC empfiehlt weniger als ein Jahr: Setz dir eine Erinnerung zum Erneuern.
- Preferred-Languages, Policy (URL deiner Offenlegungsrichtlinie), Encryption (dein PGP-Schlüssel) und Acknowledgments (Dankesseite) sind optional.
- Canonical nennt die offizielle URL der Datei; nützlich, wenn du die Datei mit PGP signierst, damit niemand eine gefälschte veröffentlichen kann.
Wo sie hingehört
- Nuxt, Next.js, Vite, Astro: leg
public/.well-known/security.txtan; sie wird unverändert ausgeliefert. Prüf, dass deine.gitignorekeine Ordner ignoriert, die mit einem Punkt beginnen. - Vercel und Netlify: dasselbe, im öffentlichen Ordner des Projekts.
- nginx oder Apache: eine Datei unter
/.well-known/security.txtim ausgelieferten Verzeichnis; wenn deine Anwendung alle Routen abfängt, füge eine Ausnahme für/.well-known/hinzu. - WordPress: lade die Datei per FTP nach
.well-known/im Root, oder nutze ein Plugin, das sie erzeugt.
Liefere sie als text/plain und über HTTPS aus. Hast du viele Domains, braucht jede ihre eigene oder leitet auf die kanonische weiter.
Prüf, ob es behoben ist
curl -si https://deinedomain.de/.well-known/security.txt | grep -iE "^(HTTP|content-type|contact|expires)"
Erwartet: 200, Typ text/plain, eine Contact:-Zeile und eine Expires:-Zeile mit einem Datum in der Zukunft.
Häufige Fragen
Bekomme ich dann mehr Spam oder Mails von „Kopfgeldjägern"?
Etwas minderwertige Post wird kommen; das ist der Preis dafür, erreichbar zu sein. Ein einfacher Filter und eine klare Richtlinie (was als gültige Meldung zählt, ob du zahlst oder nicht) reduzieren das Rauschen. Was es dir erspart, ist die Alternative: es über Twitter zu erfahren.
Kann ich einfach das allgemeine Kontaktformular angeben?
Kannst du, aber ein eigenes Postfach, das jemand regelmäßig liest, ist besser. Liest das Marketing das allgemeine Formular, kann eine Schwachstellenmeldung Wochen brauchen, bis sie die richtige Person erreicht.
Warum zählt das nicht für die Note?
Weil es Vorbereitung misst, nicht Exposition. Die übrigen Sicherheitsprüfungen, die wirklich zählen, stehen in der Sicherheits-Checkliste vor dem Launch.