web-dev-qa-db-fra.com

Comment expirer un nonce?

Je suis conscient du fait que nous pouvons modifier le temps de vie nonce en utilisant un filtre, 30 secondes ici:

add_filter( 'nonce_life', function () { return 30; } );

J'ai une fonction logout () pour mon repos api .Je souhaite expirer un nonce que j'ai créé après une connexion réussie: $nonce = wp_create_nonce( 'login'.$user_id );

5
Divyanshu Jimmy

Le problème avec l'expiration d'un nonce est que, dans WordPress, les nonces ne sont pas des nonces au sens le plus pur du terme: "nombre utilisé une fois". Plutôt, un WP _ est un (hachage d'un) hachage d'une chaîne comportant une signature temporelle au moment où il a été généré, entre autres choses: ID utilisateur, le nom de l'action et votre jeton de session php. En tant que tel, une fois généré, c’est ce qu’il est, sa date de péremption est précisée et vous ne pouvez pas l’expirer (et vous ne pouvez pas le prolonger).

Modifier:

Vous pouvez voir comment le nonce est construit dans wp-includes/pluggable.php:

function wp_create_nonce($action = -1) {
    $user = wp_get_current_user();
    $uid = (int) $user->ID;
    if ( ! $uid ) {
        /** This filter is documented in wp-includes/pluggable.php */
        $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 );

Le même ensemble de critères est utilisé dans wp_verify_nonce(): nonce_tick (qui est l'élément time), l'action, le jeton et l'uid sont tous combinés et hachés dans le même ordre et comparés au nonce soumis. Donc, si l'un d'entre eux a changé, les hachages ne correspondront pas et le nonce sera rejeté.

Terminer la modification

WP la valide uniquement en vérifiant si une chaîne de temps soumise correspond (via la fonction hash_equals() de php) à une valeur attendue générée lorsque vous transmettez la chaîne sans mot avec l'action. Si le nonce et l'action se combinent avec votre ID utilisateur actuel et votre jeton de session pour créer une sous-chaîne de hachage qui correspond à la vérification time-hash, vous réussissez.

Ce qui manque pour faire un WP un un "vrai" nonce est un contrôle pour voir s'il a déjà été utilisé/traité une fois auparavant.

L'hypothèse de sécurité est que cela n'a pas d'importance, car même si quelqu'un récupérait le nonce et l'action correspondante, vous auriez toujours besoin de le soumettre en utilisant le même identifiant d'utilisateur et le même jeton de session php sous lesquels il avait été généré - ce qui est hautement improbable. sauf si un pirate informatique a piraté votre appareil et est connecté en tant que vous ... mais vous avez alors un problème de sécurité différent.

6
Caspar