Zum Hauptinhalt springen

ArtinTech Solution

Fixing an Intermittent 403 Error Caused by Cache TTL

Ein sporadischer Fehler ist am schwersten zu diagnostizieren, weil er am grundlegendsten Schritt des Debuggings scheitert: ihn gezielt zu reproduzieren. Ein Button „Artikel entfernen“ im Warenkorb-Drawer eines Shops schlug bei manchen Besuchern manchmal mit einem Fehler 403 Forbidden fehl – ohne brauchbaren Hinweis im PHP-Fehlerprotokoll.

Die Signatur des Fehlers lesen

Der Antworttext der AJAX-Anfrage war ein bloßes -1, zusammen mit dem HTTP-Status 403. Genau diese Kombination ist die WordPress-eigene Signatur eines fehlgeschlagenen check_ajax_referer()-Aufrufs – der Nonce-Prüfung, die jeder sauber gebaute AJAX-Handler als Erstes ausführt. Die von der Seite gesendete Nonce passte schlicht nicht zu dem, was der Server erwartete.

Warum eine eigentlich gültige Nonce scheitern konnte

WordPress-Nonces sind nicht dauerhaft: Sie werden pro Seitenaufruf erzeugt und laufen nach etwa 24 bis 48 Stunden ab, gebunden an ein rollierendes Zeitfenster statt an einen festen Wert. Der LiteSpeed-Vollseiten-Cache der Website war jedoch mit einer TTL von 7 Tagen konfiguriert – eine gecachte Seite konnte also bis zu eine Woche nach ihrer Erzeugung unverändert an alle Besucher ausgeliefert werden.

Jede Seite, die mehr als etwa zwei Tage nach dem Cachen noch aus dem Cache kam, lieferte eine Nonce aus, die bereits abgelaufen war, wenn ein echter Besucher sie nutzen wollte – nicht wegen eines Problems in dessen Sitzung, sondern weil das HTML selbst gegenüber der Sicherheitsuhr von WordPress veraltet war.

Die Lösung – und warum sie echt ist und kein Workaround

Die Seiten-Cache-TTL auf 6 Stunden zu senken – deutlich unter der minimalen Nonce-Lebensdauer von WordPress –, löste das Problem sofort und vollständig, weil es die tatsächliche Diskrepanz behebt, statt ein Symptom zu überdecken. Bei der Untersuchung haben wir außerdem eine unabhängige, doppelte Warenkorb-Oberfläche von der Checkout-Seite entfernt, da die Bestellübersicht des Checkouts dieselben Informationen bereits zeigte.

Die wichtigsten Erkenntnisse

  • Ein Antworttext -1 mit HTTP 403 ist fast ein Fingerabdruck einer fehlgeschlagenen WordPress-Nonce-Prüfung – es lohnt sich, ihn auf Anhieb zu erkennen.
  • Die TTL eines Vollseiten-Caches und die Lebensdauer der WordPress-Sicherheitstokens sind zwei Einstellungen, die zueinander passen müssen – und standardmäßig sorgt nichts dafür.
  • Ein sporadischer, scheinbar zufälliger Fehler ist oft eine zeitliche Diskrepanz zwischen zwei Systemen, die jeweils für sich korrekt funktionieren.

Weiterlesen: ein Zeitversatz von sechs Stunden, was Website-Wartung wirklich umfasst.

Stoßen Sie in Ihrem eigenen WooCommerce- oder WordPress-Adminbereich an eine ähnliche Grenze? Sprechen wir darüber – ArtinTech Solution baut genau diese Art von individuellen Shop-Tools.

Share this article

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert