HTACCESS – Bloquear Subdiretório do Diretório WordPress

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

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} !^http://(.*)?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 “!http://…”, 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} !^http://(.*)?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.

Receba novos artigos assinando o nosso espaço.

Junte-se a 4 outros assinantes

No final dessa postagem temos um campo onde você é bem vindo para deixar seus comentários. Pode ser uma opinião, elogios, criticas 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.

Paz e até mais!

Esse é um artigo original do blog do bidela

HTACCESS – Bloquear Subdiretório do Diretório WordPress

Deixe uma resposta