wp_verify_nonce vs check_admin_referer

20

Qual é a diferença, qual devo usar?

Eu sei que o wp_verify_nonce verifica o limite de tempo, e o check_admin_referer eu acho que chama o wp_verify_nonce, bem como a verificação de um segmento de url do administrador, mas estou um pouco confuso sobre qual devo usar e quando.

Obrigado pela clareza.

    
por Jeff 05.04.2012 / 18:45

2 respostas

25

Eu pensei que check_admin_referer verificou o nonce (ele chama wp_verify_nonce , e o URL de referência. Depois de cavar o código principal, percebi que ele Não faça isso, pensando que foi um bug que eu relatei, e Ryan Boren respondeu com o seguinte:

  

Na verdade, se o nonce for válido, o referenciador não deve ser verificado.   A falta de confiabilidade dos referenciadores é uma das razões pelas quais as nonces são   usava. Nonces substitui a verificação do referrer completamente. A única vez que nós   verifique se o referenciador está lidando com a compatibilidade com versões anteriores do -1   condição. -1 significa que alguém não está usando nonces, então nós recorremos   para verificar o referenciador. Este uso é agora muito raro.   check_admin_referer () é mal nomeado agora que quase nunca faz   verificação de referência. Seria melhor chamado algo como   check_nonce (), mas nós mantemo-lo como é para compat de volta e velhos tempos   amor.

Então, de fato, não há diferença.

    
por Stephen Harris 15.05.2012 / 22:13
1

NÃO !!!

Não conte com check_admin_referer , tenha cuidado!

  • Inclui wp_verify_none apenas no caso em que _wpnonce foi definido !!!
  • Nesse caso, não DIE() . Em vez disso, retorna falso ...

Olhe através deste phseudo-código ( fonte completa é aqui ):

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;
}
    
por T.Todua 20.03.2017 / 22:01