Der Begriff CSRF (englisch Cross-Site Request Forgery) bezeichnet eine der häufigsten und gefährlichsten Sicherheitslücken in Webanwendungen. Sie tritt auf, wenn Angreifer einen Benutzer dazu bringen, unbeabsichtigt Aktionen auf einer Webseite auszuführen, auf der er bereits eingeloggt ist – zum Beispiel das Ändern eines Passworts oder das Absenden eines Formulars.
Was ist CSRF
CSRF-Angriffe zielen auf Sitzungen mit gültiger Authentifizierung ab. Wenn ein Benutzer beispielsweise bei einer Bankseite eingeloggt ist, kann ein Angreifer ihn über einen präparierten Link oder ein verstecktes Formular auf einer anderen Seite dazu bringen, eine Überweisung auszuführen – ohne dass der Benutzer es merkt.
Das Problem: Die Anfrage enthält automatisch gültige Cookies oder Session-Daten, die der Browser mitsendet.
Beispiel eines CSRF-Angriffs
Wenn der Nutzer bei seiner Bank angemeldet ist, würde der Browser diese Anfrage mitsenden und damit möglicherweise eine echte Transaktion auslösen.
Schutz vor CSRF
| Maßnahme | Beschreibung | 
|---|---|
| CSRF-Token | Ein eindeutiger, zufälliger Token wird jedem Formular oder jeder Anfrage hinzugefügt. Der Server prüft, ob der Token gültig ist. | 
| SameSite-Cookies | Cookies werden so konfiguriert, dass sie nicht bei Cross-Site-Requests gesendet werden. ( SameSite=LaxoderStrict) | 
| Überprüfung des Origin-Headers | Der Server prüft, ob die Anfrage von der eigenen Domain stammt. | 
| Doppelte Cookie-Strategie | Der Token wird in einem Cookie und gleichzeitig im Formular übertragen, um Manipulationen zu erkennen. | 
| Nur POST/PUT/DELETE für kritische Aktionen | Verhindert, dass einfache GET-Anfragen sicherheitsrelevante Änderungen auslösen. | 
Unterschied zu anderen Angriffen
| Angriffstyp | Ziel | Beispiel | 
|---|---|---|
| CSRF | Manipulation durch authentifizierten Benutzer | Formular wird unbewusst abgeschickt | 
| XSS (Cross-Site Scripting) | Einschleusen von Skripten in Webseiten | <script>-Code wird ausgeführt | 
| Clickjacking | Benutzer wird zum Klick auf versteckte Elemente verleitet | Transparenter iFrame über Button | 
Beispiel für einen sicheren CSRF-Schutz in PHP
php
session_start();
if ($_SERVER[‚REQUEST_METHOD‘] === ‚POST‘) {
if (!hash_equals($_SESSION[‚csrf_token‘], $_POST[‚csrf_token‘])) {
die(‚Ungültiger Sicherheits-Token‘);
}
}
// Token generieren
if (empty($_SESSION[‚csrf_token‘])) {
$_SESSION[‚csrf_token‘] = bin2hex(random_bytes(32));
}
?>
<form method=“post“>
<input type=“hidden“ name=“csrf_token“ value=“<?=$_SESSION[‚csrf_token‘]?>“>
<button type=“submit“>Speichern</button>
</form>
Fazit
CSRF gehört zu den „Top 10 Web Security Risks“ laut OWASP. Jede Anwendung, die Benutzersitzungen oder Authentifizierung nutzt, sollte entsprechende Schutzmechanismen implementieren.
Die Kombination aus CSRF-Token, SameSite-Cookies und einer sauberen Trennung der HTTP-Methoden ist der wirksamste Ansatz.