Comment expirer un nonce?

4

Je suis conscient du fait que nous pouvons modifier le temps de vie à l’aide d’un filtre, 30 secondes ici:

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

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

    
posée Divyanshu Jimmy 15.04.2016 - 20:54

1 réponse

4

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 nonce est un (sous-chaîne d'un) hachage d'une chaîne impliquant 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 l’étendre).

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’une d’elles a changé, les hachages ne correspondront pas et le nonce sera rejeté.

Terminer la modification

WP ne la valide que si une chaîne de caractères soumise correspond à la valeur attendue (via php hash_equals() ) générée lorsque vous transmettez la chaîne de nonce avec l'action. Si le nonce et l'action se combinent avec votre identifiant d'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 d'un WP nonce 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 utilisateur et le même jeton de session php sous lesquels il a été généré - - Très peu probable à moins qu'un pirate informatique ait piraté votre appareil et qu'il soit connecté en tant que tel ... mais que vous avez alors un autre type de problème de sécurité.

    
réponse donnée Caspar 18.04.2016 - 22:21

Lire d'autres questions sur les étiquettes