Um ein PHP-Formular vor CSRF-Angriffen (Cross-Site Request Forgery) zu schützen, können mehrere Maßnahmen ergriffen werden. Eine der effektivsten Methoden ist die Implementierung von CSRF-Token. Ein CSRF-Token ist ein einzigartiger, unverwechselbarer Wert, der mit jedem Formular gesendet wird und vom Server überprüft wird, wenn das Formular eingereicht wird. Hierdurch wird sichergestellt, dass das Formular tatsächlich von der beabsichtigten Webseite stammt und nicht von einem Angreifer.
Schritte zur Implementierung von CSRF-Token in PHP:
1. Erstellen des CSRF-Tokens: Bei der Generierung des Formulars muss ein CSRF-Token erstellt werden, der mit dem Formular gesendet wird. Dieser Token sollte auch in der Session des Benutzers gespeichert werden.
```php
// Starten der Session
session_start();
// Erzeugen eines CSRF-Tokens
$csrf_token = bin2hex(random_bytes(32));
// Speichern des Tokens in der Session
$_SESSION[‘csrf_token’] = $csrf_token;
```
2. Integrieren des CSRF-Tokens in das Formular:
Das Token wird als verstecktes Input-Feld in das Formular eingefügt.
```html
3. Überprüfung des CSRF-Tokens bei der Formularverarbeitung:
Wenn das Formular eingereicht wird, muss der Server den empfangenen Token mit dem gespeicherten Token in der Session vergleichen. Wenn die Tokens nicht übereinstimmen, sollte die Anfrage als ungültig betrachtet werden.
```php
// Starten der Session
session_start();
// Überprüfen des CSRF-Tokens
if ($_SERVER[‘REQUEST_METHOD’] = 'POST') {
if (!isset($_POST['csrf_token']) || $_POST['csrf_token'] ! $_SESSION[‘csrf_token’]) {
// Ungültiger CSRF-Token
die(‘CSRF-Token-Überprüfung fehlgeschlagen.’);
}
Zusätzliche Schutzmaßnahmen:
1. Verwendung von Samesite-Cookies:
Durch das Setzen des `SameSite`-Attributs bei Cookies kann der Browser angewiesen werden, Cookies nicht mit Anfragen zu senden, die von anderen Seiten stammen.
```php
setcookie(‘session_token’, $token, [
‘samesite’ => ‘Strict’,
‘secure’ => true,
‘httponly’ => true,
]);
```
2. Überprüfung von Referer und Origin Headern:
Zusätzlich kann der Referer oder Origin Header überprüft werden, um sicherzustellen, dass die Anfrage von der gleichen Domain stammt.
```php
if (!isset($_SERVER[‘HTTP_REFERER’]) || parse_url($_SERVER[‘HTTP_REFERER’], PHP_URL_HOST) !== ‘yourdomain.com’) {
die(‘Ungültige Herkunft der Anfrage.’);
}
```
Beispiele und Anwendungen:
Diese Methoden können in einer Vielzahl von PHP-Anwendungen eingesetzt werden, um Formulare vor CSRF-Angriffen zu schützen. So zum Beispiel in Kontaktformularen, Benutzerregistrierungen, Login-Systemen oder auch in jedem anderen Formular, bei dem Aktionen ausgeführt werden, die zu unangemessenen Folgen führen könnten.
Quellen:
1. OWASP (Open Web Application Security Project) – [CSRF Prevention Cheat Sheet](https://cheatsheetseries.owasp.org/cheatsheets/Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.html)
2. PHP Manual – [Sessions](https://www.php.net/manual/en/book.session.php)
3. Mozilla Developer Network (MDN) – [HTTP Cookies](https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies)
Indem man die beschriebenen Schutzmechanismen anwendet, kann man sicherstellen, dass ein PHP-Formular robust gegenüber CSRF-Angriffen ist, was maßgeblich zur Sicherheit der Webanwendung beiträgt.