Segurança: Alterando o prefixo do Banco de Dados do WordPress

Uma das coisas incríveis do WordPress é que ele é um sistema de publicação dinâmica, que utiliza um banco de dados para armazenar informações de seu site: posts, opções e configurações de plugins e temas – todos estes dados são armazenados no banco de dados do seu site. É como se fosse cérebro da sua instalação do WordPress. Infelizmente o banco de dados do WordPress é também o principal alvo dos ataques. Spammers e outros caras maus miram nas tabelas do banco de dados com vários scripts automatizados de injeção SQL, e outros códigos maliciosos. Com isso, é fundamental proteger seu banco de dados e manter backups recentes. Uma das maneiras mais inteligentes para proteger seu banco de dados do site é mudar o prefixo da tabela padrão para algo obscuro e difícil de adivinhar. Como uma espécie de senha.

Por padrão, durante a instalação, o WordPress cria o banco de dados com todas as tabelas com o prefixo “wp_”. Existem 11 tabelas criadas no procedimento de instalação padrão, e todas elas serão prefixados com wp_:

Prefixo das tabelas do WordPress

Um problema nisso é que ao instalar o WP com o prefixo padrão das tabelas, um possível invasor poderá acertar o nome de suas tabelas sem problemas. Existem scripts automatizados que visam o banco de dados do WordPress exatamente com esses nomes de tabela durante seus ataques, o que é totalmente compreensível pois quase todos fazem suas instalações deste modo, o que facilita o trabalho dos invasores.

Felizmente, você pode melhorar a segurança de seu site alterando o prefixo para algo completamente aleatório e exclusivo. Existem duas maneiras de alterar o banco de dados de prefixo: a maneira fácil e da maneira mais difícil, e qual maneira você vai usar depende exclusivamente se você já instalou o seu site WordPress ou não ..

Alterando o prefixo de tabela padrão antes de instalar o WordPress

Primeiro vejamos qual o caminho mais fácil. Antes de instalar o WordPress, ao configurar o arquivo wp-config.php com as suas credenciais de banco de dados, note que lá você verá a seguinte linha:

$table_prefix = ‘wp_’;

Para alterar o prefixo do banco de dados, basta alterar esta string pela que você desejar.
Se você já está com seu site WordPress instalado e deseja alterar o prefixo, vejamos abaixo como proceder.

Alterando o prefixo de tabela padrão após a instalação do WordPress

Para mudar seu prefixo após a instalação, reserve cerca de dez minutos e siga estes passos:

Passo 1: Preparativos

Antes de mudar seu prefixo de tabela, verifique se você tem um backup recente e cerca de 10 minutos de tempo de inatividade para o seu site. Pode ser uma boa idéia para redirecionar os visitantes para uma página de manutenção temporária.

Passo 2: Alterar prefixo da tabela

Mudar seu prefixo de tabela de banco em wp-config.php de wp_ para algo mais seguro e desconhecido por outras pessoas, como um prefixo aleatório qualquer

Passo 3: Alterar todas as tabelas do banco de dados WordPress

Vá para o seu banco de dados (usando o phpMyAdmin ou qualquer outro) e renomeie todos os prefixos de tabela WordPress wp_ para que você tenha especificado no seu arquivo wp-config.php. Aqui estão os comandos SQL para renomear as 11 tabelas padrão do WordPress:

RENAME table ‘wp_commentmeta’ TO ‘wp_VzQCxSJv7uL_commentmeta’;
RENAME table ‘wp_comments’ TO ‘wp_VzQCxSJv7uL_comments’;
RENAME table ‘wp_links’ TO ‘wp_VzQCxSJv7uL_links’;
RENAME table ‘wp_options’ TO ‘wp_VzQCxSJv7uL_options’;
RENAME table ‘wp_postmeta’ TO ‘wp_VzQCxSJv7uL_postmeta’;
RENAME table ‘wp_posts’ TO ‘wp_VzQCxSJv7uL_posts’;
RENAME table ‘wp_terms’ TO ‘wp_VzQCxSJv7uL_terms’;
RENAME table ‘wp_term_relationships’ TO ‘wp_VzQCxSJv7uL_term_relationships’;
RENAME table ‘wp_term_taxonomy’ TO ‘wp_VzQCxSJv7uL_term_taxonomy’;
RENAME table ‘wp_usermeta’ TO ‘wp_VzQCxSJv7uL_usermeta’;
RENAME table ‘wp_users’ TO ‘wp_VzQCxSJv7uL_users’;

Se em seu banco de dados houver outras tabelas de plugins ou o que quer que seja, é bom renomeá-las também. O objetivo aqui é renomear todas as tabelas que começam com o prefixo padrão.

