Bloqueando acesso direto em scripts PHP

Bloquear scripts contra acesso direto, é algo bastante necessário pra quem desenvolve para web, principalmente se o arquivo a ser bloqueado seja um arquivo de configurações, com funções úteis, etc.

O ideal nestas situações, é que se mantenha o arquivo acima da pasta raiz do seu servidor, porém quando isto não é possível, temos uma outra alternativa: vamos comparar o nome do arquivo a ser protegido, com o nome do arquivo que esta em execução.

Para isto, basta adicionar este trecho de código ao arquivo que se deseja proteger:

<?php

if (strcmp(basename($_SERVER[‘SCRIPT_NAME’]), basename(__FILE__)) === 0){

header(“location: teste.php”);

}

?>

Vamos as explicações:

Utilizamos a função strcmp() para comparar duas strings, que são elas:

$_SERVER[‘SCRIPT_NAME’] -> Variável que contem o nome do script em execução.

__FILE__ -> Constante que contém o nome do arquivo onde a constante foi chamada.

Neste caso, dentro de __FILE__, temos o nome do arquivo a ser incluido, ou seja, o arquivo que não queremos disponibilizar o acesso direto. Dentro da variável $_SERVER[‘SCRIPT_NAME’], temos o nome do script que está em execução. Para complementar, utilizamos a função basename(), que retira todo o caminho, retornando apenas o nome do arquivo em si.

Com a função strcmp(), comparamos as duas strings. Se as duas forem iguais (retorno da função strcmp() for igual a 0), é porque o arquivo que está sendo executado, tem o mesmo nome do arquivo que desejamos proteger, ou seja, que pode ser apenas incluído por outros scripts, portanto, vamos redirecionar o usuário para algum local, caso contrário, se os valores forem diferentes, continuamos executando o script normalmente.

Assim, o arquivo pode ser chamado normalmente por um include ou require, porém quando for acessado diretamente por um usuário, o usuário será redirecionado para a página informada na função header().

Até a próxima 😉