Leidiges Thema CSRF Token Artikel im Warenkorb

Hallo,

gestern ist uns aufgefallen, dass folgende Fehlermeldung beim Versuch einen Artikel im Warenkorb zu legen, aufgetaucht ist:

The provided X-CSRF-Token for path „/checkout/addArticle“ is invalid. Please go back, reload the page and try again.

Beim Reloaden der Seite war das Problem tatsächlich kurzzeitig behoben aber tauchte immer mal wieder nach ca. 15/20 Minuten auf.

Sehr merkwürdig ist, dass dieser Fehler auf 2 Liveshops und 2 Backup/Testshops gab, alle 5.3.7, alle ohne irgendwelche Änderungen innerhalb der letzten Wochen. Und, laut Logfiles, begann das Problem gestern und vorher nicht!

Als vorübergehende Lösung haben wir erstmal in der config.php CSRF deaktiviert.

Shopware\Components\CSRFTokenValidationException: The provided X-CSRF-Token for path "/checkout/addArticle" is invalid. Please go back, reload the page and try again. in /engine/Shopware/Components/CSRFTokenValidator.php:155 Stack trace:
#0 /engine/Library/Enlight/Event/Handler/Default.php(91): Shopware\Components\CSRFTokenValidator->checkFrontendTokenValidation(Object(Enlight_Controller_ActionEventArgs))
#1 /engine/Library/Enlight/Event/EventManager.php(218): Enlight_Event_Handler_Default->execute(Object(Enlight_Controller_ActionEventArgs))
#2 /engine/Library/Enlight/Controller/Action.php(142): Enlight_Event_EventManager->notify('Enlight_Control...', Object(Enlight_Controller_ActionEventArgs))
#3 /engine/Library/Enlight/Controller/Dispatcher/Default.php(530): Enlight_Controller_Action->dispatch('addArticleActio...')
#4 /engine/Library/Enlight/Controller/Front.php(223): Enlight_Controller_Dispatcher_Default->dispatch(Object(Enlight_Controller_Request_RequestHttp), Object(Enlight_Controller_Response_ResponseHttp))
#5 /engine/Shopware/Kernel.php(191): Enlight_Controller_Front->dispatch()
#6 /vendor/symfony/http-kernel/HttpCache/HttpCache.php(484): Shopware\Kernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#7 /engine/Shopware/Components/HttpCache/AppCache.php(268): Symfony\Component\HttpKernel\HttpCache\HttpCache->forward(Object(Symfony\Component\HttpFoundation\Request), true, NULL)
#8 /vendor/symfony/http-kernel/HttpCache/HttpCache.php(251): Shopware\Components\HttpCache\AppCache->forward(Object(Symfony\Component\HttpFoundation\Request), true)
#9 /vendor/symfony/http-kernel/HttpCache/HttpCache.php(268): Symfony\Component\HttpKernel\HttpCache\HttpCache->pass(Object(Symfony\Component\HttpFoundation\Request), true)
#10 /engine/Shopware/Components/HttpCache/AppCache.php(143): Symfony\Component\HttpKernel\HttpCache\HttpCache->invalidate(Object(Symfony\Component\HttpFoundation\Request), true)
#11 /vendor/symfony/http-kernel/HttpCache/HttpCache.php(199): Shopware\Components\HttpCache\AppCache->invalidate(Object(Symfony\Component\HttpFoundation\Request), true)
#12 /engine/Shopware/Components/HttpCache/AppCache.php(116): Symfony\Component\HttpKernel\HttpCache\HttpCache->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#13 /is/htdocs/wpxxxxxx_xxxxxxx/www/shopware.php(118): Shopware\Components\HttpCache\AppCache->handle(Object(Symfony\Component\HttpFoundation\Request))
#14 {main}

Wenn uns jemanden hierzu Tipps, Information geben würde wäre das super.

Vielen Dank im Voraus

Grüße

