Preciso de um campo nonce para cada caixa meta adicionada ao meu administrador de tipo de postagem personalizado?


16

Atualmente, estou trabalhando na página de administração do meu tipo de postagem personalizada e fiquei parado ao decidir se deveria adicionar um campo nonce novamente para a segunda metabox ou não. Sou muito novo em tipos de postagem personalizados, e pesquisar on-line sobre isso realmente não gera muitos resultados.

Alguma ideia? Obrigado.

Respostas:


13

Eu recomendaria isso.

Você (e deve) ter sua própria noção para verificar a origem dos dados e a intenção do usuário. Se você tiver apenas um nonce para um metabox - terá problemas se esse metabox for removido (não o mesmo que oculto). Se removido, o segundo metabox nunca (ou pelo menos deve) será salvo, pois o nonce é enviado por mais tempo.

Obviamente, do ponto de vista da segurança, nada é adicionado por um segundo nonce - a menos que você deseje atualizar apenas um metabox e não o outro: nonces devem ser exclusivos da ação .


Editar

Conforme indicado, existe apenas um formulário para a tela de pós-edição. Portanto, em teoria, você precisa apenas de um campo diferente para validar a ação e a origem dos dados. No entanto, como os metaboxes podem ser removidos - tendo um campo nonce em apenas um metabox, não há garantia de que o nonce estará lá. Ao colocar um campo nonce em cada metabox, você pode verificar se os dados desse metabox foram enviados (e realmente são de onde você pensa que são) antes de processar qualquer dado. Por exemplo:

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.
  }

}

O nome do campo nonce deve ser exclusivo para o metabox (e não entrar em conflito com outros nonces presentes no formulário de outros plug-ins).

O valor de nonce deve ser exclusivo da ação (e isso geralmente deve incluir a origem dos dados (por exemplo, editar postagem ao invés de edição rápida)). Geralmente, também incluo o ID da postagem.


Hmm. mas há apenas uma <form>tag na página de administrador. o campo nonce deve ser exclusivo do formulário ou não? tia, @Stephen
Ana Ban

Sim, portanto, o nome do nonce deve ser exclusivo da metabox, para que você possa verificá-lo para cada metabox. O valor de nonce deve ser exclusivo para a ação executada e a origem dos dados (por exemplo, uma vez que 'edição rápida' e a tela de edição normal acionam a save_postação).
Stephen Harris

resposta atualizado para esclarecer espero que o que estou dizendo :)
Stephen Harris

O problema é 1) uma vez que existe apenas uma tag de formulário para toda a tela de edição e 2) ela automaticamente adiciona um nonce a ela. Por que você teria que adicionar mais? Sempre terá o nonce, não importa o que aconteça ... Eu apontei isso na minha resposta e recebi votos negativos, obrigado pessoal ... A intenção é, na minha opinião, editar a página por conteúdo ou metadados, por exemplo. um campo nonce ... Além disso, quando tentei adicionar mais, ele nem funciona com várias meta-caixas!
OZZIE

1
Veja minha resposta. save_postpode ser chamado de vários contextos, portanto, um nonce não é garantido. Também é uma maneira conveniente de verificar se seu retorno de chamada realmente precisa fazer alguma coisa. Ao adicionar vários nonces, use nomes exclusivos. Isso funciona.
Stephen Harris

5

Você também pode conectar a caixa de envio que nunca desaparece adicionando o campo nonce a ela

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

Em seguida, na sua ação save_post:

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

1

O campo nonce é usado para validar que o conteúdo do formulário veio do local no site atual e não de outro lugar.

codex: wp_nonce_field

apenas um campo diferente de cada formulário é necessário, use mais do que um como não faz sentido para mim.

talvez você possa investigar e usar check_admin_referer () para garantir que sua solicitação seja de uma página de administrador


-1

No WP 3.5.2 A página de edição inteira é agrupada em uma tag de formulário, portanto você NÃO deve adicionar suas próprias tags de formulário !! Se ainda fizer isso e tentar adicionar outra meta box personalizada separada, ela falhará ao salvar e só levará você à página inicial do wp-admin ao tentar salvar!

Também NÃO adicione o campo NONCE, pois deve haver apenas um por formulário (isso também pode fazer com que falhe !!) E a edição da página já possui um campo nonce!

Editar:

O problema é 1) uma vez que existe apenas uma tag de formulário para toda a tela de edição, como o autor da resposta correta admitiu e 2) ela automaticamente adiciona um nonce a ela. Por que você teria que adicionar mais? Sempre terá o nonce, não importa o que ...

A intenção é, na minha opinião, editar a página por conteúdo ou metadados, por exemplo. um campo nonce ... Além disso, quando tentei adicionar mais, ele nem funciona com várias meta-caixas ! Um funcionará e o outro falhará e só redirecionará o usuário para o wp-admin home!


Você postou a mesma resposta em duas perguntas, foi acidental? Qual dos dois você quis responder?
Rarst

Desculpe acidentalmente, este. Se você usar o componente firebug ou chrome view de uma meta box adicionada com uma tag de formulário no wp 3.6, ele será automaticamente removido e envolto em todo o formulário para a postagem. Então, como isso está errado? Por que você adicionaria vários campos nonce então?
OZZIE

experimentá-lo e você vai ver
OZZIE
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.