CSRF-Schutz und Schutz vor Formular-Manipulation

Verstehe CSRF-Angriffe und wie Formular-Token verhindern, dass Angreifer deine Formulare kapern. Warum jedes Formular CSRF-Schutz braucht.

Entwurf

Stell dir vor, jemand lockt einen Besucher dazu, auf einen Link zu klicken, während er in sein Online-Banking eingeloggt ist. Der Link führt zu einem versteckten Formular, das ohne Wissen des Besuchers bei der Bank eine Überweisung auslöst. Die Bank sieht eine scheinbar legitime Anfrage eines angemeldeten Nutzers und führt sie aus. Der Angreifer hat nun Geld über das Konto des Opfers bewegt, ohne je dessen Passwort zu kennen.

Das ist CSRF (Cross-Site Request Forgery): ein Angriff, bei dem ein Angreifer ein Opfer dazu bringt, unbemerkt ein Formular oder eine Anfrage an eine andere Website zu senden, bei der das Opfer bereits angemeldet ist.

Das lernst du hier: Was CSRF-Angriffe sind und wie sie funktionieren, warum sie selbst bei anderen Schutzmassnahmen so gefährlich sind, wie CSRF-Token sie verhindern und wie du deine Formulare schützt.

Was ist CSRF?

CSRF steht für Cross-Site Request Forgery, auf Deutsch etwa „websiteübergreifende Anfragenfälschung“. Der Angreifer nutzt aus, dass dein Browser deine Sitzung automatisch mit jeder Anfrage an eine Website mitschickt, bei der du angemeldet bist, selbst wenn die Anfrage von einer ganz anderen Website kommt.

Der Angriff funktioniert so: Ein angemeldeter Besucher wird dazu gebracht, unbemerkt ein Formular an eine Website zu senden, bei der er ein Konto hat. Das Passwort des Opfers kann der Angreifer nicht sehen. Er braucht es auch nicht. Er braucht nur, dass das Opfer bereits angemeldet ist, und löst dann eine Anfrage aus (zum Beispiel über ein verstecktes Formular), die etwas bewirkt, was der Angreifer will.

CSRF unterscheidet sich von anderen Angriffen, weil er weder Zugangsdaten stiehlt noch Verschlüsselung knackt. Er nutzt das Vertrauen aus, das die Website dem Opfer entgegenbringt. Das Opfer ist bereits authentifiziert, also vertraut die Website Anfragen, die von ihm zu kommen scheinen.

So funktionieren CSRF-Angriffe

Ein CSRF-Angriff läuft in drei Schritten ab.

Schritt 1: Das Opfer ist auf deiner Website angemeldet

Jemand besucht deine Website und meldet sich in seinem Konto an. Sein Browser hat nun ein aktives Sitzungs-Cookie, das beweist, dass er authentifiziert ist. Diese Sitzung bleibt aktiv, solange er die Website weiter nutzt.

Schritt 2: Der Angreifer lockt das Opfer auf eine schädliche Seite

Während er noch auf deiner Website angemeldet ist, besucht das Opfer eine Seite, die der Angreifer kontrolliert (etwa über einen Link aus sozialen Netzwerken, eine irreführende Anzeige oder eine Website, die seriös wirkt). Auf dieser Seite liegt versteckter Code, der ein Formular an deine Website sendet.

Schritt 3: Das Formular wird automatisch mit der Sitzung des Opfers abgeschickt

Das versteckte Formular wird an deine Website gesendet. Weil das Opfer bereits angemeldet ist, schickt sein Browser das Sitzungs-Cookie automatisch mit. Aus Sicht deines Formulars ist das eine legitime Anfrage eines authentifizierten Nutzers. Das Formular verarbeitet sie, als hätte das Opfer sie absichtlich abgeschickt.

Der Angreifer hat damit etwas auf deiner Website über das Konto des Opfers ausgelöst, ohne dass das Opfer es weiss. Vielleicht wurde das Passwort geändert, Geld überwiesen, ein Profil aktualisiert oder es wurden Daten gesendet.

Warum das auch bei anderen Schutzmassnahmen funktioniert

CSRF-Angriffe umgehen mehrere gängige Sicherheitsfunktionen:

HTTPS stoppt CSRF nicht. Die Daten sind unterwegs verschlüsselt, aber der Angreifer muss sie gar nicht abfangen. Er schickt die Anfrage einfach aus dem Browser des Opfers, dem die Website bereits vertraut.

Passwortschutz stoppt CSRF nicht. Der Angreifer braucht das Passwort des Opfers nie. Er nutzt nur aus, dass das Opfer bereits angemeldet ist.

Ein starkes Login-System stoppt CSRF nicht. Selbst wenn die Authentifizierung perfekt ist, funktioniert der Angriff, sobald das Opfer angemeldet ist.

Deshalb ist CSRF-Schutz eine eigene Schutzebene. Andere Sicherheitsmassnahmen verhindern ihn nicht. Du musst Formulare gezielt so gestalten, dass sie CSRF-Angriffen standhalten.

