Wie gehe ich mit csrf_token in php unit test um
von Andreas
Mocking des CSRF-Tokens
Eine übliche Methode besteht darin, die Überprüfung des CSRF-Tokens zu mocken. Das bedeutet, dass du die Funktion oder Methode, die das Token überprüft, so anpasst, dass sie immer true zurückgibt oder keinen Fehler wirft. Dadurch kannst du den Rest des Codes testen, ohne dass die CSRF-Überprüfung ein Hindernis darstellt.
// Mock der CSRF-Überprüfung in deinem Test
public function testPostRequest()
{
$this->withoutMiddleware(\App\Http\Middleware\VerifyCsrfToken::class);
$response = $this->post('/deine-url', ['daten' => 'wert']);
$response->assertStatus(200);
}
Dieser Code setzt voraus, dass du Laravel oder ein ähnliches Framework verwendest, das Middleware unterstützt.
CSRF-Token in den Test einschließen
Wenn es wichtig ist, die Funktionalität des CSRF-Tokens selbst zu testen, musst du sicherstellen, dass deine Tests ein gültiges Token verwenden. Du könntest das Token generieren und es dann zusammen mit den POST-Daten in deinen Tests senden.
Beispiel:
public function testFormSubmitWithCsrf()
{
$csrfToken = csrf_token(); // Funktion um ein CSRF-Token zu generieren
$response = $this->withSession(['_token' => $csrfToken])
->post('/form-submit', [
'_token' => $csrfToken,
'data' => 'value'
]);
$response->assertStatus(200);
}
Dieses Beispiel setzt ebenfalls ein Framework wie Laravel voraus, das die csrf_token()-Funktion und Session-Handling bietet.
Token deaktivieren
In manchen Situationen, besonders während der Entwicklung oder beim Testen von APIs, kannst du erwägen, die CSRF-Überprüfung komplett zu deaktivieren. Dies sollte jedoch nur in Testumgebungen erfolgen, da es die Sicherheit der Anwendung beeinträchtigt.
Beispiel in Laravel: Du kannst das CSRF-Middleware in der Kernel.php für die Testumgebung deaktivieren.
Umgebungsspezifische Konfiguration
Stelle sicher, dass deine Testumgebung so konfiguriert ist, dass sie den Umgang mit CSRF unterstützt, indem sie entsprechende Tokens generiert und validiert. Dies kann in der Konfiguration deines Frameworks oder in deinem Testsetup erfolgen.
Fazit
Wähle die Methode, die am besten zu deinen Anforderungen passt. In den meisten Fällen ist das Mocking der CSRF-Überprüfung oder das Einschließen eines gültigen Tokens in Tests die praktikabelste Lösung. Achte jedoch darauf, die Sicherheitsaspekte in deiner Anwendung nicht zu vernachlässigen.
