terça-feira, 21 de setembro de 2010

Impedir acesso direto com PHP sem impedir o trabalho do AJAX


Já andei muito pelo google atrás desta solução e não encontrei nenhuma efetiva até que conseguir desenvolver uma que atendesse as minhas necessidades, então vamos lá.


Vou colocar o código aqui e explicar logo depois.
$requi = $_SERVER["HTTP_REFERER"];
$requi= strtolower("/$requi/"); //
$server = $_SERVER['SERVER_NAME'];
$server= strtolower("/$server/");
if(preg_match($server, $requi) == 0){
 header("Location: http://www.SeuSite.com.br");
 die();
}


Explicação
Linha 1 Aqui nós pegamos quem esta chamando o script.
Linha 2 Transforma todas as letra para minúscula.
Linha 3 Aqui pegamos o nome do servidor que é www.SeuSite.com.br.
Linha 4  Transforma todas as letra para minúscula.
Linha 5 Se ele não encontrar $server(www.SeuSite.com.br) na variável $requi o resultado é 0 então ele entra no if.
Linha 6 Redireciona quem tiver tentando acessar para página inicial.


Para utilizar esse script é só colocar na primeira linha do seu arquivo.php recomendo que crie um NoDirectAccess.php (de o nome que você quiser) e coloque o código dentro do mesmo depois você da um require_once("NoDirectAccess.php"); na primeira linha dos scripts que você queira proteger contra acesso direto.


Com isso evitamos dois problemas além de não permitir o acesso direto impede que scripts externos acessem o arquivo ou a maioria deles.


Dicas: Você ainda pode aprimorar esse script usando um banco de dados e armazenar os sites que podem acessar os seus arquivos mas isso é assunto para outro artigo.



9 comentários:

Marcelo Bohn disse...

Grande dica!! Muito obrigado

Thiago Sales disse...

Obrigado funcionou.. estive preocurando um desses mais nenhum funconava flw..

asdf disse...

Perfeito!

Anônimo disse...

Excelente!
Somente atenção com os espertos que inserirem o nome do server como uma pasta. Assim vai passar.

Valeu pela ótima dica.

Diego Cipriano disse...

A intenção aqui foi de evitar acesso direto.
Para proteger efetivamente um dado você teria que acrescentar linhas de controle de acesso que deve ser utilizada para proteger toda e qual quer informação sigilosa a qual é a única coisa que "porcos" dão a vida para conseguir burlar.

Anônimo disse...

Grande Ajuda, era tudo que eu estava precisando valeu pelo post.

Naldo disse...

Ótimo. Era isso que eu precisava. Muito obrigado

Anônimo disse...

Muito bom, foi o único script que achei na net que funcionou , valeu!!!

Unknown disse...

Show de bola, salvou minha pele

Postar um comentário

Related Posts with Thumbnails