Muitos desenvolvedores PHP acabam usando em seus códigos arquivos com extensão .inc para configuração de variáveis ou inclusão de informações relevantes no site ou sistema. O uso de arquivos com este tipo de extensão é um simples convencionamento quando se deseja incluir algum dado em uma área específica da aplicação. Não existe problema algum em se usar arquivos .inc no PHP desde que o conteúdo do que se deseja “incluir” NÃO exponha dados sensíveis.

O que acontece muitas vezes, é que por descuido ou desconhecimento, alguns programadores utilizam arquivos com extensão .inc para configuração de variáveis sensíveis como usuário e senha de banco de dados, senhas diversas, cookies, hashs e etc. Além de usar arquivos com extensão .inc para lidar com esses tipos de dados ainda não configuram o servidor de forma apropriada para lidar com este tipo de arquivo. E é aí que mora o problema!

Por padrão, os servidores não processam arquivos com extensão .inc deixando-os assim para serem processados do lado do cliente. Assim, os navegadores web simplesmente mostram todo o conteúdo do arquivo em texto simples expondo todos os dados dentro dele.

Um exemplo deste cenário seria um arquivo chamado conectaBancoDeDados.inc na raíz do servidor com o seguinte conteúdo:

<?php
define('DB_DRIVER', 'mysql');
define('DB_HOST', 'localhost');
define('DB_USER', 'root');
define('DB_PWD', 'senha');
define('DB_DATABASE', 'meubancodedados');

try {
    $pdo = new PDO(DB_DRIVER.':host='.DB_HOST.';dbname='.DB_DATABASE, DB_USER, DB_PWD);

      if ($pdo) {
        echo "Conexão realizada com sucesso!";
      } else {
        echo "Problemas na conexão!";
      }

} catch (PDOException $exc) {
    echo "Problemas na conexão!";
    echo $exc->getMessage().
  }

Neste caso, o próposito para o qual o arquivo se serve, conectar no servidor mysql, funcionaria sem problemas. Ou seja, incluindo-o em alguma área do site para conexão com o banco de dados através de um arquivo chamado configura.php, por exemplo, o sistema iria funcionar tranquilamente:

Exemplo do arquivo “configura.php”:

<?php
require_once('conectaBancoDeDados.inc’);

Todavia, se o arquivo conectaBancoDeDados.inc for acessado diretamente via navegador web do usuário, por padrão, todo o conteúdo seria apresentado na tela como foi escrito. Dessa forma, os dados sensíveis como endereço do servidor mysql, usuário, senha e base de dados estariam expostos para qualquer pessoa ou até mesmo “crawlers” que ficam sondando este tipo de dados na web.

Você poderia afirmar: Ah, mas para isso a pessoa teria que saber o nome exato do meu arquivo .inc e eu poderia colocar um nome bem difícil que ninguém descobriria.

É verdade! Em muitos casos fica difícil saber exatamente o nome do arquivo por tentativa e erro, porém existem bots na internet, como o próprio GoogleBot, que facilitaria o trabalho de descoberta.

A internet é monitorada por bots o tempo todo para os mais diversos propósitos. O GoogleBot, por exemplo, avalia inúmeras páginas diariamente no intuito de verificar possíveis atualizações de conteúdo e se atualizar para cumprir a missão do google: “…organizar as informações do mundo e torná-las mundialmente acessíveis e úteis.” Nestas avaliações, os bots indexam as páginas para serem apresentadas nos resultados de pesquisa. Com isso, uma simples busca no google usando os famosos Google Dorks poderíamos chegar aos arquivos .inc em um servidor de forma fácil.

Exemplo de Google Dork para buscar arquivos sensíveis com extensão .inc:

ext:inc

Assim, todas as páginas indexadas com arquivos extensão .inc seriam apresentadas como resultado da pesquisa do google. A partir daí, qualquer um teria acesso aos dados.

 

Neste caso, o que fazer?

Particularmente, costumo evitar o uso deste tipo de extensão em qualquer aplicação PHP, uma vez que posso usar extensões .php para o propósito de configuração de variáveis por exemplo. Portanto, voltanto ao exemplo acima, eu utilizaria um arquivo conectaBancoDeDados.php e não teria o inconveniente de ele ser processado pelo navegador do cliente, sendo que extensões .php são processadas diretamente no servidor.

Uma outra saída, caso já tenha diversos arquivos .inc espalhados pelos seus códigos, cujo o esforço para renomeá-los é muito grande, seria configurar o seu servidor adequadamente para processar arquivos .inc como se fossem .php.

No Apache, a saída seria adicionar o seguinte código em .htaccess:

AddHandler application/x-httpd-php .inc

Assim, todos os arquivos com extensão .inc seriam processados pelo servidor como se fossem .php e os navegadores web de clientes que tentassem acessar estes arquivos diretamente não seriam capazes de ver o conteúdo.

 

Isto só vale para arquivos extensão .inc?

Não! Vários outros tipos de extensões não são reconhecidas por padrão pelos servidores web e deveriam ser tratados com o mesmo cuidado dos arquivos com extensão .inc. Abaixo estão exemplos de extensões que muitas das vezes são usadas em servidores que com uma simples pesquisa no google podem ser revelados:

ext:conf | ext:cnf | ext:reg | ext:inf | ext:rdp | ext:cfg | ext:txt | ext:ora | ext:ini | ext:inc | ext:sql | ext:dbf | ext:mdb | ext:bkf | ext:bkp | ext:bak

Tenha cuidado com os dados contidos em arquivos com estas extensões, pois podem estar sendo indevidamente expostos na internet. Veja a melhor forma de corrigir cada um dos casos para evitar dores de cabeça desnecessárias.

 

Conclusão

Tente evitar o uso de extensões genéricas em sites/sistemas PHP como as apresentadas acima. Dê preferência ao uso de extensões .php para dados sensíveis. Em casos particulares, tente aplicar a configuração correta no servidor para evitar exposição indevida de dados.

 

Referências

http://stackoverflow.com/questions/6536597/handle-inc-files-as-php

https://www.feistyduck.com/library/apache-security/online/apachesc-CHP-3.html

http://www.google.com.br/about/

WhatsApp Fale comigo!