Leider muss ich mich hier mit dem Problem anschließen. Habe 2 Shops mit 5.4.1 laufen und bei beiden diese und ander CSRF Token Fehlermeldungen und auch von Kunden die Beschwerde, dass kein Einkauf möglich ist. Manchmal kommt die Fehler-Email auch bei eigenen Testeinkäufen OHNE dass man als User etwas davon mitbekommen hat. Schwer einzugrenzen und beunruhigend. config.php CSRF deaktivieren ist auch jetzt meine Notlösung.

SW 5.4.1 / Ngnix Hosting PHP 7.0.18

Bei bedarf stelle ich gerne genauere Infos zur Verfügung.

Ich kann das nicht nachvollziehen. In unseren Shops kommen regelmäßig ebenfalls die CSRF-Fehlermeldungen, aber sie lassen sich eigentlich immer auf zwei Ursachen zurückführen:

  1. Irgendwie bei den Usern hängengebliebene Browser-Caches, in denen warum auch immer noch alte CSRF-Tokens herumstehen.
  2. Tatsächliche Spam-Versuche bzw. möglicherweise einfach Bots (sieht man schön an der Uhrzeit - nachts um 3 ist auf den - meisten - deutschen Seiten kaum ein Human unterwegs).

Zu 1.: Ein typischer Effekt ist es, wenn CSRF zum ersten Mal eingeschaltet wird, dass 1 bis 2 Tage besonders viele Fehlermeldungen kommen, die dann aber schnell und deutlich abebben.

Ob CSRF auf Deiner Seite überhaupt greift, kannst Du z.B. mit der Chrome-Entwicklertools/Applicatin/Cookies testen. Einfach mal den CSRF-Token überschreiben und dann z.B. versuchen, eine Email beim Newsletter einzutragen. Funktioniert auch beim Demo-Shop, siehe Screenshot.

Meine persönliche Bottom-Line: Vielen „Fehlermeldungen“ zu CSRF sind eben kein Fehler im Sinne „Programmfehler“, sondern zeigen nur, dass die CSRF-Protection richtig funktioniert. Deaktivierung ist sicher nicht die beste Lösung. Nach dem erstmaligen Aktivieren ein paar Tage die Logs checken, aber nicht gleich am 1. Tag nervös werden.

Happy selling,

Geert

  1. Irgendwie bei den Usern hängengebliebene Browser-Caches, in denen warum auch immer noch alte CSRF-Tokens herumstehen.

diesen Punkt fände ich interessant. Hat jemand eine Erklärung warum das passieren kann? Warum Shopware damit nicht klar kommt. 

ich schlage mich mit einem ähnlichen problem herum und bin auch grad ziemlich ratlos, hab nun aber schon was interessantes raus gefunden:

ich betreibe mehrer sub- und sprachshops. in der vergangenheit nie probleme. nach dem ich nun von 5.3.7 auf 5.4.1 (natürlich auf einem Test System) aktualisiert hab, hab ich auch diesen Warenkorb Token fehler - sprich man kann gar nichts in den Warenkorb tun / einkaufen unmöglich.

Nun aber: das ist nicht auf allen Sub- und Sprachshops so… die meisten funktionieren einwand frei.

Problem macht nur der Shop, in dem die Lokale “Französisch (Schweiz)” (locale_id 107) aktiviert ist. Ändere ich die Locale_ID ist alles OK, stell ich in einem anderen SubShop auf diese locale_id 107 um hab ich das gleiche Problem.

Zu erwähnen ist:

  • alle Plugins deaktiviert
  • Standard Responsive Theme im Einsatz

Ich blick hier mit diesen Token echt grad zu wenig durch.

aber eigentlich lässt diese erkentniss in meinem fall nur zwei schlüsse zu:

  • irgendwas mit dem Update auf SW 5.4.1 ist Linde oder aber mit Sprachupdate Französisch das Zeitgleich ausgeliefert wurde
  • ich hab in den Übersetzungssnippets für die Lokale 107 irgendwas drin was nicht rein gehört. Aber auch dann stellt sich die Frage wieso das vorher auf 5.3.7 kein Problem war.

