Conforme sugerido nesta pergunta , estou adicionando este tópico como uma nova pergunta para discussão / votação da comunidade sobre as práticas recomendadas para segurança de plug-ins / temas.
Aqui está a lista de verificação inicial, com base nas minhas configurações atuais (em andamento) / lista de verificação de segurança de dados usada para revisar Temas (os princípios não devem ser diferentes para Plugins do que são para Temas).
Se você quiser conferir um tema com uma página de configurações de tema segura e com código sólido, confira este tema:
http://wordpress.org/extend/themes/coraline
Respostas:
Use Nonces (quando não estiver usando a API de configurações)
Os plug-ins e os temas devem fornecer explicitamente a verificação nonce da página Configurações, se não estiver usando a API Configurações:
fonte
Sanitize, valide e escape de dados
Desinfecte qualquer coisa que possa entrar e sair do (!) Banco de dados, tanto no front-end quanto no back-end!
Plugins e Temas devem executar a validação de dados adequada:
Escape de todos os dados não confiáveis antes de serem exibidos nos arquivos de modelo de tema
Plug-ins e temas devem ser usados
esc_attr()
para entradas de texto e /esc_html()
ouesc_textarea()
para áreas de texto.Também disponível a partir da API do WordPress é
esc_url()
,esc_url_raw()
,esc_js()
ewp_filter_kses()
.Mau exemplo:
Bom exemplo:
Aqui está um ótimo vídeo de Mark Jaquith explicando o uso das funções de escape:
fonte
Use apenas $ _GET / $ _POST / $ _REQUEST com cuidado e quando APIs melhores não estiverem disponíveis
Plugins e Temas deve usar as configurações de API para obter e salvar dados de entrada de formulário, em vez de confiar em
$_POST
e$_REQUEST
dados diretamente.fonte
Usar
$wpdb->prepare
Ao criar consultas personalizadas por meio do
$wpdb
objeto, sempre use$wpdb->prepare
para preencher espaços reservados com valores em vez de escrever as consultas com dados misturados ao código SQL, pois asmysql_*
funções da família ensinaram a todos de maneira errada.fonte
$wpdb->prepare
não é o mesmo que declarações preparadas.Cuidado com as funções PHP que podem ser usadas para executar código malicioso
Uma boa leitura para quem escreve PHP: Funções exploráveis do PHP no StackOverflow.
Use a API de modificação de temas
Os temas devem usar
set_theme_mod()
e funções relacionadas, não um esquema de nomes auto inventado.A API theme_mod é uma camada especializada para a API de configurações; garante nomes exclusivos, coloca todas as opções em uma matriz e é - pela minha experiência - muito mais fácil de manusear. Além disso, oferece filtros padronizados para plugins - o que é bom para interoperabilidade.
Evitar ativado
register_globals
Não confie
register_globals = on
. Um Tema Pro que meu último cliente comprou faz exatamente isso. Eu poderia invadir qualquer site usando esse tema em 5 minutos ... OThimbThumb também fez isso (e ainda o faz?).
Não crie arquivos com permissões de acesso amplo desnecessárias
Não crie arquivos com permissões de acesso muito liberadas.
Use SSL quando disponível
Aponte seus links Compartilhar no Twitter / Facebook / Qualquer coisa para o HTTPS URI, se disponível. A segurança do seu leitor também é importante.
fonte
set_theme_mod()
, especialmente, como combiná-lo adequadamente com o uso da API de configurações?Salvar dados em uma única matriz
Plugins e temas devem salvar opções em uma única matriz, em vez de criar várias opções para a página de configurações. O uso da API de configurações resolveria isso.
fonte
Verifique a capacidade apropriada ao adicionar e enviar páginas de configurações
Os plug-ins devem usar um recurso apropriado (por exemplo
manage_options
) para adicionar a página de configurações.Os temas devem usar
edit_theme_options
como recurso adequado para adicionar a página de configurações.fonte
edit_theme_options
a API de configurações, o envio de opções é codificado para requerermanage_options
para enviar atualizações. O ticket Trac relacionado pode ser encontrado aqui .edit_theme_options
limite, pensei que seria útil ressaltar que a API de configurações em seu estado atual é apenas utilizável por funções com amanage_options
capacidade.Use tutoriais e informações atualizadas
Os plug-ins e os temas devem implementar deliberadamente as páginas Opções e configurações, sem depender de tutoriais de copiar e colar de sites desatualizados e que não incluem segurança de dados adequada, como os listados abaixo.
Exemplos do que não fazer :
Como criar uma página de opções para o seu tema wordpress (1stwebdesigner.com)
Crie uma incrível página de opções de tema para WordPress, parte 1 (wpshout.com)
fonte
API de configurações de uso
Os plug-ins e os temas devem usar a API de configurações, que é mais fácil de usar, mais segura e cuida de muito trabalho árduo das páginas de configurações:
Para obter bons tutoriais sobre o uso da API de configurações, consulte:
fonte
Para caixas de seleção e opções de seleção, Plugins e Temas devem usar as funções
checked()
eselected()
para saídachecked="checked"
eselected="selected"
, respectivamente.fonte
checked( $theme_options['whatever_option'] )
ouchecked( 'some_value' == $theme_options['whatever_option'] )
. Eu não sei como fica mais sucinto do que isso?Função de prefixo e nomes de variáveis
Os plug-ins devem prefixar todas as opções, funções personalizadas, variáveis personalizadas e constantes personalizadas com slug do plugin.
Os temas devem prefixar todas as opções, funções personalizadas, variáveis personalizadas e constantes personalizadas com slug de tema.
fonte
Use wp_safe_redirect () em vez de chamar a função header () do php diretamente ao direcionar para uma página no mesmo domínio.
fonte
Adicione páginas de configurações às seções apropriadas do menu de administração
Os plug-ins devem usar a
add_options_page()
função para adicionar a página de configurações de plug-in aoSettings
menu, em vez de usaradd_menu_page()
para adicionar um menu de nível superior.Os temas devem usar a
add_theme_page()
função para adicionar a página de configurações de tema aoAppearance
menu, em vez de usaradd_menu_page()
para adicionar um menu de nível superior.fonte