As includes PHP e a exposição do código-fonte

Das inúmeras funções do PHP, uma poderosa aliada do desenvolvedor é a função include(), mas se usada de forma incorreta pode causar grandes problemas de segurança no sistema. Nesse artigo vamos falar um pouco sobre as funções include()/require() e ver como evitar a exposição de código-fonte.

Por | @jonathanlamimkt Programação

Das inúmeras funções do PHP, uma poderosa aliada do desenvolvedor é a função include(), mas se usada de forma incorreta pode causar grandes problemas de segurança no sistema.

Nesse artigo vamos falar um pouco sobre as funções include()/require() e ver como evitar a exposição de código-fonte.

Para começar, vamos entender o que cada uma das funções faz dentro do script, quando é inserida.

include(): ao incluir um arquivo utilizando essa função, acontece a mudança do interpretador, que passa do modo PHP para o modo HTML, retornando ao final para o modo PHP.

Existe a possibilidade de dar incluir arquivos locais ou em outros servidores remotos através de uma URL.

O total controle sobre a utilização da função include() é tido quando se tem o domínio da diretriz include_path.

A diretriz include_path é responsável por apontar os diretórios na qual a função include() e as demais variantes irão procurar os arquivos a serem incluídos.

require(): possui uma semelhança muito grande com a função include(), mas possui uma diferença considerável en sua maneira de manipular os erros. Se o arquivo a ser incluído pela função require() não for encontrado, ela irá tratar o warning como sendo um erro fatal, interrompendo assim o processamento da página, diferente da função include() que se não encontrar o arquivo continua o processamento.

include_once(): semelhante modo à include(), ela inclui um arquivo, porém verifica se o mesmo já havia sido incluído anteriormente na mesma página, caso sim, então ela não inclui o arquivo. Assim pode-se evitar que ajam alterações nos valores das variáveis declaradas, que haja uma redefinição das funções e etc.

require_once(): tem o seu funcionamento igual ao da função include_once(), e as características de require(), verificando se o arquivo já foi inserido e se o arquivo não existir interrompe o processamento da página.

Vejamos agora alguns cuidados que os desenvolvedores PHP devem tomar com scripts PHP que contém informações sigilosas.

Nenhuma extensão diferente de .php deve ser atribuída aos arquivos. O motivo é que o Apache não reconhece extensões, como por exemplo a extensão .inc, muito utilizada por novos programadores e até mesmo por programadores experientes. A extensão (que não deve ser considerada uma extensão) .inc é utilizada pelos programadores para indicar que é um arquvo de inclusão. Não estou dizendo que não podem utilizar, mas a extensão final dos arquivos deve ser sempre .php, assim, nomeie os arquivos de inclusão como arquivo.inc.php, e não terá problemas.

Os arquivos de inclusão (.inc.php) não devem ser armazenados no diretório de trabalho do servidor, que é definido pela diretriz DocumentRoot no Apache.

Um exemplo claro é ter o seguinte script de inclusão:

bancodedados.inc


Se esse arquivo for chamado através da barra de endereço do browser da seguinte forma http://www.meusite.com.br/bancodedados.inc, todas as informações descritas nele serão exibidas como um texto, pois o Apache não reconhece a extensão .inc, renderizando então como se fosse um texto comum.

Nesse momento então as informações sigilosas de acesso ao banco de dados do seu sistema estariam sendo exibidas para qualquer pessoa.

A solução desse problema é bem simples, basta renomear o arquivo para bancodedados.inc.php, e quando ele for chamado na barra de endereço por http://www.meusite.com.br/bancodedados.inc.php, o servidor não irá imprimir nada na tela, pelo simples fato de o arquivo só conter variáveis recebendo valores, sem nenhuma instrução para escrita na tela.

Essa técnica de renomear os arquivos de inclusão utilizada com a função de inclusão correta, pode dar ao sistema um pouco mais de segurança.

Dica: Se está escrevendo código em PHP, a extensão tem que ser sempre PHP, mesmo que seja um arquivo de inclusão, uma classe entre outros.


Até a próxima!

Mais sobre: programação, php, includes
Share Tweet
DESTAQUESRecomendado
Mais compartilhados
Comentários