wp_verify_nonce与check_admin_referer


21

有什么区别,我应该使用哪一个?

我知道wp_verify_nonce会检查时间限制,而我认为check_admin_referer会调用wp_verify_nonce并检查管理url段,但是我对应该使用哪个以及何时使用感到有些困惑。

感谢您的澄清。


1
风滚草徽章这个问题吗?真?任何人?
杰夫

Answers:


29

以为check_admin_referer检查的随机数(它的呼叫wp_verify_nonce引用URL挖掘到核心代码后,我意识到,它没有这样做,我以为这是一个错误我报告说,它和赖恩·博伦说有以下。:

实际上,如果随机数有效,则不应检查引荐来源。引荐来源网址不可靠是使用随机数的原因之一。随机数完全替换引荐来源网址检查。我们唯一检查引荐来源网址的时间是在处理-1向后兼容条件时。-1表示某人没有使用随机数,因此我们退回到引荐来源检查。现在,这种用法非常罕见。由于几乎从未进行引荐来源检查,因此check_admin_referer()的名称很错误。最好将其命名为诸如check_nonce()之类的名称,但出于回溯兼容和旧时代的考虑,我们将其保持原样。

因此,实际上没有任何区别。


很好的挖掘工作,谢谢,这带来了一些清晰度。
杰夫

5
实际上,有一个很大的差异会影响使用情况...如果随机数无效,则check_admin_referer使用die()杀死整个脚本,而wp_verify_nonce返回false。因此,如果在某些正常情况下随机数会失败,请使用wp_verify_nonce,以便脚本的其余部分仍然可以执行。
SeventhSteel

@SeventhSteel-您当然正确。我对这个问题的解释是,正在比较检查随机数的逻辑,而不是当其无效时会发生什么
Stephen Harris

3

没有!!!

不要指望check_admin_referer,要小心!

  • wp_verify_none仅包括在_wpnonce设置时的情况!!!
  • 在这种情况下,它不会DIE()。相反,它返回false。

查看以下伪代码(完整源代码在 这里):

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;
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.