有什么区别,我应该使用哪个?混淆了我应该使用哪一个以及何时使用。

非常清楚。

评论

风滚草徽章这个问题吗?真?有人吗?

#1 楼

我以为check_admin_referer检查了随机数(它确实调用了wp_verify_nonce和引用网址。在深入研究了核心代码之后,我意识到它没有这样做。我认为这是我报告的错误,Ryan Boren回答了以下内容:


实际上,如果随机数有效,则不应检查引用者。
引用者的不可靠性是使用随机数的原因之一
。随机数替换完全检查引荐来源。我们唯一的一次检查引荐来源是在处理-1向后兼容性
条件时。-1表示某人未使用随机数,因此我们退回
进行引荐检查。现在,这种用法非常罕见。
check_admin_referer()几乎现在从不进行
引荐来源检查,因此命名不当,最好命名为
check_nonce()之类的东西,但我们将其保留为是为了适应旧时代的



所以实际上没有区别。

评论


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

–杰夫
2012年5月16日在22:19

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

–第七钢
15年3月9日在18:41

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

–斯蒂芬·哈里斯(Stephen Harris)
15年9月9日在18:58

#2 楼

没有!注意!!!

如果没有正确的参数,不要指望check_admin_referer()!因为在某些情况下它可能不是die()(与您的期望相反),而是仅返回false响应。

浏览源代码逻辑的概述行为:

function check_admin_referer( $action = -1, $query_arg = '_wpnonce' ) {
    $result   = isset( $_REQUEST[ $query_arg ] ) ? wp_verify_nonce( $_REQUEST[ $query_arg ], $action ) : false;

    //Now, "die() check"
    if ( ! $result && ( -1 !== $action || strpos( wp_get_referer(), admin_url() ) !== 0 ) ) {
        die();
    }
    return $result;
}


因此,您需要了解逻辑的作用。此处的故障:

A)如果仅调用不带参数的check_admin_referrer()


记住,它将使用自动内置的_wpnonce值(即
是安全的,但在提交时仍要牢记该字段。)
您在不带参数的情况下调用它时,它使用默认的-1值进行操作,导致die() check被跳过,功能不会die()

因此,您应该始终使用(在不带参数的情况下调用):随机数并使用参数进行调用:

if ( check_admin_referer() ) exit;