CSRFTokenValidationException bei Varianten Wechsel ohne AJAX

Ich hatte bei mir kurzzeitig den Varianten Wechsel ohne AJAX aktiviert, da er wesentlich schneller ist, da dann der ja Cache funktioniert. Allerdings habe ich dann viele Emails bekommen mit folgendem Inhalt (s.u). Ich konnte das Problem nachstellen, wenn ich auf dem Handy eine Produktseite offen hatte und erst später wieder in den Browser gewechselt ist. Dann kam ne Meldung, ob ich das Formular neu laden will, wenn ich das getan habe, dann kam die Meldung. Ich vermute, dass hier ein Bug vorliegt? Kann das jemand bestätigen? Die Meldung ist nicht mehr aufgetreten, seitdem ich AJAX wieder aktiviert habe für den Varianten Wechsel.

 

exception 'Shopware\Components\CSRFTokenValidationException' with message 'The provided X-CSRF-Token is invalid. Please go back, reload the page and try again.' in /var/www/engine/Shopware/Components/CSRFTokenValidator.php:161
Stack trace:
#0 [internal function]: Shopware\Components\CSRFTokenValidator->checkFrontendTokenValidation(Object(Enlight_Controller_ActionEventArgs))
#1 /var/www/engine/Library/Enlight/Event/Handler/Default.php(91): call_user_func(Array, Object(Enlight_Controller_ActionEventArgs))
#2 /var/www/engine/Library/Enlight/Event/EventManager.php(214): Enlight_Event_Handler_Default->execute(Object(Enlight_Controller_ActionEventArgs))
#3 /var/www/engine/Library/Enlight/Controller/Action.php(143): Enlight_Event_EventManager->notify('Enlight_Control...', Object(Enlight_Controller_ActionEventArgs))
#4 /var/www/engine/Library/Enlight/Controller/Dispatcher/Default.php(523): Enlight_Controller_Action->dispatch('indexAction')
#5 /var/www/engine/Library/Enlight/Controller/Front.php(223): Enlight_Controller_Dispatcher_Default->dispatch(Object(Enlight_Controller_Request_RequestHttp), Object(Enlight_Controller_Response_ResponseHttp))
#6 /var/www/engine/Shopware/Kernel.php(176): Enlight_Controller_Front->dispatch()
#7 /var/www/vendor/symfony/http-kernel/HttpCache/HttpCache.php(487): Shopware\Kernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#8 /var/www/engine/Shopware/Components/HttpCache/AppCache.php(255): Symfony\Component\HttpKernel\HttpCache\HttpCache->forward(Object(Symfony\Component\HttpFoundation\Request), true, NULL)
#9 /var/www/vendor/symfony/http-kernel/HttpCache/HttpCache.php(258): Shopware\Components\HttpCache\AppCache->forward(Object(Symfony\Component\HttpFoundation\Request), true)
#10 /var/www/vendor/symfony/http-kernel/HttpCache/HttpCache.php(275): Symfony\Component\HttpKernel\HttpCache\HttpCache->pass(Object(Symfony\Component\HttpFoundation\Request), true)
#11 /var/www/engine/Shopware/Components/HttpCache/AppCache.php(133): Symfony\Component\HttpKernel\HttpCache\HttpCache->invalidate(Object(Symfony\Component\HttpFoundation\Request), true)
#12 /var/www/vendor/symfony/http-kernel/HttpCache/HttpCache.php(206): Shopware\Components\HttpCache\AppCache->invalidate(Object(Symfony\Component\HttpFoundation\Request), true)
#13 /var/www/engine/Shopware/Components/HttpCache/AppCache.php(114): Symfony\Component\HttpKernel\HttpCache\HttpCache->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#14 /var/www/shopware.php(101): Shopware\Components\HttpCache\AppCache->handle(Object(Symfony\Component\HttpFoundation\Request))
#15 {main}



{
    "uri": "/avira-antivirus-pro-183",
    "method": "POST",
    "query": {
        "module": "frontend",
        "controller": "detail",
        "action": "index",
        "sArticle": "183",
        "rewriteUrl": "1"
    },
    "post": {
        "group": {
            "14": "149",
            "17": "138"
        },
        "__csrf_token": "mQB3LYED7qQOzEo9EnKaPQfoLvIDk"
    }
}

 

Ich denke das Problem entsteht, da bei einer erneuten Formularübermittlung entweder der CSRF-Token vom JS gar nicht übergeben wird oder der gültige bereits abgelaufen (weil genutzt) ist. Für gewöhnliche sollte es hier ein Submit + Redirect geben, damit ein „Zurück“ im Browser nicht zu einer erneuten Formularübermittlung führt.

Falls es Dich interessiert habe ich einige Infos zu CSRF bei Shopware zusammengeschrieben:

https://synonymous.rocks/?s=csrf