Sì, gli utenti di Wordpress possono proteggersi dal login CSRF.
Gli URL di Wordpress possono essere applicati agli URL e anche moduli, come il modulo di accesso:
To add a nonce to a form, call wp_nonce_field() specifying a string
representing the action. By default wp_nonce_field() generates two
hidden fields, one whose value is the nonce and one whose value is the
current URL (the referrer), and it echoes the result. For example,
this call:
wp_nonce_field( 'delete-comment_'.$comment_id );
might echo something like:
<input type="hidden" id="_wpnonce" name="_wpnonce" value="796c7766b1" />
<input type="hidden" name="_wp_http_referer" value="/wp-admin/edit-comments.php" />
Normalmente, gli utenti non creati vengono collegati a un utente che ha effettuato l'accesso perché ha senso proteggere gli utenti che hanno effettuato l'accesso. Login CSRF è speciale perché può essere utilizzato per selezionare come target utente disconnesso registrandoli.
Guardando attraverso il codice wp_create_nonce
, posso vedere che i nonces vengono creati anche per gli utenti che hanno effettuato il logout:
function wp_create_nonce($action = -1) {
$user = wp_get_current_user();
$uid = (int) $user->ID;
if ( ! $uid ) {
$uid = apply_filters( 'nonce_user_logged_out', $uid, $action );
}
$token = wp_get_session_token();
$i = wp_nonce_tick();
return substr( wp_hash( $i . '|' . $action . '|' . $uid . '|' . $token, 'nonce' ), -12, 10 );
}
Quindi usa wp_verify_nonce
per verificare il nonce. Restituisce falso se il nonce non è valido. In caso contrario, restituisce un numero intero con il valore di:
-
1 : se il nonce è stato generato nelle ultime 12 ore o meno.
-
2 : se il nonce è stato generato tra 12 e 24 ore fa.