wp_verify_nonce vs check_admin_referer

20

¿Cuál es la diferencia, cuál debo usar?

Sé que wp_verify_nonce verifica el límite de tiempo y check_admin_referer Creo que se llama wp_verify_nonce, así como la comprobación de un segmento de url de administración, pero estoy un poco confundido sobre cuál debo usar y cuándo.

Gracias por la claridad.

    
pregunta Jeff 05.04.2012 - 18:45

2 respuestas

25

Pensé que check_admin_referer verificó el nonce (llama wp_verify_nonce , y la url de referencia. Después de buscar en el código del núcleo, me di cuenta de que sí lo hizo. No hagas esto. Pensando que era un error lo informé y Ryan Boren respondió con lo siguiente:

  

En realidad, si el nonce es válido, no se debe verificar el referente.   La falta de confiabilidad de los remitentes es una de las razones por las cuales los nonces son   usado. Nonces reemplaza la comprobación de referencias por completo. La única vez que   compruebe que la referencia es cuando se maneja la compatibilidad con versiones anteriores -1   condición. -1 significa que alguien no está usando nonces así que nos echamos atrás   para consultar la referencia. Este uso es ahora muy raro.   check_admin_referer () está mal llamado ahora que casi nunca lo hace   comprobación de referencias. Sería mejor nombrar algo como   check_nonce (), pero lo mantenemos tal como está para las versiones anteriores y los viejos tiempos   bien.

Así que de hecho no hay diferencia.

    
respondido por el Stephen Harris 15.05.2012 - 22:13
1

NO !!!

No cuente con check_admin_referer , ¡Tenga cuidado!

  • ¡Incluye wp_verify_none solo en caso de que _wpnonce se haya establecido!
  • En ese caso, no hace DIE() . En su lugar, devuelve falso ...

Mire este phseudo-código ( la fuente completa es aquí ):

function check_admin_referer( $action = -1, $query_arg = '_wpnonce' ) {
    .....
    $result = isset($_REQUEST[$query_arg]) ? wp_verify_nonce($_REQUEST[$query_arg], $action) : false;
    do_action( 'check_admin_referer', $action, $result );
    if ( ! $result && ! ( -1 == $action && strpos( $referer, $adminurl ) === 0 ) ) {
        die(...);
    }
    return $result;
}
    
respondido por el T.Todua 20.03.2017 - 22:01

Lea otras preguntas en las etiquetas