hackatoll
Zur Lernplattform

Wissen › Cross-Site Request Forgery (CSRF)

Cross-Site Request Forgery (CSRF)

Das Opfer löst unbemerkt eine Aktion aus, weil der Request nicht an ein Token gebunden ist.

Zugriffskontrolle Schweregrad: Mittel

Bei Cross-Site Request Forgery bringt eine fremde Seite den Browser eines eingeloggten Opfers dazu, eine zustandsändernde Aktion auf der Zielanwendung auszulösen. Da der Browser die Session-Cookies automatisch mitschickt, wirkt die Aktion legitim — es fehlt der Nachweis, dass sie bewusst ausgelöst wurde.

Wie der Angriff funktioniert

Beispiel

Schützende Aktionen verlangen ein serverseitig geprüftes Token, das nur die eigene Seite kennt:

<!-- Fluid-Formular bindet das RequestToken automatisch ein -->
<f:form action="update" controller="Account" requestToken="true">
  ...
</f:form>

Mögliche Auswirkungen

◆ In TYPO3 beachten

Worauf du in TYPO3 achten musst

TYPO3 schützt das Backend von Haus aus mit Tokens; im Frontend liefert der Core die Bausteine (RequestToken), die man in eigenen zustandsändernden Endpunkten einsetzen muss.

Backend ist tokengeschützt

Backend-Formulare und -Links tragen Tokens (FormProtection / moduleToken). Eigene Backend-Module sollen diese Mechanismen nutzen und nicht umgehen.

Frontend: RequestToken für zustandsändernde Aktionen

Ab TYPO3 v11 gibt es das RequestToken-Konzept. In Fluid-Formularen requestToken='true' setzen; serverseitig den nonce/HMAC prüfen, bevor die Aktion ausgeführt wird.

trustedProperties ist kein CSRF-Schutz

Extbase signiert mit trustedProperties zwar die erlaubten Felder (gegen Mass Assignment), schützt aber nicht gegen CSRF. Beides getrennt betrachten.

SameSite-Cookies als Basisschutz

Session-Cookies mit SameSite=Lax/Strict setzen (TYPO3 unterstützt die Konfiguration). Das entschärft viele Cross-Site-Requests, ersetzt aber Tokens nicht.

Zustandsänderungen nur per POST

GET-Requests dürfen nichts verändern. Lesende GETs sind harmlos; alles Schreibende über POST + Token.

Schutzmaßnahmen

Weiterlesen

Jetzt interaktiv üben →