¿Cómo caducar un nonce?

Pregunta:

Soy consciente del hecho de que podemos alterar la vida útil del nonce usando el filtro, 30 segundos aquí:

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

Tengo una función logout () para mi api de descanso. Deseo caducar un nonce que creé después de iniciar sesión correctamente: $nonce = wp_create_nonce( 'login'.$user_id );

Respuesta:

El problema con la expiración de un nonce es que en WordPress, los nonces no son nonces en el sentido más puro del término: "número usado una vez". Más bien, un WP nonce es una (subcadena de a) hash de una cadena que involucra una firma de tiempo en el momento en que se generó, entre otras cosas: ID de usuario, el nombre de la acción y su token de sesión php. Como tal, una vez generado, es lo que es, su fecha de caducidad está incorporada y no puede caducarla (y no puede extenderla).

Editar:

Puede ver cómo está integrado el nonce en 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 );

Se utiliza el mismo conjunto de criterios en wp_verify_nonce() : nonce_tick (que es el elemento de tiempo), action, token y uid se combinan y se codifican en el mismo orden y se comparan con el nonce enviado. Por lo tanto, si alguno de estos ha cambiado, los hash no coincidirán y el nonce se rechazará.

Finalizar edición

WP lo valida solo por si una cadena enviada coincide en el tiempo (a través de hash_equals() php) con un valor esperado que se genera cuando pasa la cadena nonce junto con la acción. Si el nonce y la acción se combinan con su ID de usuario actual y el token de sesión para crear una subcadena hash que coincida con la verificación de hash de tiempo, pasa.

Lo que falta para convertir un nonce de WP en un nonce "verdadero" es una verificación para ver si ya se ha utilizado / procesado una vez antes.

La suposición de seguridad es que no importa, porque incluso si alguien obtiene el nonce y su acción correspondiente, aún deberá enviarlo usando la misma ID de usuario y el token de sesión php con el que se generó, muy poco probable a menos que un pirata informático haya secuestrado su dispositivo y haya iniciado sesión como usted … pero para entonces tiene un tipo diferente de problema de seguridad.

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım