사용자 정의 게시물 유형 관리자에 추가하는 모든 메타 상자에 nonce 필드가 필요합니까?


16

현재 사용자 정의 게시물 유형의 관리 페이지에서 작업 중이며 두 번째 메타 박스에 nonce 필드를 다시 추가할지 여부를 결정하는 데 어려움을 겪었습니다. 나는 맞춤 게시물 유형에 익숙하지 않으며 온라인 검색에서 그다지 많은 결과가 나오지 않습니다.

이견있는 사람? 감사.

답변:


13

그렇게 추천합니다.

데이터의 출처와 사용자의 의도를 확인할 수있는 자신의 nonce가 있어야합니다. 메타 박스에 하나의 nonce 만있는 경우 해당 메타 박스가 제거되면 (숨겨진 것과 동일하지 않은) 문제가 발생합니다. nonce가 더 이상 전송되므로 두 번째 metabox를 제거하면 저장하지 않거나 최소한 저장해야합니다.

물론 보안 관점에서, 하나의 메타 박스 만 업데이트하고 다른 메타 박스는 업데이트하지 않으려는 경우를 제외하고는 두 번째 nonce가 추가되지 않습니다. nonces는 작업에 고유해야합니다 .


편집하다

지적했듯이 포스트 편집 화면에는 하나의 양식 만 있습니다. 따라서 이론 상으로는 데이터의 동작과 출처를 확인하는 하나의 nonce 필드 만 있으면됩니다. 그러나 메타 박스는 하나의 메타 박스에만 nonce 필드를 사용하여 제거 할 수 있으므로 nonce가있을 것이라는 보장은 없습니다. 각 메타 박스에 nonce 필드를 배치하면 데이터를 처리하기 전에 해당 메타 박스의 데이터가 전송되었는지 (실제로 생각했던 위치에서) 있는지 확인할 수 있습니다. 예 :

save_post_call_back($post_id){

  //Check this is not an auto-save route

  if(nonce of metabox1 present and valid){
     //Process data from metabox1
  }else{
    //Either metabox removed - or invalid nonce. Take no action.
  }

  if(nonce of metabox2 present and valid){
     //Process data from metabox2
  }else{
    //Either metabox removed - or invalid nonce. Take no action.
  }

}

nonce 필드 의 이름 은 메타 박스에 고유해야하며 다른 플러그인의 양식에있는 다른 nonces와 충돌하지 않아야합니다.

nonce 은 작업에 고유해야합니다 (일반적으로 데이터의 출처를 포함해야합니다 (예 : 빠른 편집이 아닌 편집 게시)). 나는 일반적으로 게시물 ID도 포함합니다.


흠. 하지만 <form>관리 페이지에는 하나의 태그 만 있습니다. nonce 필드는 양식에 고유해야합니까? tia, @Stephen
아나 반

예, nonce 이름 은 메타 박스마다 고유해야 각 메타 박스에 대해 확인할 수 있습니다. nonce 값은 수행 된 동작과 데이터의 원점에 고유해야합니다 (예 : '빠른 편집'및 일반 편집 화면이 모두 save_post동작을 트리거하기 때문에 ).
Stephen Harris

내가 말하는 것을 분명히하기 위해 업데이트 된 답변 :)
Stephen Harris

문제는 1) 전체 편집 화면에 대해 하나의 양식 태그가 있고 2) 자동으로 nonce가 추가 된 것입니다. 왜 더 추가해야합니까? 그것은 무엇이든 상관없이 항상 nonce를 가질 것입니다 ... 나는 내 대답에서 이것을 지적하고 사람들에게 감사를 표합니다 ... 예를 들어 내용이나 메타 데이터로 페이지를 편집하려는 의도가 있습니다. 하나의 nonce 필드 ... 또한 더 많은 것을 추가하려고 할 때 여러 메타 박스와 함께 작동하지 않습니다!
OZZIE

1
내 대답을 참조하십시오. save_post다양한 컨텍스트에서 호출 될 수 있으므로 nonce는 보장되지 않습니다. 또한 콜백이 실제로 무언가를 해야하는지 확인하는 편리한 방법입니다. nonces를 여러 개 추가 할 때는 고유 한 이름을 사용하십시오. 작동합니다.
Stephen Harris

5

nonce 필드를 추가하지 않는 제출 상자를 연결할 수도 있습니다.

add_action( 'post_submitbox_start', 'theme_submitdiv_extra' );
function theme_submitdiv_extra()
{
  wp_nonce_field( 'theme_meta_box_nonce', 'meta_box_nonce' );
}

그런 다음 save_post 조치에서 :

if( !isset( $_POST['meta_box_nonce'] ) || !wp_verify_nonce( $_POST['meta_box_nonce'], 'theme_meta_box_nonce' ) ) return;

1

nonce 필드는 양식의 내용이 다른 곳이 아닌 현재 사이트의 위치에서 온 것임을 확인하는 데 사용됩니다.

코덱 : wp_nonce_field

양식당 하나의 nonce 필드 만 있으면됩니다.이 필드는 나에게 의미가 없습니다.

check_admin_referer () 를 조사하고 사용 하여 요청이 관리자 페이지에서 온 것인지 확인할 수 있습니다.


-1

WP 3.5.2에서 전체 편집 페이지는 폼 태그로 싸여 있으므로 자신의 폼 태그를 추가해서는 안됩니다 !! 여전히 그렇게하고 다른 별도의 사용자 정의 메타 상자를 추가하려고하면 저장 할 때 실패하고 저장하려고 할 때 wp-admin 홈으로 연결됩니다!

또한 양식 당 하나만 있어야하므로 NONCE 필드를 추가하지 마십시오 (이로 인해 실패 할 수도 있습니다!). 페이지 편집에는 이미 nonce 필드가 있습니다!

편집하다:

정답 작성자가 인정한대로 전체 편집 화면에 하나의 양식 태그 만 있기 때문에 2) 자동으로 nonce가 추가됩니다. 왜 더 추가해야합니까? 그것은 무엇이든 항상 nonce를 가질 것입니다 ...

의도는 편집에 내보기 콘텐츠 또는 메타 데이터에 의해 페이지입니다 예. 하나의 nonce 필드 ... 또한 더 추가하려고 할 때 여러 메타 상자 에서도 작동하지 않습니다 !! 하나는 작동하고 다른 하나는 실패하고 사용자를 wp-admin 홈으로 리디렉션합니다!


당신은 두 가지 질문에 대해 같은 대답을 올렸습니다. 우연입니까? 둘 중 어느 쪽이 답장을 의미 했습니까?
Rarst

실수로 죄송합니다. wp 3.6에서 양식 태그가 추가 된 메타 박스의 firebug 또는 chrome view 구성 요소를 사용하면 게시물의 전체 양식으로 래핑 된 자동 제거됩니다. 그래서 이것이 어떻게 잘못 되었습니까? 그렇다면 왜 nonce 필드를 여러 개 추가 하시겠습니까?
OZZIE

그것을 시도하고 당신은 볼 것이다
OZZIE
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.