Passo 4: Edite o WordPress tabela de opções

Agora, procure a tabela de opções para todas as instâncias do prefixo antigo. Para fazer isso, digite a seguinte consulta SQL:

SELECT * FROM ‘wp_VzQCxSJv7uL_options’ WHERE ‘option_name’ LIKE ‘{9eeb70f7dbe31288fb2327b386e95442712f640702adada4ce45490c3a150a0a}wp_{9eeb70f7dbe31288fb2327b386e95442712f640702adada4ce45490c3a150a0a}’

Que a pesquisa irá retornar a opção wp_user_roles junto com outras opções criado por plugins, scripts personalizados, etc. O objetivo aqui é renomear as opções que começam com wp_ para o novo prefixo.

Passo 5: Edite a tabela usermeta

Agora, procure o usermeta para todas as instâncias do prefixo wp_antigo. Aqui está um comando SQL para fazer isso:

SELECT * FROM ‘wp_VzQCxSJv7uL_usermeta’ WHERE ‘meta_key’ LIKE ‘{9eeb70f7dbe31288fb2327b386e95442712f640702adada4ce45490c3a150a0a}wp_{9eeb70f7dbe31288fb2327b386e95442712f640702adada4ce45490c3a150a0a}’

Ao executar essa consulta em um banco de dados WordPress instalado recentemente, os seguintes campos usermeta foram devolvidos:

O número de campos que você precisará mudar o nome pode variar dependendo de plugins e outros fatores, mas como antes, lembre-se de renomear qualquer entrada que começa com o prefixo de tabela padrão do WordPress, wp_.

Passo Final: teste, backup e fim!

Chegando até aqui, todas as instâncias do prefixo tabela antiga (wp_) foram substituídos com o wp_VzQCxSJv7uL_ no nosso exemplo. Uma vez feito isso, vá verificar se seu site está em perfeito funcionamento. Teste o Admin, páginas, mensagens, pesquisa e tudo mais que você puder pensar (ou tiver tempo). Se o seu site parece estar funcionando como antes, seu site sobreviveu bem a esta cirurgia. Mas é bom fazer outro backup do banco de dados :)

Fonte: DigWP

12 Comments

  1. Guga. Ótima dica! Show.

    Eu realmente não atentei pra esse ponto em minha instalação e coloquei o prefixo padrão. Já estou providenciando a mudança.

    Abraços.

  2. Olá Guga Alves, foi muito interessante a publicação desse tutorial, pois estou trabalhando na construção do meu próprio site feito com a plataforma WordPress.

    – Eu utilizo aqui o Xampp com o phpmyadmin para o gerenciamento do meu Banco de Dados. Na hora de executar o comendo publicado logo acima em sua brilhante postagem eu tive que tirar as aspas no momento de Renomear as 11 tabelas do meu Banco de Dados.

  3. Oi Guga muito obrigado pelo post, me ajudou muito!

    Só tem um detalhe no post:

    Se colocar um escape no sublinhado ai a consulta retorna apenas as tabelas que nós precisamos, por exemplo:

    Disso:
    SELECT * FROM ‘wp_VzQCxSJv7uL_options’ WHERE ‘option_name’ LIKE ‘%wp_%’

    SELECT * FROM ‘wp_VzQCxSJv7uL_usermeta’ WHERE ‘meta_key’ LIKE ‘%wp_%’

    Para isso:
    SELECT * FROM ‘wp_VzQCxSJv7uL_options’ WHERE ‘option_name’ LIKE ‘wp\_%’

    SELECT * FROM ‘wp_VzQCxSJv7uL_usermeta’ WHERE ‘meta_key’ LIKE ‘wp\_%’

    Um abraço e t+

  4. Oi

    Eu fiz tudo como explicou mas o meu site fica como se tivesse uma nova instalação, perdendo todos as configurações que tinha…falta alguma coisa ou não fiz algo correcto?

  5. Muito bom, me ajudou em 2013

  6. Nada como na primeira instalação já escolher o prefixo, deixando o padrão de lado.
    O WordPress permite isso.

  7. Engraçado que este postagem neste site é igualzinho à sua: http://digwp.com/2010/10/change-database-prefix/

    Tradução?!

  8. Muito boa a postagem Guga.

    Aqui executei e deu tudo certinho, apenas na hora de substituir wp_ dentro das tabelas que dava erro. Não sei se é por que uso o Sequel Pro mas de qualquer forma eu usei o arquivo searchreplacedb2.php pra substituir e deu certinho.

    Obrigado pela ótima postagem.

    abraço

  9. Esse post é um pouco antigo. Será que essas informações postadas funcionam na atual versão do wordpress?

Deixe uma resposta