WordPress aktualisiert das Nonce-Token auf dem Server nicht

Lesezeit: 4 Minuten

Ich habe ein ähnliches Formular in meinem Plugin:

<!-- Client form -->
<form>
   <?php wp_nonce_field('my_form','_my_token'); ?>
   <!-- Additional form fields -->
</form>

es generiert diese beiden Felder:

<input type="hidden" id="_my_token" name="_my_token" value="abcdefghij" />
<input type="hidden" name="_wp_http_referer" value="/wp-admin/tools.php?page=my-plugin%2Fplugin.php" />

Wenn ich dieses Formular absende, bestätige ich es wie folgt:

//Server's side check
if(!wp_verify_nonce($_POST['_my_token'],'my_form')){
   echo 'Invalid token! Expected token: '. wp_create_nonce( 'my_form');
   exit;
} 

Das Problem ist, dass sich das Token auf dem Server nie ändert, es ist immer dasselbe, und die Validierung schlägt in diesem Schritt immer fehl. Wenn ich mich von WordPress abmelde und dann wieder anmelde, hat sich auf dem Client-Token geändert, aber auf dem Server ist es dasselbe.

Ich habe dies lokal getestet und wenn ich mich wieder anmelde, ändert es immer das Token auf beiden Seiten, aber in meiner Produktionsumgebung ändert es sich nur auf der Client-Seite.

Es sieht so aus, als wäre es irgendwie zwischengespeichert, aber ich bin mir nicht sicher, was genau sein könnte. Ich habe das Plugin WP Super Cache verwendet, aber es ist jetzt deaktiviert und dieses Problem besteht weiterhin. Ich habe die Multisite-Funktion auf meiner Produktionssite aktiviert, aber ich glaube nicht, dass das damit zusammenhängt. Irgendwelche Ideen?

  • Haben Sie versucht, den Cache physisch zu löschen?

    – serraosays

    16. März 2016 um 14:31 Uhr

  • Ich habe überprüft, dass es keinen Cache-Ordner unter wp-content gibt, nachdem ich den Cache aus dem WP SC-Plugin gelöscht habe. Ich habe es schließlich entfernt und nichts hat sich geändert.

    – Gradosevic

    16. März 2016 um 17:59 Uhr

  • Eine andere Idee – vielleicht hat Ihre Nonce funktioniert und ist jetzt in Ihrer DB. Und weil es da ist und Sie immer wieder versuchen, dasselbe zu senden, lehnt es die Anfrage ab. Versuchen Sie, Ihre DB in einem Texteditor zu betrachten, löschen Sie die Nonce manuell und schieben Sie diese DB in den prod sans Cache.

    – serraosays

    17. März 2016 um 19:58 Uhr

  • Ich glaube, dass das, wie Sie sagten, ein Cache-Problem ist. Vielleicht hast du Cache auf deinem DNS? so etwas wie ein CDN, das sich nur beim Zugriff auf Ihre Website über die Domain auswirken würde. Das würde Sinn machen, da es nicht lokal passiert.

    – Ben Yitzhaki

    13. April 2016 um 7:46 Uhr

Benutzer-Avatar
Stefan Samuel

Was ist der Zeitrahmen, in dem Sie erwarten, dass sich Ihre Nonce ändert?

Bei aufeinanderfolgenden Aktualisierungen ohne weitere Änderungen kann die Nonce zwischen Seitenladevorgängen identisch sein. Wenn Sie dort sitzen und F5 drücken, erhalten Sie im Grunde die gleiche Nonce.

Dies ist beabsichtigt. Die idempotente Erstellung von Nonces innerhalb eines kurzen Zeitrahmens ist erforderlich, um sie für die Validierung zu verwenden.

Wenn dies nicht so funktionieren würde, wären Sie im Grunde genommen nie in der Lage, Ihre Nonce zu verifizieren. Wenn Sie es erstellt haben, wäre der Wert eine Sache, und wenn Sie es neu erstellen würden, um es zu überprüfen, wäre der Wert eine andere. Die Validierung würde immer fehlschlagen.

wp_verify_nonce() kann Akzeptieren Sie eine Nonce (alle anderen gleich) für bis zu 24 Stunden (siehe die WP Codex-Seite). Möglicherweise müssen Sie länger warten, um eine andere Nonce zu erhalten.

Andere Systemereignisse, die auftreten können, können dazu führen, dass eine neue Nonce generiert wird. Ich musste dies noch nie selbst tun, aber es scheint, dass Sie es verwenden können wp_nonce_tick() diesen Prozess zu joggen.

Es ist möglich, dass eines oder beides wp_create_nonce() (direkt verwendet von wp_nonce_field()) und wp_verify_nonce() möglicherweise von einem Plugin neu geschrieben, da sie beide in definiert sind pluggable.php und soll zum Überschreiben verfügbar sein. Ein gut geschriebenes WP-fähiges CDN oder eine andere Cache-Lösung kann genau das tun, um Sitzungen beizubehalten. Ich weiß nicht, ob Super Cache dies tut oder nicht.

Alternativ, und wenn Ihre Systemkonfiguration dies nicht bereits tut, können Sie diese Funktionen selbst umschreiben. Dies wäre Sicherheitscode, und seien Sie beim Schreiben von Sicherheitscode vorsichtig: Die größte Rettung von Open-Source-Sicherheitscode ist, dass er Peer-Review ist und Ihr (neuer) Code wahrscheinlich nicht derselbe sein wird.

1368030cookie-checkWordPress aktualisiert das Nonce-Token auf dem Server nicht

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy