Fóruns sobre PHP, JavaScript, HTML, MySQLi, jQuery, Banco de Dados, CSS


Moderador: web

 
Avatar do usuário
ADMIN
ADMIN
Tópico Autor
Mensagens: 17736
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

HTTP_REFERER Identificar se acesso ao arquivo é interno ou externo

26-12-2016 08:35

Nesse post vou dar uma dica de segurança para identificar através do PHP se o acesso do usuário a determinado arquivo veio de uma navegação no próprio domínio ou o acesso veio de domínio local ou de um outro servidor.

Para isso irei usar o $_SERVER["HTTP_REFERER"], que serve para pegar a URL de referência. Ou seja, a URL anterior a acessada no momento.

Para testar o HTTP_REFERER precisamos fazer o seguinte:

teste1.php

<a href="teste2.php">teste2.php</a>

teste2.php

<?php echo $_SERVER["HTTP_REFERER"]; ?>

O resultado deverá ser o seu domínio: www.seudominio.com

Agora a idéia é identificar se o possível invasor está tentando enviar algo de um formulário no localhost ou domínio dele direto para um arquivo no seu servidor.

Vamos imagina que você tenha o seguinte arquivo chamado recebe.php no seu servidor:

<?php if(isset($_POST['envio'])) { echo $_POST['envio']; } ?>

Como mostrado acima o script somente espera receber um valor chamado envio via post.
Mas isso não impede que alguém faça um formulário simples no próprio computador e envie os dados direto para o seu formulário sem nenhuma restrição. Por exemplo:

<form action="http://www.seudominio.com/recebe.php" method="post"> ..

Para fazer um bloqueio precisamos verifica se o acesso vem do próprio servidor ou de um servidor externo.

Para isso vamos fazer o seguinte teste:

Crie em seu servidor online um arquivo chamado recebe.php com o seguinte conteúdo:

<?php header("Cache-Control: no-cache, must-revalidate"); header("Expires: Mon, 01 Jan 2000 00:00:00 GMT"); clearstatcache(); if(!isset($_SERVER["HTTP_REFERER"])) { echo "sem acesso"; exit; } $url = $_SERVER["HTTP_REFERER"]; $host = parse_url($url); if($host['host']=="www.seudominio.com") { echo "acesso interno<br />"; } else { echo "acesso externo<br />bloqueado"; exit; } ?> dados liberado para acesso

No script acima onde está www.seudominio.com substitua pelo seu domínio atual.

Agora crie um arquivo chamado teste.html com o seguinte conteúdo.

<form action="http://www.seudominio.com/recebe.php" method="post"> <input type="submit" value="submit" /> </form> <a href="http://www.seudominio.com/recebe.php">link</a>

Esse arquivo teste.html você vai colocar na pasta raiz do seu domínio e também no seu computador.

Ai para fazer o teste você vai ter que abrir o teste.html no seu computador e fazer o envio pelo form ou acesso pelo link. E verá o resultado do recebe.php
Também acessará o teste.html do seu próprio domínio. http://www.seudominio.com/teste.html

Quando você acessar:
http://www.seudominio.com/teste.html e enviar a resposta será:

acesso interno
dados liberado para acesso


Quando você acessar:
teste.html do seu computador a resposta será;

acesso externo
bloqueado
2
A melhor hospedagem para o seu site HostGator!

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado