O WordPress é um CMS cada vez mais utilizado no mundo, por vários motivos: é gratuito, flexível, open source e bastante completo. Por ser bastante adotado, é um alvo muito evidente para ataques e descoberta de vulnerabilidades. É preciso estar atento para evitar problemas, hacking, defaces, etc.
Aqui vão algumas dicas muito úteis para ter uma instalação segura do WordPress em sua hospedagem, seja compartilhada ou dedicada.
1) Esteja sempre atualizado
Em quase todas as atualizações do WordPress, existem correções de segurança. Fique sempre atento para atualizar sua instalação (é fácil e rápido, automático) assim que ela for liberada. Não corra o risco de se manter com uma falha de segurança, pois quando se divulga que ela foi corrigida, a primeira coisa que isso faz é mostrar que ela existe.
Da mesma forma, sempre atualize plugins e temas, evitando uma porta secundária de entrada de pessoas mal intencionadas.
2) Não divulgue a versão do seu WordPress
Os temas padrão do WP deixam uma metatag no código divulgando, para fins de estatística, qual versão você está utilizando do WordPress. Muitos temas desenvolvidos deixam essa informação visível, mas isso não é aconselhável. Ao sondar possíveis vulnerabilidades em seus sites, o atacante pode utilizar essa informação para definir técnicas de ataque, descobrir falhas de segurança, etc.
O código que divulga a versão está presente no arquivo header.php de seu tema. A linha que você deve remover é a seguinte:
<meta name=”generator” content=”WordPress <?php bloginfo(‘version’); ?>” />
3) Não use o login padrão do Admin do WordPress
Ao criar um novo blog, automaticamente é criado um usuário chamado “admin” que passa a ser o usuário com poderes plenos no blog. Como o login é padrão e quase ninguém o modifica, fica fácil escolher um login quando um atacante faz uma tentativa de acesso por força bruta (robôs que tentam várias senhas aleatórias até descobrir).
Para evitar ou dificultar esse acesso não autorizado, mude o login do usuário principal para um outro qualquer. Quanto mais difícil de ser adivinhado, melhor, exemplo: gerente, gerenciador, porteiro, meuadm, etc.
Você pode fazer essa alteração de duas formas:
- Diretamente no banco de dados, acessando o seu mysql e alterando na mão o login admin pelo outro;
- Ou simplesmente criando um novo usuário com poderes máximos, logando com esse outro usuário e em seguida apagando o admin.
4) Bloqueie a listagem de arquivos em suas pastas
Alguns servidores permitem que uma pasta criada, se não tiver um arquivo index, disponibilize a listagem dos arquivos existentes naquela pasta se alguém acessá-la diretamente via browser. Isso é uma falha de segurança, pois expõe os seus arquivos para todo mundo e pode ser usado para coletar dados para um ataque.
Para impedir que os arquivos de suas pastas sejam listados, adicione no seu arquivo .htaccess (hospedagem baseada em Linux) o comando abaixo. Se esse arquivo não existir, você pode criá-lo, tomando cuidado para não sobrescrever um existente, ou sua instalação do WordPress pode não funcionar corretamente. O arquivo deve estar na pasta principal (“/”) da instalação do WordPress (a mesma pasta em que está o wp-config.php).
Options All -Indexes
5) Restrinja o acesso à sua pasta wp-content
Sua pasta wp-content contém seus arquivos de temas e plugins instalados no WordPress. O acesso a essa pasta não deve ser direto, com exceção às imagens, javascript e css que possam ser utilizados pelo seu tema escolhido.
Acessos indevidos nessa pasta podem dar munição para ataques futuros, seja utilizando alguma vulnerabilidade de plugin ou tema instalado (o atacante vai saber que plugin você possui).
Mais uma vez, a solução vem da edição de seu arquivo .htaccess (não o principal, um outro, dentro da pasta wp-content), com a seguinte informação:
Order Allow,Deny
Deny from all
<FilesMatch “\.(jpg|gif|png|js|css)$” >
Allow from all
</FilesMatch>
6) Use uma melhor criptografia
As mais recentes versões do WordPress possuem uma configuração para melhorar a criptografia dos cookies gravados nas máquinas dos usuários. Setar corretamente essa configuração, dificulta alguns tipos de ataques que utilizam essas informações.
- Acesse o gerador de chaves do WordPress (Secret Key Generation Tool);
- Copie as 4 linhas geradas (elas são aleatórias e únicas. Se você der refresh, elas mudam);
- Edite o seu arquivo wp-config.php e procure as linhas que possuem essas informações (AUTH_KEY, etc);
- Substitua as 4 linhas pelas que você copiou do site gerador;
- Grave o arquivo e publique em seu servidor.
7) Bloqueie a indexação de arquivos do WordPress
Impeça que mecanismos de busca façam indexação em suas pastas e arquivos do WordPress. Para isso, crie ou edite o arquivo robots.txt em sua pasta principal do site (“/”) e adicione a seguinte informação:
User-agent: *
Disallow: /wp-*
8) Proteja o seu arquivo de configuração
Em alguns casos, o seu servidor pode dar alguma pane temporária e há a possibilidade de expor o conteúdo de arquivos que deveriam ser executados, traduzidos. Para proteger que um arquivo importante, como o wp-config.php, que contem a senha do banco de dados e sua secret key, edite o arquivo .htaccess (da pasta principal) e adicione a informação abaixo:
<FilesMatch ^wp-config.php$> Deny from all </FilesMatch>
9) Plugins que te ajudam a proteger o WordPress
Existem alguns plugins que são uma mão na roda quando se trata de segurança no WordPress. Listei alguns que podem lhe ser muito úteis nesse quesito, mas lembre-se, todas as recomendações acima são importantes, não as ignore.
WP Security Scan – Realiza uma série de testes para avaliar a segurança de sua instalação do WordPress;
WP Login Lockdown – Dificulta ataques de “força bruta”, bloqueando o acesso por IP após determinado número de erros de login;
WP Secure – Reúne várias configurações de segurança, incluindo algumas das listadas nas dicas acima;
WP DB Backup – Realiza cópias de segurança de seu banco de dados automaticamente
10) Alterando o prefixo padrão do WordPress para evitar SQL injections
O banco de dados WordPress contém e armazena todas as informações cruciais para o seu site funcionar. Como consequência disso, se torna um alvo atraente para hackers e spammers que executam códigos automatizados com objetivo de performar o que chamamos de SQL injections. Ao instalar o MySQL, a maioria das pessoas nem se preocupam em alterar o wp_, o prefixo padrão do banco de dados WordPress. De acordo com o WordFence, um entre cinco casos de ataques ao WordPress ocorrem devido à SQL injections. Como **wp** é uma configuração padrão, os hackers escolhem atacar este valor primeiro. Neste passo nós vamos apresentar brevemente como aumentar a segurança no WordPress contra ataques deste tipo.
Alterando o prefixo de um site WordPress já existente
IMPORTANTE! Segurança vem em primeiro lugar. Garanta o backup do seu banco de dados WordPress antes de prosseguir.
Etapa 1 – Alterando o prefixo no wp-config.php
Usando o cliente FTP ou o Gerenciador de Arquivos, localize o wp-config.php e busque por $table_prefixvalue.
Alterando o prefixo padrão do WordPress para evitar SQL injections
O banco de dados WordPress contém e armazena todas as informações cruciais para o seu site funcionar. Como consequência disso, se torna um alvo atraente para hackers e spammers que executam códigos automatizados com objetivo de performar o que chamamos de SQL injections. Ao instalar o MySQL, a maioria das pessoas nem se preocupam em alterar o wp_, o prefixo padrão do banco de dados WordPress. De acordo com o WordFence, um entre cinco casos de ataques ao WordPress ocorrem devido à SQL injections. Como **wp** é uma configuração padrão, os hackers escolhem atacar este valor primeiro. Neste passo nós vamos apresentar brevemente como aumentar a segurança no WordPress contra ataques deste tipo.
Alterando o prefixo de um site WordPress já existente
IMPORTANTE! Segurança vem em primeiro lugar. Garanta o backup do seu banco de dados WordPress antes de prosseguir.
Etapa 1 – Alterando o prefixo no wp-config.php
Usando o cliente FTP ou o Gerenciador de Arquivos, localize o wp-config.php e busque por $table_prefixvalue.
Você pode adicionar números, letras ou sublinhados. Depois disso, salve suas alterações e prossiga para o próximo passo. Neste tutorial, vamos usar o wp_1secure1_ como novo prefixo.
Ainda no arquivo wp-config.php, encontre também o nome do seu banco de dados, e então você saberá qual banco de dados você precisa editar. Localize a seção define(‘DB_NAME’.
Parte 2 – Atualizando todas as tables do banco de dados
Agora você precisa atualizar todas as entradas no seu banco de dados WordPress. Isto pode ser feito usando o phpMyAdmim.
Busque o banco de dados que você localizou na parte 1 e acesse.
A instalação padrão do WordPress tem 12 tables, cada uma delas deve ser atualizada. Mas isso pode ser feito de uma forma mais rápida usando a seção SQL do phpMyadmim.
Alterar cada tabela manualmente vai exigir um tempo excessivo, mas podemos usar o SQL queries para acelerar o processo. Use a sintaxe abaixo para atualizar todas as tables do seu banco de dados.
Alterar cada tabela manualmente vai exigir um tempo excessivo, mas podemos usar o SQL queries para acelerar o processo. Use a sintaxe abaixo para atualizar todas as tables do seu banco de dados.
Em alguns temas ou plugins WordPress é possível criar tables adicionais no banco de dados. Caso você tenha mais de 12 tables no seu banco de dados MySQL, adicione o restante deles manualmente à lista do SQL e execute.
Parte 3 – Opções de verificação e usermetatables
Dependendo do número de plugins que você tem instalado, alguns valores do seu banco de dados terão que ser atualizados manualmente. Isto pode ser feito executando SQL queries separadas em options e usermetatabels.
Para a table options você deve usar:
SELECT * FROM `wp_1secure1_options` WHERE `option_name` LIKE ‘%wp_%’
Para a table usermeta você deve usar:
SELECT * FROM `wp_1secure1_usermeta` WHERE `meta_key` LIKE ‘%wp_%’
Quando você obter os resultados do SQL queries, simplesmente atualize todos os valores de wp_ para o novo prefixo configurado. Isto é tudo. No usermetatable você precisa editar o campo meta_key, enquanto para options o valor a ser trocado é o option_name.
Alterando prefixo de um novo site WordPress
Se você está planejando instalar novos sites WordPress, não vai ser preciso executar este processo novamente. Você pode simplesmente configurar os prefixos das tables WordPress durante a instalação.
Parabéns! Você melhorou a segurança do seu banco de dados WordPress ao impedir SQL injections.