Estou tentando entender a higienização de dados (não a validação de dados) para me ajudar a escrever temas seguros para o WordPress. Pesquisei na Internet tentando encontrar um guia abrangente para desenvolvedores de temas, detalhando as melhores práticas. Me deparei com alguns recursos, incluindo a página do codex intitulada Validação de Dados, embora nenhum fosse útil para mim. A página do codex lista as funções de higienização disponíveis, seu uso e o que elas fazem, mas falha ao explicar por que você usaria uma sobre a outra ou em que situação você usaria uma função de higienização específica. O objetivo desta publicação é solicitar a todos que contribuam com exemplos de código inválido / não autorizado e como ele deve ser reescrito para uma limpeza adequada. Pode ser um código geral para higienizar o título da postagem ou post thumnails src ou códigos mais elaborados que lidam com a higienização de$_POST
dados para solicitações do Ajax.
Além disso, eu gostaria de saber se as funções do WordPress para adicionar / atualizar o banco de dados (por exemplo, as mencionadas no bloco de código abaixo) cuidam automaticamente do trabalho de higienização para você? Se sim, existem exceções quando você tomaria medidas adicionais para limpar os dados enviados para essas funções do WordPress?
add_user_meta
update_user_meta
add_post_meta
update_post_meta
//just to name a few
Além disso, a higienização precisa ser feita de maneira diferente ao ecoar HTML no PHP e contra o PHP embutido no HTML? Para ser mais claro sobre o que estou perguntando, aqui está o código:
<?php echo '<div class="some-div ' . $another_class . '" data-id="' . $id . '" >' . $text . '</div>'; ?>
<div class="some-div <?php echo $another_class; ?>" data-id="<?php echo $id; ?>"><?php echo $text; ?></div>
Ambas as afirmações acima alcançam a mesma coisa. Mas eles precisam ser santificados de maneira diferente?
Respostas:
Esta página do codex explica muito bem, eu acho.
A função mais importante e mais usada é provavelmente
esc_attr
. Veja este exemplo:Se
$author_name
contém um"
personagem, você fecha seu atributo e, se ele for seguidoonclick="do_something();"
, pode piorar :)Doing
print esc_attr($author_name)
garante que esses caracteres sejam codificados e o navegador não faz o que não deveria.Há um caso em que você não precisa: quando você está esperando um número, nesse caso, você pode simplesmente converter os dados de entrada em números inteiros, por exemplo:
As funções meta * listadas lá já cuidam da limpeza da entrada para armazenamento de banco de dados, para que você não precise se preocupar com isso.
O
wpdb->prepare()
método precisa ser usado quando você mesmo faz as consultas ao banco de dados. Aqui está um exemplo:As palavras
%s
-%d
chave e serão substituídas pelos seus valores higienizados de $ _POST.Um erro muito comum que vejo em muitos plugins no repositório do WP.org é passar uma consulta já preparada para ele (e mal preparada), como:
Não faça isso :)
Não.
fonte
Este vídeo de Mark Jaquith esclareceu tudo para mim. http://wordpress.tv/2011/01/29/mark-jaquith-theme-plugin-security/
fonte