Nomeado para a Pwnie Awards 2008, o WordPress não é apenas um nome popular entre blogueiros, mas também entre invasores, pesquisadores de segurança e bancos de dados de vulnerabilidades.

Problemas de segurança não tiram do WordPress o mérito de ser um software excelente, responsável também por este site que você está lendo agora. Nem penso em recomendar que alguém deixe de usá-lo (a não ser trocá-lo pelo wordpress.com, se isto for admissível). Felizmente, existem maneiras de deixá-lo um pouco mais seguro.

Não tenho aqui a pretensão de criar um guia completo e técnico, tanto é que estou postando isso aqui no Blog da Redação. Então segue o que considero apenas algumas dicas rápidas:

Desabilite o registro de usuários

Desabilitar o registro de usuários é interessante porque limita quem possui acesso ao painel de administração. Isto será útil para a dica seguinte, além de evitar qualquer brecha que afete os scripts de administração. Aproveite e apague o wp-register.php.

Coloque uma senha HTTP no wp-admin

Na Linha Defensiva, isto é feito de forma manual (o host faz uso de cPanel, onde há uma opção para configurar senhas HTTP). A senha HTTP é configurada junto da senha do WordPress, colocando duas camadas de proteção. É claro que as senhas e os usuários do WordPress e da autenticação HTTP não devem ser iguais.

É claro que, se você planeja permitir registro de usuários, colocar uma senha HTTP na frente é inútil, pois você terá de revelar a senha aos usuários.

Existe um plugin chamado AskApache Password Protect que auxilia na configuração da senha HTTP, porém, ao fazê-lo manualmente, você retira a necessidade de um plugin que pode não ser compatível com a próxima versão do WordPress. O que nos leva para…

Use sempre a versão estável mais recente do WordPress

Estável, repito. Não considere a instalação de versões beta. Versões recentes do WordPress colocam um aviso bem grande no Painel de Administração quando há uma versão nova e estável. Existe um plugin para atualização automática para quem considera muito trabalho fazer a atualização manualmente.

Nunca considere a alteração dos scripts do WordPress, a não ser que você saiba o que está fazendo. Manter as modificações será sempre um empecilho na hora de atualizar — e você não quer atrasar as atualizações.

Se você não for mais editar o template, não deixe que ele seja editado

Quando você estiver satisfeito com seu template, não permita que ele seja editado pelo painel de administração. Isso pode ser feito alterando-se as permissões do arquivo para somente leitura (chmod 444 ou 555). Faça o mesmo com o template default e remova o classic se você não tiver interesse em usá-lo.

Isto impedirá que um criminoso que obter acesso ao seu site faça alterações no template, limitando as ações à mudança de template e à postagem/edição/remoção de conteúdo.

Não instale nem ative plugins que você não vai usar; atualize os que possui

Plugins podem conter problemas de segurança também. Manter instalado e rodando plugins não-utilizados apenas aumenta as chances de você ser alvo de algum problema em um plugin desnecessariamente.

Como o WordPress, os plugins também precisam ser atualizados. Já existe um mecanismo de atualização dentro do próprio WordPress que funciona para a maioria dos plugins — não custa nada mantê-los atualizados.

Ah, e se algo pode ser feito sem a necessidade de um plugin, procure fazê-lo sem o plugin. Um plugin sem atualização pode lhe causar problemas se não for compatível com a versão mais recente do WordPress… e então você terá que escolher entre não usar a versão mais recente do WordPress e não usar o plugin.

Lembre-se de configurar a chave secreta

Versões recentes do WordPress exigem a configuração de uma chave secreta no wp-config.php. Lembre-se de ter configurado uma para não deixar a padrão. Você nunca terá de lembrar desta chave, então use uma expressão longa, sem se preocupar em memorizá-la.

Esconda a versão do WordPress e renomeie o usuário ‘admin’

Numa contradição, o guia oficial Hardening WordPress sugere que o usuário ‘admin’ seja renomeado e que a versão do WordPress escondida. Nada disso pode ser feito pelo próprio WordPress, no entanto.

Antigamente, esconder a versão do WordPress era fácil, necessitando-se apenas uma edição no tema. Hoje isto não é mais possível, pois a informação de versão é impressa pela função wp_head(), que não pode ser removida por ser necessária a vários plugins. A única maneira de esconder a versão é por meio do plugin Replace WP-Version.

Já para editar o nome de usuário de ‘admin’, um SQL deve ser executado no servidor. A maioria dos provedores de hospedagem disponibiliza o PHPMyAdmin, que facilita a edição de valores no banco de dados. O usuário ‘admin’ pode ser renomeado por lá.

Use senhas longas ou frases

Utilize senhas longas. Ou, se preferir, use frases (“Esta é uma frase que poderia ser usada como senha no WordPress!”). Frases tendem a ser longas e possuem vários caracteres especiais (acentos, espaços, números), sendo portanto difíceis de serem adivinhadas, mas não tão difíceis de serem lembradas.

Restrinja o acesso de colaboradores

