2017-12-29 7 views
1

Ich habe ein Formular in meiner WordPress-Site (4.9.1), das ein Nonce-Feld (mit wp_nonce_field()) enthält und das in admin-post.php gepostet wird.wp_nonce_field wird nicht validiert

ich es auf eine sehr einfache Art und Weise verwenden ...:

<?php wp_nonce_field($action, 'referer'); ?> 

... erzeugt, das etwa so:

<input type="hidden" id="referer" name="referer" value="d6dd8e58dd" /> 
<input type="hidden" name="_wp_http_referer" value="/slug/?laorder=99371&amp;laid=92bbfca59e41a4938ce8c0751cfcd0c4a68e75c14bd94b981505cc037079280&amp;lauser=myemail%domain.com" /> 

Das Problem ist, über die Validierung:

if (! isset($_POST['referer']) || ! wp_verify_nonce($_POST['referer'], $action)) 

schlägt unter einigen (unbekannten) Umständen fehl: Es scheint immer zu funktionieren, wenn im Inkognito-Modus gepostet wird, und es scheitert zufällig für einige u sers mit verschiedenen Browsern (Chrome, Firefox oder Safari).

Alle Benutzer sind Gäste.

Weiß jemand, warum dieses zufällige Verhalten passiert?

Antwort

1

Wie Sie gesagt haben, sind alle Benutzer Gäste und keiner von ihnen ist angemeldet, aber Sie sollten keine Nonce für nicht angemeldete Benutzer verwenden. Sie sollten keine Ncces in einem vollständigen oder teilweisen Seitenzwischenspeicherszenario verwenden. Anders als der Eindruck, der oft gegeben wird, streicht Nonce hier und da ohne besonderen Grund nicht die Sicherheit der Websites, und kann tatsächliche Probleme für nicht angemeldete Benutzer verursachen.

weil WordPress Ihre Authentifizierungs-Cookie-Informationen validiert und wenn Sie diesen Beitrag löschen dürfen, werden Sie ihn löschen. Was ein Angreifer damit tun kann, ist, dass Ihr Browser ohne Ihr Wissen zu dieser URL geht. Zum Beispiel indem du einen Link auf einer Seite eines Drittanbieters erstellst. Zum Beispiel mit:

<img src="http://example.com/wp-admin/post.php?post=123&action=trash" /> 

Darin. Dies würde Ihren Browser veranlassen, eine Anfrage an WordPress zu senden, der Browser würde automatisch Ihr Authentifizierungs-Cookie anhängen und WordPress würde dies als eine gültige Anfrage betrachten.

source