Ich hoff es hat jemand eine gute Idee.

ich hab die ursach für mein problem gefunden, möchte es gerne teilen weil evtl. hilft das jemandem weiter…

im snippet “frontend/index/index - IndexNoCookiesNotice” in französischer sprache hatte es folgenden text drin:

Nous avons détecté que les cookies sont désactivés dans votre navigateur. Pour profiter de toutes les fonctionnalités de {$sShopname|escapeJs}, nous vous conseillons d’activer les cookies dans votre navigateur.

Wenn ich das gleiche Snippet auf einer 5.3.7 Version vergleiche, dann hat sich im Rahmen des Updates auf 5.4.1 am Snippets nichts geändert.

Es scheint aber in Bug im Javascript zu geben seit dem Update auf 5.4.1. Das Apostroph bei “d’activer” wird nicht richtig auskomentiert:

_

Durch diesen Fehler werden die Token mittels JS nicht richtig hinzugefügt… die Folge sind die Token Errors. Wenn ich das Snippet ändere ohne ein Apostroph drin, funktioniert wieder alles problemlos.

1 Like

Wow, das muss man erst mal rausfinden!

Ich hab mir erlaubt, ein Ticket dafür anzulegen:

Vergess nicht, dort 1 x zu voten!

Viel Erfolg

Geert

1 Like

@vanwittlaer schrieb:

Wow, das muss man erst mal rausfinden!

 

allerdings… es hat mich zwei tage und vier mal das zerschiessen meiner test installation gekostet bis ich mal auf die idee gekommen bin die JS fehler bisschen genauer zu analysieren :-) 

Hallo! Das Thema sollte mit der kommenden Version 5.4.2 schon behoben sein, das betreffende Ticket ist Shopware Issuetracker
Die relevante Änderung kannst Du hier nachvollziehen, vielleicht hilft Dir das ja schon vorab:  SW-21278 - Adjust rendering of noCookiesNotice, add json flag for sni… · shopware/shopware@b781313 · GitHub

Viele Grüße
Hendrik

@hsoebbing‍ agree… scheint um das gleiche zu gehen. hätte ich das vorher gewusst, hätte ich mir paar graue haare sparen können :wink:

Wir haben hier auch das Problem in zwei Shops. In beiden ist aber keine französische Übersetzung aktiv, daran kanns also nicht liegen. Bin ratlos und aufgrund der ständigen Probleme schon am überlegen, auf ein anderes Shopsystem umzusteigen. 

@herzbrille schrieb:

Wir haben hier auch das Problem in zwei Shops. In beiden ist aber keine französische Übersetzung aktiv, daran kanns also nicht liegen. Bin ratlos und aufgrund der ständigen Probleme schon am überlegen, auf ein anderes Shopsystem umzusteigen. 

naja, es kann natürlich auch andere sprachen geben als französisch die das problem auslösen. es liegt ja nicht and der sprache sondern am sonderzeichen das falsch verarbeitet wird. ferner war meine problem relativ spezifisch und konkret, es kann auch andere gründe für Token Probleme geben.

Nicht selten ist aber ein JS fehler dafür verantwortlich. JS bricht ab, Token wird nicht gesetzt und dann hat man den Salat.

Wenn du magst kannst du kurz den Link und Beschreibung posten wie man den Fehler replizieren kann, dann kann ich kurz schauen ob es das gleiche / ähnliche Problem ist wie bei mir… 

Mein Problem ist, dass ich den Fehler eben nicht reproduzieren kann. Wenn ich hier als Kunde was in den Warenkorb lege, läuft es problemlos. Wenn meine Kunden was in den Warenkorb legen, kommt die Fehlermeldung “X-CSRF-Token for path “/checkout/addArticle/sAdd/HB10020/sQuantity/1/” is invalid.”

