{"id":3892,"date":"2014-12-08T10:18:25","date_gmt":"2014-12-08T12:18:25","guid":{"rendered":"http:\/\/blog.turbosite.com.br\/?p=3892"},"modified":"2014-12-08T10:18:25","modified_gmt":"2014-12-08T12:18:25","slug":"deixando-seu-wordpress-mais-seguro","status":"publish","type":"post","link":"https:\/\/www.turbosite.com.br\/blog\/deixando-seu-wordpress-mais-seguro\/","title":{"rendered":"Deixando seu WordPress mais Seguro"},"content":{"rendered":"<p>Em 2014 o n\u00famero de utilizadores do WordPress s\u00f3 vem aumentando, ele j\u00e1 ocupa 60,9% do mercado de sites com gerenciamento de conte\u00fado. De pequeno a grandes portais todos devem se preocupar com a seguran\u00e7a de seus sites e hoje, vamos compartilhar uma dica que pode fazer a o seu site n\u00e3o\u00a0ser &#8220;<em>mais um blog em WordPress&#8221;.<\/em><\/p>\n<p>De acordo com o relat\u00f3rio da <a href=\"http:\/\/w3techs.com\/technologies\/details\/cm-wordpress\/all\/all\">w3techs.com<\/a>, todos os sites com gerenciamento de conte\u00fado, 60,9% est\u00e3o em WordPress.<\/p>\n<blockquote><p><b>WordPress is used by 60.9%<\/b> of all the websites whose content management system we know. This is 23.2% of all websites.<\/p><\/blockquote>\n<p>&nbsp;<\/p>\n<p>A dica postada hoje foi escrita pelo\u00a0<a href=\"http:\/\/tiagohillebrandt.eti.br\/dicas-seguranca-wordpress.html\">Tiago\u00a0Hillebrandt<\/a>. Vale a pena a leitura.<\/p>\n<p>&nbsp;<\/p>\n<p>Nos dias atuais, infelizmente a seguran\u00e7a n\u00e3o tem sido encarada da forma que deveria por muitos desenvolvedores, e at\u00e9 mesmo pelas empresas de hospedagem.<\/p>\n<p>\u00c9 muito comum encontrarmos instala\u00e7\u00f5es sendo invadidas pelo descuido em quest\u00f5es b\u00e1sicas de seguran\u00e7a, como permiss\u00f5es de arquivos ou <em>hashes<\/em> n\u00e3o atualizados no <em>wp-config.php<\/em>.<\/p>\n<p>Com base nisso, resolvi publicar aqui um simples tutorial separado por etapas com algumas boas dicas de seguran\u00e7a focadas em\u00a0<strong>WordPress<\/strong>.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-1786 alignnone\" src=\"http:\/\/tiagohillebrandt.eti.br\/wp-content\/uploads\/2014\/03\/seguranca-wordpress.png\" alt=\"Dicas de seguran\u00e7a para WordPress\" width=\"600\" height=\"180\" \/><\/p>\n<p>&nbsp;<\/p>\n<h3><span id=\"more-1609\"><\/span>1. PHP<\/h3>\n<p>Basicamente, \u00e9 de suma import\u00e2ncia manter as seguintes diretivas no seu\u00a0<em>php.ini<\/em>:<\/p>\n<pre class=\"lang:sh decode:true \">display_errors=Off\nallow_url_fopen=Off\ndisable_functions=popen,exec,system,passthru,proc_open,shell_exec,highlight_file,escapeshellcmd,pcntl_exec<\/pre>\n<p>Essas diretivas ir\u00e3o desabilitar algumas fun\u00e7\u00f5es que podem representar risco para seu servidor.<\/p>\n<p>Mas e se meu tema ou um dos meus <em>plugins<\/em> usar alguma dessas fun\u00e7\u00f5es? Considere remov\u00ea-lo ou substitu\u00ed-lo!<\/p>\n<p>Por exemplo, \u00e9 comum ver\u00a0<em>plugins<\/em>\u00a0usando a fun\u00e7\u00e3o <em>exec()<\/em>\u00a0para manipular imagens. Manipula\u00e7\u00e3o de imagens \u00e9 um processo que em geral consome muitos recursos do servidor, e certamente vai acarretar na perda de performance em seu <em>site<\/em>. Assim, al\u00e9m de todas as quest\u00f5es de seguran\u00e7a envolvidas, temos mais um motivo para n\u00e3o utilizar esses <em>plugins<\/em>.<\/p>\n<p>&nbsp;<\/p>\n<h3>2. Servidor web<\/h3>\n<p>A p\u00e1gina <a title=\"Hardening WordPress\" href=\"http:\/\/codex.wordpress.org\/Hardening_WordPress#Securing_wp-includes\">Hardening WordPress<\/a> no <a title=\"Codex\" href=\"http:\/\/codex.wordpress.org\/\">Codex<\/a>\u00a0recomenda a adi\u00e7\u00e3o de algumas regras no servidor <em>web<\/em> para seguran\u00e7a do diret\u00f3rio <em>wp-includes<\/em> e do arquivo<em>wp-config.php<\/em>.<\/p>\n<p>&nbsp;<\/p>\n<h4>2.1. Nginx<\/h4>\n<p>Se o seu servidor\u00a0<em>web<\/em>\u00a0for o\u00a0<strong>Apache<\/strong>, ignore essa etapa.<\/p>\n<p>Como as regras est\u00e3o no formato\u00a0<strong>Apache<\/strong>, efetuei a convers\u00e3o delas para o formato\u00a0<strong>Nginx<\/strong> manualmente.<\/p>\n<p>Assim, voc\u00ea dever\u00e1 editar o arquivo de configura\u00e7\u00e3o do seu site, geralmente dispon\u00edvel em <em>\/etc\/nginx\/sites-available\/<\/em>, e adicionar as seguintes linhas:<\/p>\n<pre class=\"lang:php decode:true\"># WordPress Hardening\nif ($request_uri ~ ^\/wp-admin\/includes\/) { return 403; }\nif ($request_uri ~ ^\/wp-includes\/js\/tinymce\/langs\/.+\\.php$) { return 403; }\nif ($request_uri ~ ^\/wp-includes\/theme-compat\/) { return 403; }\nif ($request_uri ~ ^\/wp-config\\.php$) { return 403; }<\/pre>\n<p>&nbsp;<\/p>\n<p>Al\u00e9m disso, a linha abaixo tamb\u00e9m dever\u00e1 ser adicionada se voc\u00ea N\u00c3O estiver rodando uma instala\u00e7\u00e3o\u00a0<em>multisite<\/em>\u00a0do <strong>WordPress<\/strong>:<\/p>\n<pre class=\"lang:php decode:true\">if ($request_uri ~ ^\/wp-includes\/[^\/]+\\.php$) { return 403; }\n<\/pre>\n<p>&nbsp;<\/p>\n<p>Ap\u00f3s adicionar as linhas, salve o arquivo, d\u00ea um <em>reload<\/em> no <strong>Nginx<\/strong> e <em>voil\u00e1.<\/em><\/p>\n<p>&nbsp;<\/p>\n<h4>2.2. Apache<\/h4>\n<p>Se o seu servidor <em>web<\/em> for o\u00a0<strong>Nginx<\/strong>, ignore essa etapa.<\/p>\n<p>Voc\u00ea dever\u00e1 editar o arquivo <em>.htaccess<\/em> do seu site e adicionar as seguintes instru\u00e7\u00f5es:<\/p>\n<pre class=\"lang:php decode:true \"># WordPress Hardening: wp-config.php\n&lt;files wp-config.php&gt;\norder allow,deny\ndeny from all\n&lt;\/files&gt;<\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"lang:php decode:true \"># Disables the access to htaccess file\n&lt;files .htaccess&gt;\norder allow,deny\ndeny from all\n&lt;\/files&gt;<\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"lang:php decode:true \"># WordPress Hardening: wp-includes\n&lt;IfModule mod_rewrite.c&gt;\nRewriteEngine On\nRewriteBase \/\nRewriteRule ^wp-admin\/includes\/ - [F,L]\nRewriteRule !^wp-includes\/ - [S=3]\nRewriteRule ^wp-includes\/[^\/]+\\.php$ - [F,L]\nRewriteRule ^wp-includes\/js\/tinymce\/langs\/.+\\.php - [F,L]\nRewriteRule ^wp-includes\/theme-compat\/ - [F,L]\n&lt;\/IfModule&gt;<\/pre>\n<p>&nbsp;<\/p>\n<p class=\"\">Al\u00e9m disso, a linha abaixo tamb\u00e9m dever\u00e1 ser adicionada dentro do bloco do\u00a0<em>wp-includes<\/em> se voc\u00ea N\u00c3O estiver rodando uma instala\u00e7\u00e3o\u00a0<em>multisite<\/em>\u00a0do\u00a0<strong>WordPress<\/strong>:<\/p>\n<pre class=\"lang:php decode:true\">RewriteRule ^wp-includes\/[^\/]+\\.php$ - [F,L]<\/pre>\n<p>&nbsp;<\/p>\n<p>Feito isso, salve o arquivo e <em>voil\u00e0<\/em>, o <strong>Apache<\/strong> dever\u00e1 carregar suas regras automaticamente.<\/p>\n<p>&nbsp;<\/p>\n<h3>3. MySQL<\/h3>\n<p>Primeiramente, recomendaria adicionar a seguinte linha ao seu <em>my.cnf<\/em>:<\/p>\n<pre class=\"lang:php decode:true \">bind-address=127.0.0.1<\/pre>\n<p>&nbsp;<\/p>\n<p>Feito isso, basta salvar o arquivo e reiniciar o <strong>MySQL<\/strong>.\u00a0Com aquela linha, somente acessos vindouros do pr\u00f3prio servidor ser\u00e3o aceitos.<\/p>\n<p>Em rela\u00e7\u00e3o a base de dados, meu conselho seria criar um usu\u00e1rio dedicado por<em>site<\/em> rodando\u00a0<strong>WordPress<\/strong>.<\/p>\n<p>Para criar um novo usu\u00e1rio, basta executar os seguintes comandos SQL como\u00a0<strong>root<\/strong>\u00a0\u2014 substituindo <em>database<\/em> pelo nome da sua base de dados,\u00a0<em>user<\/em> pelo nome de usu\u00e1rio e\u00a0<em>password<\/em> pela senha desejada:<\/p>\n<pre class=\"lang:php decode:true \">GRANT ALL PRIVILEGES ON database.* TO user@'localhost' IDENTIFIED BY 'password';\nFLUSH PRIVILEGES;<\/pre>\n<p>&nbsp;<\/p>\n<p>Um bom site para gerar senhas \u00e9 o <em><a title=\"Random Keygen Generator\" href=\"http:\/\/randomkeygen.com\/\">Random Keygen<\/a><\/em>.<\/p>\n<p>Depois disso, v\u00e1 at\u00e9 o seu <em>wp-config.php<\/em> e edite as credenciais de acordo com o novo usu\u00e1rio que criou.<\/p>\n<p>&nbsp;<\/p>\n<h3>4. Permiss\u00f5es dos arquivos e diret\u00f3rios<\/h3>\n<p>\u00c9 muito comum encontrarmos instala\u00e7\u00f5es\u00a0<strong>WordPress<\/strong>\u00a0com permiss\u00f5es atribu\u00eddas de maneira inadequada e potencialmente perigosas, principalmente se tratando de hospedagens compartilhadas (<em>shared hosting<\/em>).<\/p>\n<p>O mais comum dos erros nessa etapa \u00e9 a defini\u00e7\u00e3o recursiva da permiss\u00e3o 777 para o diret\u00f3rio <em>wp-content\/uploads\/<\/em>. Fazendo uma pequena pesquisa \u00e9 poss\u00edvel encontrar uma conhecida empresa de hospedagem aqui no Brasil recomendando o uso dessa permiss\u00e3o naquele diret\u00f3rio.<\/p>\n<p>Para evitar dores de cabe\u00e7a devido a permiss\u00f5es inapropriadas, basta executar tr\u00eas comandos no diret\u00f3rio onde seu <em>site<\/em> est\u00e1 instalado:<\/p>\n<pre class=\"lang:sh decode:true\"># find . -type d -exec chmod 755 {} \\;\n# find . -type f -exec chmod 644 {} \\;\n# chmod 400 wp-config.php<\/pre>\n<p>&nbsp;<\/p>\n<p>Assim, todos os diret\u00f3rios ter\u00e3o permiss\u00e3o 755, e todos os arquivos 644, conforme recomendado pela p\u00e1gina<strong>\u00a0<\/strong><a title=\"Hardening WordPress: File Permissions\" href=\"http:\/\/codex.wordpress.org\/Hardening_WordPress#File_Permissions\">Hardening WordPress<\/a>\u00a0dispon\u00edvel no<a title=\"Codex\" href=\"http:\/\/codex.wordpress.org\/\">Codex<\/a>. Al\u00e9m disso, adicionalmente seu <em>wp-config.php<\/em> ter\u00e1 permiss\u00f5es de somente leitura para o usu\u00e1rio <em>root<\/em>.<\/p>\n<p>Na\u00a0<a title=\"Synthesis, hospedagem especializada em WordPress\" href=\"http:\/\/tiagohillebrandt.eti.br\/out\/synthesis\"><strong>Synthesis<\/strong><\/a>, que oferece hospedagem especializada em\u00a0<strong>WordPress<\/strong>, essas permiss\u00f5es j\u00e1 est\u00e3o definidas por padr\u00e3o na sua instala\u00e7\u00e3o!<\/p>\n<p>Est\u00e1 usando uma hospedagem compartilhada e n\u00e3o tem acesso ao servidor para executar os comandos? Envie um e-mail para o suporte t\u00e9nico da empresa solicitando para executarem estes comandos em sua instala\u00e7\u00e3o <strong>WordPress<\/strong>. Provavelmente eles n\u00e3o ir\u00e3o se opor, se tratando apenas de tr\u00eas simples comandos.<\/p>\n<p>Dica: se a empresa n\u00e3o for capaz de rodar aqueles comandos por voc\u00ea, confie em mim, mude de hospedagem o mais r\u00e1pido poss\u00edvel.<\/p>\n<p>&nbsp;<\/p>\n<h3>5.<em> Hashes<\/em> do <em>wp-config.php<\/em><\/h3>\n<p>Possivelmente, navegando pelo <em>wp-config.php<\/em>, voc\u00ea j\u00e1 se deparou com as seguintes constantes:<\/p>\n<pre class=\"lang:php decode:true\">define('AUTH_KEY', 'put your unique phrase here');\ndefine('SECURE_AUTH_KEY', 'put your unique phrase here');\ndefine('LOGGED_IN_KEY', 'put your unique phrase here');\ndefine('NONCE_KEY', 'put your unique phrase here');\ndefine('AUTH_SALT', 'put your unique phrase here');\ndefine('SECURE_AUTH_SALT', 'put your unique phrase here');\ndefine('LOGGED_IN_SALT', 'put your unique phrase here');\ndefine('NONCE_SALT', 'put your unique phrase here');<\/pre>\n<p>&nbsp;<\/p>\n<p>Daria para escrever um belo texto explicando essas constantes e como o\u00a0<strong>WordPress<\/strong> lida com elas, mas vou simplificar para n\u00e3o fugirmos do foco do texto.<\/p>\n<p>As constantes\u00a0<em>AUTH_KEY<\/em>, <em>SECURE_AUTH_KEY<\/em>, <em>LOGGED_IN_KEY<\/em> e<em>NONCE_KEY<\/em> s\u00e3o respons\u00e1veis por garantir a criptografia dos <em>cookies<\/em>\u00a0do usu\u00e1rio gerados pelo\u00a0<strong>WordPress<\/strong>. O sistema de autentica\u00e7\u00e3o do <strong>WordPress<\/strong> \u00e9 baseado nesses\u00a0<em>cookies<\/em>.<\/p>\n<p>Quer tirar a prova real? Autentique-se no <em>Dashboard,<\/em>\u00a0edite o valor da constante<em>AUTH_KEY<\/em> no seu <em>wp-config.php\u00a0<\/em>e d\u00ea um <em>refresh<\/em>\u00a0na p\u00e1gina rec\u00e9m-autenticada do <em>Dashboard<\/em>. Voc\u00ea ser\u00e1 direcionado(a) para p\u00e1gina de <em>log in<\/em>\u00a0do\u00a0<strong>WordPress<\/strong>.<\/p>\n<p>Repare que para cada <em>KEY<\/em> h\u00e1 um <em>SALT<\/em> correspondente. As <em>KEYs<\/em> adicionam elementos aleat\u00f3rios para a senha. J\u00e1 os <em>SALTs<\/em> s\u00e3o usados para melhorar ainda mais o resultado gerado pelas\u00a0<em>KEYs<\/em>.<\/p>\n<p>Deixando a teoria de lado, para nos auxiliar o time do\u00a0<strong>WordPress<\/strong> disponibilizou uma pequena fun\u00e7\u00e3o em sua API para gerar os valores das constantes automaticamente:\u00a0<a href=\"https:\/\/api.wordpress.org\/secret-key\/1.1\/salt\/\">https:\/\/api.wordpress.org\/secret-key\/1.1\/salt\/<\/a><\/p>\n<p>Assim, basta acessar a p\u00e1gina acima, copiar o conte\u00fado dela e substituir as atuais constantes KEYs e SALTs em seu <em>wp-config.php<\/em>\u00a0com as geradas pela API.<\/p>\n<p>&nbsp;<\/p>\n<h3>6. Atualiza\u00e7\u00f5es do WordPress<\/h3>\n<p>\u00c9 sempre importante manter seu <strong>WordPress<\/strong> atualizado.<\/p>\n<p>As vers\u00f5es pontuais em geral trazem corre\u00e7\u00f5es de <em>bugs<\/em>\u00a0e pequenas modifica\u00e7\u00f5es.\u00a0Assim, \u00e9 sempre uma boa pr\u00e1tica configurar o <strong>WordPress<\/strong>\u00a0para receb\u00ea-las automaticamente.<\/p>\n<p>Como exemplo, cito a vers\u00e3o 3.8.1 do\u00a0<strong>WordPress<\/strong>, que trouxe a\u00a0<a title=\"WordPress 3.8.1 Maintenance Release\" href=\"http:\/\/wordpress.org\/news\/2014\/01\/wordpress-3-8-1\/\">corre\u00e7\u00e3o de 31\u00a0<em>bugs<\/em><\/a>\u00a0existentes na vers\u00e3o 3.8.<\/p>\n<p>Para ativar as atualiza\u00e7\u00f5es autom\u00e1ticas das vers\u00f5es pontuais, adicione a seguinte linha ao seu <em>wp-config.php<\/em>:<\/p>\n<pre class=\"lang:php decode:true\">define('WP_AUTO_UPDATE_CORE', 'minor');<\/pre>\n<p>&nbsp;<\/p>\n<p class=\"lang:php decode:true \">Depois disso basta salvar o arquivo e fech\u00e1-lo.<\/p>\n<p>&nbsp;<\/p>\n<h3>7. WordPress, <em>plugins<\/em> e temas<\/h3>\n<p>Por padr\u00e3o, o <strong>WordPress<\/strong> permite editar arquivos PHP via <em>Dashboard<\/em>. Isso pode trazer grandes problemas se algu\u00e9m que n\u00e3o deveria, de alguma forma, obtiver acesso ao <em>Dashboard<\/em>.<\/p>\n<p>Assim, recomendo que desabilite o editor padr\u00e3o do <strong>WordPress<\/strong> e edite seus arquivos somente via SFTP ou SSH. Para desabilit\u00e1-lo, basta adicionar a seguinte linha ao <em>wp-config.php<\/em>:<\/p>\n<pre class=\"lang:php decode:true \">define('DISALLOW_FILE_EDIT', true);<\/pre>\n<p>&nbsp;<\/p>\n<p>Outro ponto importante: manter seus\u00a0temas e <em>plugins<\/em> atualizados. As atualiza\u00e7\u00f5es trazem corre\u00e7\u00f5es de seguran\u00e7a e de demais <em>bugs<\/em>, bem como novas funcionalidades para o tema ou\u00a0<em>plugin<\/em>.<\/p>\n<p>Tamb\u00e9m \u00e9 importante ter certeza que o <em>plugin<\/em> ou tema continua sendo suportado pelo(s) desenvolvedor(es), bem como verificar se ele \u00e9 compat\u00edvel com sua atual vers\u00e3o do <strong>WordPress<\/strong>.<\/p>\n<p>Al\u00e9m disso, temas e <em>plugins<\/em>\u00a0que n\u00e3o est\u00e3o sendo usados devem ser removidos do seu <strong>WordPress<\/strong>, pois podem representar problemas de seguran\u00e7a, tendo em vista que continuam acess\u00edveis mesmo quando desativados no <em>Dashboard<\/em>.<\/p>\n<p>&nbsp;<\/p>\n<h3>8. Prote\u00e7\u00e3o contra ataques DDoS ao xmlrpc.php<\/h3>\n<p>Atualmente existe uma <a title=\"More Than 162,000 WordPress Sites Used for Distributed Denial of Service Attack\" href=\"http:\/\/blog.sucuri.net\/2014\/03\/more-than-162000-wordpress-sites-used-for-distributed-denial-of-service-attack.html\">onda de ataques <em>DDoS<\/em><\/a> destinados ao arquivo\u00a0<em>xmlrpc.php<\/em> das instala\u00e7\u00f5es <strong>WordPress<\/strong>. E \u00e9 muito comum ver este tipo de ataque comprometer a performance do <em>site<\/em> e, muitas vezes, at\u00e9 tir\u00e1-lo do ar.<\/p>\n<p>Para resolver o problema, a <a title=\"Sucuri Security\" href=\"http:\/\/sucuri.net\/\">Sucuri.net<\/a>\u00a0\u2013 empresa especializada em seguran\u00e7a\u00a0<strong>WordPress<\/strong>\u00a0\u2013 recomenda que o protocolo XMLRPC (<em>pingback<\/em>) seja desativado.<\/p>\n<p>Com base no c\u00f3digo recomendado pela\u00a0<em>Sucuri<\/em>, escrevi um pequeno <em>plugin<\/em> que pode ser adicionado ao\u00a0<strong>WordPress<\/strong>. Basta criar um arquivo chamado <em>disable-xmlrpc.php<\/em> em seu diret\u00f3rio de <em>plugins<\/em>\u00a0(normalmente <em>wp-content\/plugins\/<\/em>) com o seguinte conte\u00fado:<\/p>\n<pre class=\"lang:php decode:true\">\/**\n * Plugin Name: Disable XMLRPC\n * Description: This plugin disables the XMLRPC protocol to avoid DDoS attacks.\n * Version: 0.1 by Sucuri Security\n *\/<\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"lang:php decode:true \">add_filter( 'xmlrpc_methods', function( $methods ) {\n unset( $methods['pingback.ping'] );\n return $methods;\n} );<\/pre>\n<p>&nbsp;<\/p>\n<p class=\"lang:php decode:true \">Depois disso, salve e feche o arquivo, v\u00e1 at\u00e9 o <em>Dashboard<\/em> e habilite o <em>plugin<\/em> <img decoding=\"async\" class=\"wp-smiley\" src=\"http:\/\/tiagohillebrandt.eti.br\/wp-includes\/images\/smilies\/icon_smile.gif\" alt=\":)\" \/><\/p>\n<p><strong>ATUALIZA\u00c7\u00c3O:<\/strong>\u00a0seguindo a dica do Diego, o bloqueio sugerido pela <em>Sucuri.net<\/em>\u00a0\u00e9 efetuado por meio de c\u00f3digo <strong>PHP<\/strong>. Ou seja, vai funcionar por\u00e9m exigir\u00e1 v\u00e1rios recursos do servidor para, por exemplo, bloquear um ataque <em>DDoS<\/em>. Assim, se torna mais eficiente colocar este bloqueio diretamente no servidor <em>web<\/em>.<\/p>\n<p>Com base nisso, apresento abaixo uma solu\u00e7\u00e3o mais eficiente, bloqueando as requisi\u00e7\u00f5es ao XMLRPC diretamente no servidor <em>web<\/em>.<\/p>\n<p><strong>Nginx<br \/>\n<\/strong>Adicionar a seguinte linha no arquivo de configura\u00e7\u00e3o do seu site:<\/p>\n<pre class=\"lang:php decode:true \">if ($request_uri ~ ^\/xmlrpc\\.php$) { return 403; }<\/pre>\n<p>&nbsp;<\/p>\n<p>Ap\u00f3s adicionar, ser\u00e1 necess\u00e1rio reiniciar o <em>Nginx<\/em>.<\/p>\n<p><strong>Apache<br \/>\n<\/strong>Basta adicionar a seguinte regra ao seu <em>.htaccess<\/em>:<\/p>\n<pre class=\"lang:php decode:true\"># Disables the access to XMLRPC file\n&lt;files xmlrpc.php&gt;\norder allow,deny\ndeny from all\n&lt;\/files&gt;<\/pre>\n<p>&nbsp;<\/p>\n<h3>9. Outras medidas de seguran\u00e7a<\/h3>\n<p>Al\u00e9m das dicas anteriores, seguem algumas outras medidas de seguran\u00e7a que poderiam ser adotadas:<\/p>\n<ul>\n<li>Instalar um\u00a0<em>plugin<\/em>\u00a0de seguran\u00e7a para evitar ataques de for\u00e7a bruta e\/ou<em>DDoS<\/em><\/li>\n<li>Manter os <em>softwares<\/em> do servidor atualizados<\/li>\n<li>Atualizar as senhas dos usu\u00e1rios esporadicamente<\/li>\n<li>Configurar um <em>firewall<\/em><\/li>\n<li>Habilitar autentica\u00e7\u00e3o HTTP b\u00e1sica para acessar o <em>wp-admin<\/em><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p>O que achou das dicas? Esse tutorial lhe ajudou de alguma forma? Se sim, tudo que pe\u00e7o \u00e9 que ajude a divulg\u00e1-lo. E n\u00e3o esque\u00e7a de compartilhar suas experi\u00eancias e dicas nos coment\u00e1rios, para incrementar ainda mais a troca de conhecimento por aqui.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dica de como aumentar a seguran\u00e7a do seu site ou blog feito em Wordpress. Esta postagem aborda 9 itens que podem fazer a diferen\u00e7a entre n\u00e3o virar estat\u00edstica de sites hackeados.<\/p>\n","protected":false},"author":1,"featured_media":3899,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6,25,30],"tags":[513,569,674],"class_list":["post-3892","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dicas","category-seguranca","category-wordpress-2","tag-proteger-wordpress","tag-seguranca-wordpress","tag-wordpress-seguro"],"_links":{"self":[{"href":"https:\/\/www.turbosite.com.br\/blog\/wp-json\/wp\/v2\/posts\/3892","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.turbosite.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.turbosite.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.turbosite.com.br\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.turbosite.com.br\/blog\/wp-json\/wp\/v2\/comments?post=3892"}],"version-history":[{"count":0,"href":"https:\/\/www.turbosite.com.br\/blog\/wp-json\/wp\/v2\/posts\/3892\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.turbosite.com.br\/blog\/wp-json\/wp\/v2\/media\/3899"}],"wp:attachment":[{"href":"https:\/\/www.turbosite.com.br\/blog\/wp-json\/wp\/v2\/media?parent=3892"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.turbosite.com.br\/blog\/wp-json\/wp\/v2\/categories?post=3892"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.turbosite.com.br\/blog\/wp-json\/wp\/v2\/tags?post=3892"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}