ajax: ¿por qué varias llamadas a wp_create_nonce () devuelven el mismo valor?

4

Tengo algunos problemas para que los nonces trabajen con mi formulario de envío ajax.

En primer lugar, creo un nonce y lo paso a mi script registrado, luego lo enviaré a ajax-handler con mis campos de formulario:

wp_localize_script( 'roll_script', 'Roll', array(
                    'postRollNonce' => wp_create_nonce('nonce-roll')));

En mi controlador ajax-response, verifico el nonce, hago mis cosas y trato de crear un nuevo nonce para enviar a js, para enviarlo más tarde:

        function on_ajax_roll(){
            if (!wp_verify_nonce($_POST['postRollNonce'], 'nonce-roll' )) die ('No allowed!');
// nonce is valid! do some stuff...     
            $r = array('postRollNonce' => wp_create_nonce('nonce-roll'));           
            $response = json_encode($r);
            header( "Content-Type: application/json" );
            echo $response;
            die();
    }

... pero, volviendo a mi js, ¡el nuevo objeto es exactamente el mismo que el anterior! Como se supone que Nonce cambia con el tiempo, ¿por qué una segunda llamada a wp_create_nonce devuelve la misma cadena?

    
pregunta Gabriele B 14.04.2011 - 16:25

1 respuesta

6

De forma predeterminada, la vida útil de un evento es de un día. El nonce se genera mediante la concatenación de una variable que representa el día actual, la identificación del usuario y el nombre de la acción, y el hashing de la cadena resultante.

Si desea que el valor de nonce cambie con más frecuencia, puede filtrar el valor 'nonce_life'. Esta función, por ejemplo, obligará a los usuarios a cambiar cada hora:

function nonce_hourly() {
    return 3600;
    }
add_filter( 'nonce_life', 'nonce_hourly' );

Pero esto tampoco suena exactamente como lo que intentas hacer. Es posible que tenga más suerte al generar el tipo de nonces únicos que desea al usar un nombre diferente para el valor de "acción" del nonce, uno que será verdaderamente único para la acción específica que está intentando realizar. Parece que estás usando "nonce-roll" como el nombre de la acción para algunas acciones distintas que deseas poder verificar por separado. Tal vez puedas usar un nombre de acción más específico para cada acción que intentas realizar y autorizar.

    
respondido por el goldenapples 14.04.2011 - 19:43

Lea otras preguntas en las etiquetas