Versuch eines Sammelthreads zu X-CSRF-Token / Validierungsproblem

Hallo,

wir haben unseren potentiellen Fix gestern bereits bei einigen Kunden ausprobiert. Dieser Fix behebt Probleme mit einer abgelaufenen/geänderten Session. Konkret sollte dies also die Probleme mit der Registrierung beheben. Andere Bereiche, die nicht direkt durch dieses Session-Problem einen Fehler werfen, werden noch separat geprüft (bspw. Newsletter). Wir haben die Prüfung auf den Token etwas geändert, sodass nun auf den Inhalt des Cookies geprüft wird und nicht mehr auf den Inhalt der Session. Sollte also aus irgendwelchen Gründen die Session verloren gehen, ist die Prüfung weiterhin erfolgreich.

Ihr könnt das selbst bereits einmal testen.

Datei: /engine/Shopware/Components/CSRFTokenValidator.php
​Zeile: 146-149

Aktuell:

if ($request->isPost()) {
/** @var \Enlight_Components_Session_Namespace $session */
$session = $this->container->get('session');
$token = $session->offsetGet('X-CSRF-Token');

Ändern in:

if ($request->isPost() && !$request->isXmlHttpRequest()) {
$context = $this->container->get('shopware_storefront.context_service')->getShopContext();
$token = $request->getCookie('__csrf_token-' . $context->getShop()->getId());

Bei unseren Testshops war danach kein Fehler mehr in den Core-Logs erkennbar. Wichtig ist natürlich, dass ihr dann den CSRF-Token im Frontend wieder aktiviert.
Wie beschrieben wird dies nicht an jeder Stelle, jede Meldung beheben. Es gibt weiterhin Plugins die einen solchen Fehler werfen und Bereiche, die von uns separat geprüft werden (bspw. die Newsletteranmeldung). Die Registrierungsprobleme sollten dadurch allerdings behoben sein.

Moritz

2 „Gefällt mir“