Angenommen, Sie sind bei einer Anwendung angemeldet und öffnen in einem anderen Tab eine fremde Seite. Diese Seite schickt still eine Anfrage an Ihre Anwendung. Der Browser legt Ihre Sitzungsdaten von selbst dazu, weil er das immer tut. Für die Anwendung sieht es aus, als hätten Sie die Aktion ausgelöst.
Das ist Cross-Site Request Forgery, zu Deutsch etwa: eine untergeschobene Anfrage. Der Angriff braucht kein gestohlenes Passwort. Es genügt, dass Sie angemeldet sind.
Wie der Schutz funktioniert und wie er verlorengeht
Die Abwehr ist unspektakulär. Die Anwendung legt in jedes Formular ein einmaliges Kennzeichen und akzeptiert nur Anfragen, die es mitbringen. Eine fremde Seite kann es nicht kennen. Laravel macht das standardmäßig, ohne Zutun.
Verloren geht der Schutz fast immer auf demselben Weg. Beim Einbinden einer Schnittstelle scheitert ein Aufruf, jemand nimmt den Pfad von der Prüfung aus, damit es weitergeht, und die Ausnahme wird großzügiger gefasst als nötig. Danach fällt es nicht mehr auf, weil nichts kaputt ist. Genau nach solchen Ausnahmen sehen wir in einem Code-Audit.