Quais são as falhas de segurança comuns que preciso procurar? [fechadas]

16

Como desenvolvedor de plugins WP, quais são as principais falhas / falhas de segurança que devo procurar?

Estou prestes a criar um novo plugin com um painel de configuração (ou seja, campos de entrada e outras coisas). Com o que devo me preocupar?

Por exemplo, a sanitização de dados é tão importante, pois está na área / wp-admin /? Alguém mal-intencionado pode acessar diretamente minha página de plug-in e enviar solicitações POST ou algo assim?

Obrigado!

MrBatman
fonte

Respostas:

16

Aqui está uma lista de verificação modificada, 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):

  1. Os plug-ins devem prefixar todas as opções, funções personalizadas, variáveis ​​personalizadas e constantes personalizadas com slug do plugin.

  2. Os plug-ins devem implementar deliberadamente as páginas Opções de plug-in e Configurações de plug-in, em vez de depender de scripts de copiar e colar de tutoriais de sites, como os abaixo, que estão desatualizados e não incluem segurança de dados adequada:

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

  4. Os plug-ins devem usar um recurso apropriado (por exemplo manage_options) para adicionar a página de configurações.

  5. Os plug-ins devem salvar as 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 (veja abaixo) resolveria isso.

  6. Plugins devem usar a API de configuração (veja abaixo) para obter e salvar dados de entrada de formulário, em vez de confiar em $_POSTe $_REQUESTdados diretamente.

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

  8. Os plug-ins devem validar e limpar todos os dados não confiáveis ​​antes de inserir dados no banco de dados e devem escapar de todos os dados não confiáveis ​​antes de serem enviados nos campos do formulário Configurações e antes dos arquivos de modelo do Tema:

  9. Os plug-ins devem ser usados esc_attr()para entradas de texto e esc_html()(ou esc_textarea()no WP 3.1) para áreas de texto .

  10. Os plug-ins devem fornecer explicitamente a verificação nonce da página Configurações, se não estiver usando a API Configurações:

  11. Também é altamente recomendável que os plug-ins usem a API de configurações, que é mais fácil de usar, mais segura e cuida de muito do trabalho árduo das páginas de configurações:

Para um bom tutorial sobre o uso da API de configurações, consulte:

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

Chip Bennett
fonte
E devo acrescentar: se alguém vir algo faltando na lista, comente para que eu possa adicioná-lo à lista de verificação, para ajudar a melhorar a revisão de segurança dos Temas!
Chip Bennett
Uau, ótima lista, obrigado. Gostaria de saber se vale a pena fazer desta pergunta um wiki da comunidade e fazer de cada um desses pontos sua própria resposta para permitir melhor discussão e elaboração?
goldenapples
Eu ficaria bem com isso, mas não quero invadir a pergunta do pôster original (a menos que seja assim que as coisas são feitas no StackExchange? Ainda sou novo aqui ...).
Chip Bennett
Também não sei ... deixo a critério dos moderadores, eu acho. Parece que isso seria uma ótima pergunta para o wiki, pois suas práticas tão importantes e importantes ainda estão sendo elaboradas. @Rarst?
goldenapples
Eu poderia criar uma nova pergunta, se necessário?
Chip Bennett
11

Existem dois aspectos para isso:

  1. Princípios básicos.

    • Tudo o que está escrito no banco de dados deve ser verificado quanto a injeções de SQL.
    • O que for impresso na tela deve ser verificado para não imprimir JavaScript prejudicial.
    • Sempre que alguém faz algo, deve-se verificar se era sua intenção fazê-lo e se ele possui capacidade adequada.
    • Há muitas outras coisas que você ou eu nunca iremos procurar verificar.
  2. Específicos.

    • O WordPress moderno leva a segurança a sério e visa facilitar para os desenvolvedores.
    • Portanto, na maioria das coisas que você deseja fazer, provavelmente existe uma maneira de fazê-lo com as APIs do WP.
    • Portanto, o que quer que você esteja fazendo, seu primeiro passo seria refinar e estudar a API apropriada.
    • Quanto mais longe você estiver da funcionalidade comum e simples, mais coisas complexas você precisará estudar e implementar.
Rarst
fonte
1
  1. Adicione defined('ABSPATH') or die('Access denied');o script de cada plugin usado diretamente pelo wordpress
  2. Adicione um arquivo index.php vazio em todos os diretórios
  3. Adicione .htaccess no diretório do plug-in com as instruções necessárias para impedir o acesso direto a determinados arquivos do plug-in.
egor
fonte