Ich sitze da schon seit drei Tagen dran und verliere täglich ein paar hundert Euro Umsatz. Jetzt hab jetzt CSRF im Frontend deaktiviert und den http Cache deaktiviert, aber das kann ja auch keine Dauerlösung sein.

Ich geh nochmal sämtliche Plugins und Templates durch und kom dann gerne auf dein Angebot zurück, vielen Dank schonmal dafür!

@herzbrille schrieb:

Jetzt hab jetzt CSRF im Frontend deaktiviert und den http Cache deaktiviert, aber das kann ja auch keine Dauerlösung sein.

warum den Cache? 

Nur mal ne Frage:

Wenn du diese Fehlermeldung rauskopiert hast, hast du denn überhaupt einen Artikel mit der ArtNr. HB10020 ? Ist nicht zu finden.

Bzw. https://www.herzbrille-shop.de/herzbrillen-mit-ihrem-aufdruck/

Könnte mir gut vorstellen, dass hier der Fehler liegt, ist ja eindeutig ein Plugin. @herzbrille‍ Hast du das auch getestet, als die csrf Protection noch an war?

@NextMike‍ : Den Cache habe ich deaktiviert, um zu verhindern, dass irgendwo noch alte Tokens im Cache hängen und vielleicht dieses Problem auslösen.
Auch im Bezug auf den dritten Post von oben: 

  1. Irgendwie bei den Usern hängengebliebene Browser-Caches, in denen warum auch immer noch alte CSRF-Tokens herumstehen.

 @Rednaxela‍ : Den Artikel gibt es, er ist gerade aber nur einer englischen Kategorie zugewiesen

Ah ok, da ist aber der Browser-Cache mit gemeint.

Mein Problem ist, dass ich den Fehler eben nicht reproduzieren kann. Wenn ich hier als Kunde was in den Warenkorb lege, läuft es problemlos. Wenn meine Kunden was in den Warenkorb legen, kommt die Fehlermeldung

@flöru82‍ gesehen hat, war das Problem die (nicht-) Erzeugung des CSRF-Tokens aufgrund eines Javascript-Fehlers. Jetzt kann man sich ja verschiedenes vorstellen, z.B. das der Browser, das Betriebssystem, die Locale usw. einen Einfluss hat und das Token deshalb nicht rightig erzeugt wird. Dass Du (und andere und ich auch) das nicht reproduzieren können, könnte also so erklärbar sein.

Hast Du vielleicht eine Chance herauszufinden, in welcher Umgebung Deine Kunden das Problem haben?

Ich konnte den Fehler reproduzieren. Wenn man zu schnell was in Warenkorb legt bevor alles geladen ist, dann kommt der Fehler. Jetzt stellt sich die Frage, wie kann man den Warenkorbutton verzögern bis alles geladen wird?

Ich weiss, dass der Tread schon alt ist, aber immer noch aktuell in vielen Shopware Shops. Habe gerade arktis.de getestet…hat das gleiche Problem.

@hsoebbing‍ bitte um eine Lösung

 

Vielen Dank

@notvorsorge‍ Kannst Du das Problem denn noch in aktuellen Versionen von Shopware nachstellen (shopwaredemo.de zum Beispiel)? Oder muss man da einfach nur sehr schnell für sein?

Prinzipiell wäre es vielleicht denkbar den Kaufen-Button initial zu deaktivieren und erst nachdem das Token geladen wurde zu aktivieren. Schöner wäre es vielleicht den Klick auf den Button abzufangen und die Aktion zu verzögern bis das Token geladen wurde. Allerdings denke ich dass es vielleicht ein anderes, unterliegendes Problem gibt wenn der Shop so langsam ist dass so etwas überhaupt zum Problem wird. Vielleicht wäre es sinnvoller dort anzusetzen?