CSRF-Token: so stoppen sie den Angriff

Die Lösung ist ein CSRF-Token. Das ist eine einmalige, nicht vorhersagbare Zeichenfolge, die dein Server für jedes Formular erzeugt. So funktioniert es:

Dein Server erzeugt für jeden Besucher ein eigenes Token

Wenn jemand eine Seite mit einem Formular lädt, erzeugt dein Server ein zufälliges Token und verknüpft es mit der Sitzung dieses Nutzers. Das Token ist jedes Mal anders und gehört nur zu diesem Nutzer.

Das Token steckt im Formular

Das Token ist als verstecktes Feld im HTML-Formular enthalten. Schickt der Besucher das Formular ab, wird das Token mitgesendet.

Dein Server prüft das Token, bevor er die Einsendung verarbeitet

Wird das Formular abgeschickt, prüft dein Server, ob das Token in der Einsendung mit dem Token übereinstimmt, das du für die Sitzung dieses Nutzers erzeugt hast. Wenn ja, wird das Formular verarbeitet. Wenn nein (oder wenn kein Token da ist), wird es abgelehnt.

Das versteckte Formular des Angreifers kann kein gültiges Token enthalten, weil Token nicht vorhersagbar und für jede Sitzung einzigartig sind. Ein Angreifer auf einer anderen Domain kann das Token weder sehen noch erraten. Sein Angriff scheitert also. Das versteckte Formular wird zwar abgeschickt, aber dein Server lehnt es ab, weil das Token nicht passt.

So sieht ein CSRF-Token in der Praxis aus

In HTML sieht ein Formular mit CSRF-Schutz so aus:

<form method="POST" action="/submit-form"> <input type="hidden" name="csrf_token" value="a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6"> <input type="email" name="email" placeholder="Deine E-Mail"> <button type="submit">Absenden</button> </form>

Das Feld `csrf_token` ist versteckt. Der Besucher sieht es nicht, aber es wird zusammen mit seinen Formulardaten gesendet. Dein Server prüft es, bevor er die E-Mail-Adresse oder andere Daten verarbeitet.

CSRF-Schutz für verschiedene Formulartypen

Klassische HTML-Formulare

Standard-HTML-Formulare (die Daten per POST an deinen Server senden) brauchen CSRF-Token. Dazu gehören Kontaktformulare, Login-Formulare, Formulare zum Zurücksetzen des Passworts und jedes Formular, das Daten auf deinem Server ändert.

AJAX- und JavaScript-Formulare

Auch Formulare, die per JavaScript an einen API-Endpunkt gesendet werden, brauchen CSRF-Schutz. Das Token kann im Formular selbst stehen, in einem Cookie gespeichert sein oder vor dem Senden aus einem Meta-Tag gelesen werden.

Zustandslose API-Anfragen

Nutzt deine API tokenbasierte Authentifizierung (wie JWT), funktioniert der CSRF-Schutz anders. Der Browser hängt ein JWT-Token nicht automatisch an wie ein Sitzungs-Cookie, daher ist klassisches CSRF hier eine geringere Gefahr. Trotzdem gilt als bewährte Praxis, ein zusätzliches CSRF-Token für mehr Schutz einzubauen.

Weitere Schutzmassnahmen neben CSRF-Token

CSRF-Token sind die wichtigste Verteidigung, wirken aber am besten zusammen mit anderen Sicherheitsmassnahmen.

SameSite-Cookies

Wenn du ein Sitzungs-Cookie setzt, kannst du das Attribut `SameSite` ergänzen. Es sagt dem Browser, das Cookie nicht mitzusenden, wenn die Anfrage von einer anderen Domain kommt. So kann das versteckte Formular des Angreifers die Sitzung des Opfers gar nicht erst nutzen.

Prüfung des Referer-Headers

Dein Server kann den Referer-Header prüfen, um zu sehen, woher die Anfrage kam. Behauptet eine Einsendung, von deiner Domain zu kommen, der Referer zeigt aber eine andere Domain, handelt es sich wahrscheinlich um einen Angriff. (Referer-Header lassen sich allerdings fälschen, daher ist das kein vollständiger Schutz.)

Double-Submit-Cookie-Muster

Bei diesem Ansatz wird das CSRF-Token sowohl in einem Cookie als auch in einem Formularfeld gespeichert. Dein Server prüft vor der Verarbeitung, ob beide übereinstimmen. Das ist seltener als klassische Token, funktioniert aber gut bei zustandslosen Anwendungen.

So setzt du CSRF-Schutz um

