wp_verify_nonce 및 check_admin_referer


21

어떤 차이점을 사용해야합니까?

wp_verify_nonce는 시간 제한을 확인하고 check_admin_referer는 wp_verify_nonce를 호출하고 관리자 URL 세그먼트를 확인하는 것으로 생각하지만 어느 것을 사용해야하고 언제 사용 해야하는지 조금 혼란 스럽습니다.

명확성을 주셔서 감사합니다.


1
이 질문에 대한 Tumbleweed 배지? 정말? 누군가?
Jeff

답변:


29

나는 nonce (call , and url 참조) 를 확인 했다고 생각 했습니다 . 핵심 코드를 파고 들었을 때 이것이 그렇게하지 않았다는 것을 깨달았습니다. 버그라고 생각하고 Ryan Boren은 다음과 같이 대답했습니다.check_admin_refererwp_verify_nonce

실제로, nonce가 유효하면 리퍼러를 검사하지 않아야합니다. 리퍼러의 신뢰성은 논 스가 사용되는 이유 중 하나입니다. 넌 스는 리퍼러 검사를 완전히 대체합니다. 리퍼러를 확인하는 유일한 시간은 -1 이전 버전과의 호환성 조건을 처리 할 때입니다. -1은 누군가 nonces를 사용하지 않으므로 참조 자 확인으로 넘어갑니다. 이 사용법은 이제 매우 드 rare니다. check_admin_referer ()는 리퍼러 검사를 거의 수행하지 않으므로 이름이 잘못되었습니다. check_nonce ()와 같은 이름을 사용하는 것이 더 좋지만, 백 컴포지트와 옛날 술을 위해 그대로 유지합니다.

실제로 차이는 없습니다.


좋은 파기 작업 덕분에 선명도가 높아졌습니다.
Jeff

5
실제로 사용량에 영향을 미치는 한 가지 큰 차이가 있습니다 ... check_admin_referer는 nonce가 유효하지 않으면 die ()로 전체 스크립트를 종료하지만 wp_verify_nonce는 false를 반환합니다. 따라서 nonce가 실패 할 정상적인 상황이있는 경우, 나머지 스크립트가 계속 실행되도록 wp_verify_nonce를 사용하십시오.
SeventhSteel

@SeventhSteel-당신은 물론 맞습니다. 이 질문에 대한 나의 해석은 논스를 검사하는 논리가 잘못되었을 때 발생하는 것보다 비교되고 있다는 것입니다.
Stephen Harris

3

아니!!!

의지하지 마십시오 check_admin_referer, 조심하십시오!

  • 설정된 wp_verify_none경우에만 포함 됩니다 _wpnonce!!!
  • 이 경우에는 그렇지 않습니다 DIE(). 대신 거짓을 반환합니다 ...

이 의사 코드를 살펴보십시오 ( 전체 소스는 여기에 있습니다 ).

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;
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.