Se o seu computador ou o computador de um colaborador do seu blog for comprometido, a festa acaba. Limite as permissões de seus colaboradores. O plugin Role Manager permite limitar o acesso a vários recursos do Painel de Administração, possibilitando que você defina o mínimo de acesso necessário.

Instale um plugin anti-spam

Na Linha Defensiva, o uso de uma URL diferente para os comentários diminui muito o spam recebido (por algum motivo desconhecido para mim — não foi essa a intenção)[1. Originalmente, não havia a possibilidade de comentar as matérias da Linha Defensiva. A sugestão de um amigo foi colocar os comentários em uma página separada para diferenciá-los da matéria. Foi uma decisão baseada na preocupação com conteúdo, não com spam.]. Mesmo assim, eventualmente um comentário “spamioso” é recebido. O WP-SpamFree tem dado conta do recado.

Quem modera os comentários antes de colocá-los no blog precisa ficar de olho em comentários “estranhos”. Caso uma brecha XSS (Cross-site Scripting) seja descoberta no sistema de comentários, um administrador moderando comentários poderia ter seu cookie roubado. Felizmente, se você usar a dica da senha HTTP, o criminoso ainda não vai ter acesso à administração do blog.

Usando um plugin anti-spam, você de quebra protege o blog contra robôs que eventualmente possam tentar explorar uma brecha de XSS nos comentários. Muitas falhas de segurança hoje são exploradas por robôs automatizados, como o spam — as técnicas usadas para deter um podem também deter o outro.

Se possível, use um usuário/BD próprio no MySQL

Isto garante que problemas no WordPress não afetem outras áreas do site (como um fórum) e vice-versa.

Use o WP Super Cache e gzip o prototype.js

Segurança também é disponibilidade[2. Segurança, dizem alguns-quase-todos, é garantir a disponibilidade, a integridade e a confidencialidade dos dados.]! Usar o plugin WP Super Cache garante grandes ganhos de desempenho para o seu blog, fazendo com que o consumo de processamento para páginas de visita freqüente seja mínimo.

O prototype.js, por sua vez, é um Javascript incluído em todas as páginas do WordPress. Ele possui nada menos que 121KB. Depois de um GZip, ele terá um tamanho de 22KB, reduzindo drasticamente o tempo necessário para o download da página e também seu custo com banda. Com 10 000 visitantes, este único arquivo, se gzipado, irá reduzir o consumo de banda em 1GB.

Para fazer o GZip, existem várias maneiras. Na Linha Defensiva, o SmartOptimizer (modificado para executar o código apenas uma vez) é usado de forma transparente por meio do mod_rewrite.

Estas são algumas dicas. Certamente, existem muitas outras coisas para se fazer, como usar SSL na administração, manter backups… o Hardening WordPress, citado acima, tem várias outras que não vale a pena repetir aqui.

Algumas das dicas não são muito simples de serem seguidas. Manter um site seguro é muito mais difícil do que manter um PC doméstico seguro, já que as páginas e o servidor estão sempre expostos. A idéia principal é tenter descobrir os pontos fracos (no caso do WordPress, os comentários, o painel de administração e a busca) e tentar mantê-los sob controle, de modo que problemas sejam detectados logo (tratar adequadamente um problema de segurança é tão importante quanto preveni-lo).

Se outras dicas interessantes (sobre segurança, estabilidade e otimização) forem postadas nos comentários, posso trazê-las aqui para a matéria, com o devido crédito.

Escrito por Altieres Rohr

Editor da Linha Defensiva.

3 comentários

  1. Eu instalei o WP Security Scan e ele fica me alertando que o prefixo das minha tabelas não deveria ser “wp_” (coisa feita pelo próprio WP).

    Como não achei nada sobre isso no post, gostaria de saber se você tem algo a dizer sobre essa questão.

    Curtir

    Responder

  2. Ricardo

    Provavelmente o WP Security Scan pensa que ataques de SQL Injection (“injeção de SQL”) podem ser um pouco dificultados caso o prefixo wp_ não seja utilizado.

    Isto porque a injeção SQL consiste na inserção de código SQL (de banco de dados) dentro de outra consulta do WordPress. O invasor não tem como acessar uma tabela se ele não sabe o nome dela (no caso, se o prefixo for diferente, teoricamente não tem como saber…).

    Porém, como a injeção é feita dentro do PHP, nada impede que o invasor utilize a mesma variável usada pelo WordPress para acessar as tabelas. Afinal, o WordPress precisa saber o prefixo. Portanto, uma falha no WordPress iria permitir acesso mesmo assim, no meu entender.

    Se uma brecha for encontrada em outro software do seu site, no entanto, aí sim, o prefixo diferente vai fazer diferença, porque vai dificultar as coisas e impedir que alguns ataques alterem o WordPress. Mas se você usar a dica de BDs diferentes, não vai precisar disso.

    Ainda assim, ataques mais simples podem ser evitados se o prefixo for diferente. É uma alteração pequena e simples de ser feita, sem maiores conseqüências. Acho que vale a pena.

    Curtir

    Responder

  3. Obrigado pela atenção.

    Curtir

    Responder

Deixe um comentário

Este site utiliza o Akismet para reduzir spam. Saiba como seus dados em comentários são processados.