Die Details hängen von deinem Technologie-Stack ab, aber das Muster ist immer gleich:

  1. Erzeuge pro Sitzung ein eindeutiges Token. Wenn ein Nutzer eine Sitzung beginnt oder eine Formularseite lädt, erzeugt dein Backend ein neues Token.
  2. Speichere das Token auf dem Server. Hinterlege es zusammen mit der Sitzung dieses Nutzers.
  3. Binde das Token ins Formular ein. Füge es als verstecktes Feld im HTML oder als Meta-Tag ein, das JavaScript lesen kann.
  4. Prüfe beim Absenden. Bevor du Formulardaten verarbeitest, kontrolliere, dass das gesendete Token mit dem gespeicherten Token der Sitzung übereinstimmt.
  5. Erzeuge es nach sensiblen Aktionen neu. Ändert ein Nutzer sein Passwort oder tut etwas Kritisches, erzeuge ein neues Token.

Die meisten modernen Web-Frameworks erzeugen und prüfen CSRF-Token automatisch. Nutzt du ein Framework, ist der CSRF-Schutz meist standardmässig eingeschaltet. Achte nur darauf, ihn nicht versehentlich auszuschalten.

Häufige Fehler, die Formulare angreifbar machen

CSRF-Schutz aus Bequemlichkeit abschalten. Manche Entwickler schalten CSRF-Prüfungen aus, um API-Tests zu erleichtern oder ihren Code zu vereinfachen. Tu das nicht. Es schafft eine echte Schwachstelle.

Ein statisches Token für alle Nutzer verwenden. Das Token muss zur Sitzung des jeweiligen Nutzers gehören. Ein Token, das für alle gleich ist (oder für alle Nutzer an allen Tagen), schützt nicht vor CSRF.

Token nicht erneuern. Verwendest du dasselbe Token wochenlang, hat ein Angreifer mehr Zeit, es auszunutzen. Erneuere Token regelmässig und immer nach sensiblen Vorgängen.

Sich nur auf SameSite-Cookies verlassen. SameSite hilft, reicht aber nicht aus. Nutze CSRF-Token als Hauptverteidigung und SameSite als Absicherung.

Token bei manchen Formularen vergessen. Schützt du einige Formulare mit Token und andere nicht, nutzen Angreifer die ungeschützten. Jedes Formular, das Daten verändert, braucht Schutz.

Was WEMASY für den CSRF-Schutz tut

Die Formulare von WEMASY enthalten bei jedem Formular, das du erstellst, automatisch einen CSRF-Token-Schutz. Du musst nichts einrichten und nicht daran denken. Sendet ein Besucher ein Formular ab, prüft WEMASY das Token, bevor die Einsendung gespeichert wird. Dieser Schutz ist fest eingebaut und standardmässig aktiv.

Mehr zu den Sicherheitsoptionen für Formulare findest du auf der Preisseite.

Häufig gestellte Fragen

Kann ein Angreifer ein CSRF-Token erraten?
Theoretisch nein. CSRF-Token sind kryptografisch zufällig und ändern sich häufig. Ein Angreifer müsste Milliarden Möglichkeiten durchprobieren. In der Praxis sind CSRF-Token so unvorhersehbar, dass Raten kein brauchbarer Angriff ist. Die Stärke des Tokens kommt aus Zufälligkeit und Einzigartigkeit, nicht daraus, dass es geheim bleibt.
Was passiert, wenn ein Besucher ein Formular abschickt und das Token ungültig ist?
Die Einsendung wird abgelehnt. Dein Server verarbeitet die Formulardaten nicht und speichert die Einsendung nicht. Der Besucher sieht meist eine Fehlermeldung (zum Beispiel „Sitzung abgelaufen“ oder „Ungültige Anfrage“) und wird gebeten, es erneut zu versuchen. Aus Sicht des Angreifers funktioniert das versteckte Formular einfach nicht.
Brauche ich CSRF-Schutz, wenn mein Formular keinen Login verlangt?
Ja. CSRF-Angriffe funktionieren auch bei Formularen ohne Authentifizierung. Ein Angreifer kann per CSRF einen Besucher dazu bringen, unerwünschte Daten an irgendein Formular zu senden, egal ob der Besucher angemeldet ist. Jedes Formular, das Einsendungen verarbeitet, braucht CSRF-Schutz.
Worin unterscheidet sich CSRF von XSS?
Beim Cross-Site Scripting (XSS) schleust ein Angreifer schädlichen Code in deine Website ein, der im Browser der Besucher läuft. Bei CSRF bringt ein Angreifer den Browser eines Besuchers dazu, ein Formular an eine andere Website zu senden. Das sind verschiedene Angriffe mit verschiedener Abwehr. CSRF-Token schützen vor CSRF, Eingabeprüfung und Bereinigung schützen vor XSS.
Und Angriffe auf mobile Apps? Helfen CSRF-Token da?
Mobile Apps sind für klassische CSRF-Angriffe weniger anfällig, weil sie Cookies nicht automatisch anhängen wie Browser. Trotzdem sollten mobile Apps tokenbasierte oder zertifikatbasierte Authentifizierung nutzen. Verwendet eine App Cookies oder Token, die automatisch mit Anfragen mitgesendet werden, sollte sie zusätzlich CSRF-Token prüfen.

Setz es direkt um,
auf deiner eigenen Website.

Starte kostenlos mit WEMASY und baue deine Seite in wenigen Minuten.