it-swarm.com.de

Nonces und Cache

Es ist klar, dass Formularübermittlungen und AJAX Anfragen, insbesondere solche mit Sinn, "Nonces" benötigen, um bestimmte Exploits zu vermeiden. Bei starkem Einsatz von Cachesystemen wird es jedoch schwieriger, sie zu generieren und neue Nonces anstelle von zwischengespeicherten auszugeben.

Um das Problem zu lösen, dachte ich darüber nach, eine AJAX -Funktion zu erstellen, die eine neue Nonce zurückgibt, die angefordert werden muss, bevor ein Formular gesendet wird. Diese Nonce wird dann als verstecktes Feld an das Formular angehängt.

Denken Sie, dass es ein sicherer Ansatz ist?

PHP Funktion um eine neue Nonce zurückzugeben:

function create_nonce() {
    return wp_create_nonce('my-nonce');
}

add_action('wp_ajax_create_nonce', 'create_nonce');
add_action('wp_ajax_nopriv_create_nonce', 'create_nonce');

Senden Sie das Formular ( request () ist eine benutzerdefinierte Funktion, die ich erstellt habe, um Ajax-Anfragen einfach zu stellen):

$('form').on('submit', function(e){
    e.preventDefault();
    var $form = $(this);

    request('create_nonce', function(nonce){
         // Append the fresh nonce to the form
         $form.append('<input type="hidden" name="nonce" value="'+nonce+'">');

         // Proceed with the form submission...
    });
});
3
gyo

Ich weiß, dass diese Frage uralt ist, aber nein, sie ist nicht sehr sicher.

Jeder, der den AJAX -Endpunkt kennt, könnte gültige Nonces generieren, die den Zweck in erster Linie zunichte machen.

Abgesehen davon sind Nonces in erster Linie eine schwache Verteidigung: Sie stoppen nur die einfachsten Angriffe. Ein cleverer Angreifer hätte Ihre Homepage von Anfang an gecrawlt und alle Nonces verschlungen (die heutzutage eine Standardlebensdauer von 24 Stunden haben) und dann nur diese Nonce für den Angriff verwendet. Ihr AJAX -Endpunkt vereinfacht diese Aufgabe nur geringfügig.

BEARBEITEN

Wie Janh betonte, sollte eine Ajax-generierte Nonce in Ordnung sein, solange Nonces benutzerspezifisch sind, was bedeutet, dass eine Nonce nur für einen bestimmten Benutzer funktioniert. Möglicherweise müssen Sie jedoch etwas mehr Informationen über den AJAX -Endpunkt senden, damit die zurückgegebene Nonce an den richtigen Benutzer gebunden ist.

0
DarkNeuron