O que são práticas recomendadas de segurança para plugins e temas do WordPress? [fechadas]

21

Como sugerido nesta pergunta , estou adicionando esse tópico como uma nova pergunta, para discussão / votação da comunidade sobre as melhores práticas de segurança de Plugin / Theme.

Aqui está a lista de verificação inicial, com base na minha lista de verificação de configurações / segurança de dados atuais (em andamento) usada para revisar Temas (os princípios não devem ser diferentes para Plug-ins do que para Temas).

Se você quiser conferir um tema com uma página de configurações de tema segura e codificada, confira este tema: enlace

    
por Chip Bennett 13.04.2017 / 14:37
fonte

13 respostas

13

Use Nonces (quando não estiver usando a API de configurações)

Plugins e temas devem fornecer explicitamente a verificação do nonce das configurações da página, se não usar a API de configurações:

por Rarst 01.04.2011 / 14:45
fonte
12

Sanitize, valide e escape dados

Sanitize qualquer coisa que possa entrar e sair do (!) banco de dados tanto front-end quanto back-end!

Plugins e temas devem realizar uma validação de dados adequada:

  1. Validar e limpar todos os dados não confiáveis antes de inserir dados no banco de dados
  2. Escape todos os dados não confiáveis antes de serem enviados no formulário Configurações campos
  3. Escape de todos os dados não confiáveis antes de serem exibidos no modelo de tema arquivos

Os plugins e temas devem usar esc_attr() para entradas de texto e esc_html() ou esc_textarea() para áreas de texto.

Também disponível na API do WordPress está esc_url() , esc_url_raw() , esc_js() e wp_filter_kses() .

Exemplo ruim:

<?php $url = 'javascript:pwnd()'; ?>
<a href="<?php echo $url; ?>">anchor</a>

Bom exemplo:

<a href="<?php echo esc_url($url); ?>">anchor</a>

Aqui está um ótimo vídeo de Mark Jaquith explicando o uso das funções de escape:

por Chris_O 31.03.2011 / 21:12
fonte
9

Use apenas $ _GET / $ _POST / $ _REQUEST com cuidado e quando melhores APIs estiverem indisponíveis

Os plug-ins e temas devem usar a API de configurações para obter e salvar dados de entrada do formulário, em vez de confiar nos dados $_POST e $_REQUEST diretamente.

    
por Rarst 31.03.2011 / 20:43
fonte
9

Use $wpdb->prepare

Ao criar consultas personalizadas por meio do objeto $wpdb , sempre use $wpdb->prepare para preencher espaços reservados com valores em vez de escrever as consultas com dados misturados com código SQL, pois as funções da família mysql_* ensinaram erroneamente a todos.

    
por Matteo Riva 17.08.2011 / 14:01
fonte
8

Cuidado com as funções do PHP que podem ser usadas para executar códigos maliciosos

Uma boa leitura para qualquer pessoa que esteja escrevendo 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 como um esquema de nome próprio 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 é, da minha experiência, muito mais fácil de manipular. Além disso, oferece filtros padronizados para plugins - o que é bom para a interoperabilidade.

Evite ativar register_globals

Não confie em register_globals = on . Um Tema Pro que meu último cliente comprou faz exatamente isso. Eu poderia hackear qualquer site usando esse tema em 5 minutos ...
ThimbThumb fez isso também (e ainda 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 / Anything para o URI HTTPS, se disponível. A segurança do seu leitor também é importante.

    
por fuxia 31.03.2011 / 00:03
fonte
7

Salvar dados em matriz única

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 lidaria com isso.

    
por Chip Bennett 31.03.2011 / 22:26
fonte
6

Verifique a capacidade apropriada ao adicionar e exibir as páginas de configurações

Os plug-ins devem usar uma capacidade apropriada (por exemplo, manage_options ) para a capacidade de adicionar a página de configurações.

Os temas devem usar edit_theme_options como a capacidade apropriada para adicionar a página de configurações.

por Rarst 31.03.2011 / 20:56
fonte
5

Use tutoriais e informações atualizados

Plugins & Os temas devem implementar páginas Opções e Configurações deliberadamente e não dependem de tutoriais de copiar e colar que estejam desatualizados e não incluam segurança de dados adequada, como os listados abaixo.

Exemplos do que não deve ser feito :

por t31os 31.03.2011 / 22:23
fonte
4

Use a API de configurações

Os plug-ins e temas devem usar a API de configurações, que é mais fácil de usar, mais segura e cuida do trabalho pesado das páginas de configurações:

Para bons tutoriais sobre o uso da API de configurações, consulte:

por Chip Bennett 31.03.2011 / 20:54
fonte
1

Para caixas de seleção e opções de seleção, os plug-ins e temas devem usar as funções checked() e selected() para a saída de checked="checked" e selected="selected" , respectivamente.

    
por Chip Bennett 30.03.2011 / 23:09
fonte
1

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 o plugin-slug.

Os temas devem prefixar todas as opções, funções personalizadas, variáveis personalizadas e constantes personalizadas com o tema-slug.

    
por Chip Bennett 31.03.2011 / 22:29
fonte
1

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.

    
por mfields 18.04.2011 / 21:41
fonte
0

Adicionar páginas de configurações às seções apropriadas do menu de administração

Os plug-ins devem usar a função add_options_page() para adicionar a página de configurações de plug-ins ao menu Settings , em vez de usar add_menu_page() para adicionar um menu de nível superior.

Os temas devem usar a função add_theme_page() para adicionar a página de configurações de tema ao menu Appearance , em vez de usar add_menu_page() para adicionar um menu de nível superior.

    
por Chip Bennett 31.03.2011 / 22:27
fonte