Com o procedimento anterior, certificamos que a listagem de diretórios do caminho wp-content/uploads não fosse mais exibida, agora precisamos impedir o uso impróprio dos arquivos do WordPress. Vamos explanar a estrutura de diretório do WordPress para melhor entendermos. Lembrando que caso desejem saber como operam e para que serve detalhadamente cada diretório, consultem o manual do sistema.
Tópicos
- HTACCESS – WordPress
- HTACCESS – Impedindo Listagem do Diretório Uploads
- HTACCESS – Bloquear Subdiretório do Diretório WordPress
- HTACCESS – Protegendo o Acesso WP-CONFIG
- HTACCESS – Personalizando Página Erro HTML
- HTACCESS – Controlando Hotlink’s
- HTACCESS – Impedir Script Injection
- HTACCESS – Impedindo Cadastro e Postagem Não Autorizada SPAM
- HTACCESS – Impedindo Lista Usuários
Listagem Diretório WP-CONTENT
- wp-includes – para os arquivos a serem usados tanto no painel administrativo, quanto aos recursos extras;
- wp-admin – para agrupar os arquivos usados no Dashboard;
- wp-content – para os recursos extras, uploads.
Quando referimos os capítulos subjacentes, eremos criar um arquivo .htaccess para cada diretório.
WP-INCLUDES
Impedir acesso aos arquivos da pasta wp-includes do WordPress
Começando pela pasta wp-includes, faça o bloqueio dos códigos PHP inserindo dentro do .htaccess as seguintes instruções:
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^wp-admin/includes/ - [F,L] RewriteRule !^wp-includes/ - [S=3] RewriteRule ^wp-includes/[^/]+\.php$ - [F,L] RewriteRule ^wp-includes/js/tinymce/langs/.+\.php - [F,L] RewriteRule ^wp-includes/theme-compat/ - [F,L] </IfModule>
WP-ADMIN
Impedir acesso aos arquivos da pasta wp-admin do WordPress
Seguindo em frente, pois como diz o ditado: “atrás vem gente”, o próximo diretório a ter seu acesso protegido será a wp-admin. Aqui teremos uma atenção peculiar, porquê nesse caso o bloqueio deve ser feito com cuidado, pois alguns arquivos dessa pasta precisam necessariamente ser executados individualmente; como é o caso do wp-admin/admin-ajax.php usado para as requisições do AJAX no WordPress que não pode ter restrição de acesso.
Por isso as instruções do “.htaccess” serão para impedir que os arquivos desse diretório sejam executados por outro domínio. Desse modo a segurança do WordPress fica garantida pois apenas os códigos do seu servidor podem transferir dados via POST aos arquivos e diretório do wp-admin.
Essa instrução tem que está em um arquivo .htaccess dentro do diretório wp-admin
Código ficara assim:
<IfModule mod_rewrite.c>
RewriteEngine on RewriteCond %{REQUEST_METHOD} POST RewriteCond %{HTTP_REFERER} !^https://(.*)?seuwordpress.com.br/ [NC] RewriteCond %{REQUEST_URI} ^(.*)?wp-login\.php(.*)$ [OR] RewriteCond %{REQUEST_URI} ^(.*)?wp-admin$ RewriteRule ^(.*)$ - [F]
</IfModule>
Se notarem, na 3ª linha do código acima, temos a referência “!https://…”, mas caso sua página esteja com o protocolo HTTPS habilitado, podemos realizar o referência como “!https://…”. Porém, se sua página web responde pelos dos protocolos “HTTP e HTTPS” pode acrescer mais essa linha abaixo da 3ª linha:
RewriteCond %{HTTP_REFERER} !^https://(.*)?seuwordpress.com.br/ [NC]
O código completo ficou assim:
<IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{REQUEST_METHOD} POST RewriteCond %{HTTP_REFERER} !^https://(.*)?seuwordpress.com.br/ [NC] RewriteCond %{HTTP_REFERER} !^https://(.*)?seuwordpress.com.br/ [NC] RewriteCond %{REQUEST_URI} ^(.*)?wp-login\.php(.*)$ [OR] RewriteCond %{REQUEST_URI} ^(.*)?wp-admin$ RewriteRule ^(.*)$ - [F] </IfModule>
Bem, seguindo as boas práticas, a linha mais recomendada a ser escrita nesse código, caso seu site WordPress estivesse com o protocolo HTTPS habilitado, seria a linha que contém “!https://…” substituindo a HTTP por HTTPS, certificando que só os códigos HTTPS poderiam ser acessados.
WP-CONTENT
Não permitir o acesso direto aos arquivos PHP dos plug-ins
O diretório CONTENT é o diretório de maior acesso externos. Aqui estão os subdiretórios que garantem que os principais serviços do WordPress funcionem e, que funcionem com harmonia. A segurança nesse diretório deve estar bem redonda com as permissões muito bem configuradas.
Nesse diretório temos mais quatro ou mais subdiretórios, a quantidade vai depender dos recursos que foi instalado em seu WP:
- Languages;
- Plugins;
- Themes;
- Upgrade;
- Uploads.
Nestes diretórios estão praticamente toda funcionalidade lado cliente do seu WordPress. Podemos dizer que 70% de acesso do seu site, são realizados nesse diretório.
Diretório Plugin
Controlar o acesso aos arquivos PHP do diretório Plug-in
Tratando os Plugins, a instrução a ser feita será impedir que qualquer arquivo do tipo PHP seja executado individualmente. Os Plugins necessitam que o WordPress tenha sido carregado para serem executados como esperado, então não faz sentido fazer uma chamada dos arquivos de maneira individual, entretanto, alguns cuidados devem ser tomados.
As linhas de código que poderíamos utilizar seriam essas:
<IfModule mod_rewrite.c>
RewriteEngine on RewriteRule wp-content/plugins/(.*\.php)$ - [R=404,L]
Caso algum plugin apresente erros
Após a solução acima, se notares que alguns plugins parou de funcionar, ou andam apresentando erros ou comportamentos não esperados, segue algumas orientações:
Conforme já sinalizado, temos que tomar alguns cuidados, pois alguns pluigins podem chamar os arquivos PHP diretamente. Em algum plugin’s, principalmente aquele que você tenha feito, caso não siga a estrutura padrão, ou melhor, o recomendado de funcionamento, e se você faz chamadas diretas aos arquivos PHP; mediante a isso, podemos permitir apenas o acesso aos diretórios desse Plugin especifico.
Abaixo explanamos um exemplo a exceção da regra para rodar os arquivos do Plugin personalizado permitindo o acesso ao diretório nome-do-pluigin.
RewriteCond %{REQUEST_URI} !^/wp-content/plugins/nome-do-plugin/ RewriteRule wp-content/plugins/(.*\.php)$ - [R=404,L]
Se fizermos uma chamada de apenas um ou poucos arquivos do seu Plugin de modo direto, você também pode optar por criar exceções aos arquivos e não ao diretório completo. Abaixo o exemplo liberando o acesso ao arquivo index.php do nome-do-pluigin2.
RewriteCond %{REQUEST_URI} !^/wp-content/plugins/nome-do-pluigin2/index.php RewriteRule wp-content/plugins/(.*\.php)$ - [R=404,L]
Mais uma vez não esqueça de fechar as instruções com a tag </IfModule>
Diretório Themes
Controlar o acesso aos arquivos PHP do diretório Themes
Trataremos o diretório Themes, no controle do acesso direto aos arquivos PHP, ocorre do mesmo modo que os Plugins. Basta que você troque o endereço da pasta de Plugins para a pasta de Themes e no caso das exceções, mencionar qual diretório ou arquivo que pode ser acessado via endereço absoluto.
Aqui só deixa configurado os Themes que está em uso.
RewriteCond %{REQUEST_URI} !^/seublog/wp-content/themes/meu-tema/ RewriteRule wp-content/themes/(.*\.php)$ - [R=404,L]
Permitindo um arquivo PHP especifico.
RewriteCond %{REQUEST_URI} !^/seublog/wp-content/themes/meu-tema/arquivo-permitido.php #Bloqueio do acesso não aturizados RewriteRule wp-content/themes/(.*\.php)$ - [R=404,L]
Diretório Upgrade
Controlar o acesso aos arquivos PHP do diretório Upgrade
Esse diretório não sei ao certo para que serve, posso chutar se tratar de um diretório que recebe os arquivos de atualização do WordPress, porém, é uma informação que carece de confirmação, aquele visitante que souber para que serve, não deixe de informar nos comentários.
Entretanto para não deixar sem proteção, inclui a seguinte linha no seu arquivo.
RewriteRule wp-content/upgrade/(.*\.php)$ - [R=404,L]
Diretório Uploads
Controlar o acesso aos arquivos PHP do diretório Uploads
Apesar de no início desse tópico já termos tratado a listagem de diretório do /seuwordpress/wp-content/uploads, podemos aprimorar a segurança também, acrescentando essa linha em nosso .htaccess.
RewriteRule wp-content/uploads/(.*\.php)$ - [R=404,L]
O meu script completo ficou assim:
# Linha incluida por Fábio Couto webmaster Bidela.com.br # em 24/01/2020 # BEGIN WordPress # As diretrizes (linhas) entre `BEGIN WordPress` e` END WordPress` são # geradas dinamicamente e só devem ser modificadas através de filtros do WordPress. # Quaisquer alterações nas diretivas entre esses marcadores serão sobrescritas. <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] # END WordPress # Codigo inserido por Fabio Couto Webmaster www.bidela.com.br # em 15/03/2020 RewriteEngine on #Tratando a pasta plugins evitando acesso diretorio do PHP RewriteRule wp-content/plugins/(.*\.php)$ - [R=404,L] #Tratando a pasta themes evitando acesso diretorio do PHP RewriteCond %{REQUEST_URI} !^/blog.bidela.com.br/wp-content/themes/anarcho-notepad/ RewriteRule wp-content/themes/(.*\.php)$ - [R=404,L] #Tratando a pasta upgrade evitando acesso diretorio do PHP RewriteRule wp-content/upgrade/(.*\.php)$ - [R=404,L] #Tratando a pasta uploads evitando acesso diretorio do PHP RewriteRule wp-content/uploads/(.*\.php)$ - [R=404,L] </IfModule mod_rewrite.c>
Esse script foi a melhor configuração que encontrei para o blog do Bidela. Leiam com calma e atenção para melhor escrever o seu script, que melhor atenda às necessidades de seu site.
Não esquecendo que temos que terminar as instruções com a seguinte tag </IfModule>.
Controle de acesso direto a determinada extensão
Eu mencionei que o diretório wp-content são acessados com muita frequência, e talvez esse diretório seja o mais acessado do sistema, devido a esse diretório ter depositado em seu interior uma grande gama dos arquivos no diretório uploads, que serão acessados por todos os visitantes e usuários logados.
Nesse diretório temos arquivos de imagens, textos, planilhas, áudio e todas as mídias suportados e que os usuários subiram para o servidor.
Para darmos sequências ao nosso “protocolo” de segurança vamos criar outro arquivo .htaccess, mas dessa vez na raiz do diretório wp-content. E nesse arquivo vamos inserir as seguintes instruções.
Order Allow,Deny Deny from all <FilesMatch \.(css|js|html|jpg|jpeg|png|gif)$ > Allow from all </FilesMatch >
Ao escrever esse código estamos informando ao servidor que apenas os arquivos com as extensões previstas podem ser acessados diretamente via caminho absoluto ex: https://bolgdobidela.com.br/wp-content/pagina.php. Nesse exemplo a URL acima não seria exibida. Em seu lugar a página com o erro 500 seria exibida. Fiquem atendo que outros extensões que não estão listadas na instrução, como fonts a própria extensão .php correria erro.
Aqui encerramos nossa instruções para tratar os arquivos e diretórios WP-CONTENT. É perceptível que não realizamos nenhuma tratativa para o diretório languages, devido a se tratar de um diretório basicamente dos arquivos de traduções, mas caso queira realizar uma instrução no .htaccess é só seguirem os exemplos.
Se está gostando das postagens, se inscreva em nosso site para receber mais materiais de nosso blog, é grátis, você vai ser notificado quando novas postagens forem publicadas, recebendo assim mais conteúdos de qualidades e ainda vai dar aquela força pra nossa comunidade. E não esquece de compartilhar em suas redes sociais os botões estão no final desse página.
No final dessa página temos um campo onde você é bem vindo para deixar seus comentários. Pode ser uma opinião, elogios, críticas ou correções. Pode ficar a vontade para tirar suas dúvidas ou colaborar acrescentando algo que tenhamos deixado passar desapercebido.
Sua visita e feedback é muito importante para o nosso espaço.
Obrigado. A postagem ajudou muito.