wp_verify_nonce vs check_admin_Vferer


21

Sự khác biệt, cái nào tôi nên sử dụng?

Tôi biết rằng wp_verify_nonce kiểm tra giới hạn thời gian và check_admin_Vferer Tôi nghĩ rằng gọi wp_verify_nonce cũng như kiểm tra phân đoạn url của quản trị viên, nhưng tôi hơi bối rối không biết nên sử dụng phân đoạn nào và khi nào.

Cảm ơn sự rõ ràng.


1
Huy hiệu Tumbleweed cho câu hỏi này? Có thật không? Bất kỳ ai?
Jeff

Câu trả lời:


29

Tôi nghĩ rằng check_admin_refererđã kiểm tra các nonce (nó gọi wp_verify_nonce, url ám Sau khi đào sâu vào các mã lõi tôi nhận ra rằng nó đã không làm điều này Suy nghĩ đó là một lỗi Tôi đã báo cáo nó, và Ryan Boren trả lời như sau..:

Trên thực tế, nếu nonce là hợp lệ, người giới thiệu không nên được kiểm tra. Sự không đáng tin cậy của người giới thiệu là một trong những lý do mà nonces được sử dụng. Nonces thay thế kiểm tra giới thiệu hoàn toàn. Lần duy nhất chúng tôi kiểm tra người giới thiệu là khi xử lý điều kiện tương thích ngược -1. -1 có nghĩa là ai đó không sử dụng nonces nên chúng tôi quay lại kiểm tra người giới thiệu. Việc sử dụng này bây giờ rất hiếm. check_admin_Vferer () bây giờ được đặt tên rất tệ vì nó gần như không bao giờ kiểm tra tham chiếu. Nó sẽ được đặt tên tốt hơn một cái gì đó như check_nonce (), nhưng chúng tôi giữ nó như là cho compat trở lại và vì lợi ích thời xưa.

Vì vậy, trong thực tế không có sự khác biệt.


Công việc đào đẹp, cảm ơn, điều đó mang lại một số rõ ràng.
Jeff

5
Thực tế có một sự khác biệt lớn ảnh hưởng đến việc sử dụng ... check_admin_Vferer sẽ giết toàn bộ tập lệnh bằng die () nếu nonce không hợp lệ, trong khi wp_verify_nonce trả về false. Vì vậy, nếu có một số trường hợp bình thường nhất định trong đó nonce sẽ thất bại, hãy sử dụng wp_verify_nonce để phần còn lại của tập lệnh vẫn thực thi.
SeventhSteel

@SeventhSteel - bạn tất nhiên là đúng. Giải thích của tôi về câu hỏi là logic kiểm tra các lực lượng được so sánh hơn là những gì xảy ra khi nó không hợp lệ
Stephen Harris

3

KHÔNG!!!

Đừng tin tưởng check_admin_referer, hãy cẩn thận!

  • wp_verify_nonechỉ bao gồm trong trường hợp khi _wpnonceđược thiết lập !!!
  • Trong trường hợp đó, nó không DIE(). Thay vào đó, nó trả về false ...

Xem qua mã giả này ( nguồn đầy đủ ở đây ):

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;
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.