Pergunta

O que é a maneira mais confiável e seguro para determinar o que a página seja enviada, ou chamado (via AJAX), a página atual. Eu não quero usar o $_SERVER['HTTP_REFERER'], por causa da (falta de) fiabilidade, e eu preciso da página que está sendo chamado para vir apenas de solicitações originárias no meu site.
Edit:. Eu estou olhando para verificar se um script que pré-formas de uma série de ações está sendo chamado de uma página no meu site

Foi útil?

Solução

O REFERER é enviado pelo navegador do cliente como parte do protocolo HTTP, e, portanto, não confiável, de fato. Pode não estar lá, pode ser forjado, você simplesmente não pode confiar nele, se é por razões de segurança.

Se você quiser verificar se um pedido é proveniente de seu site, bem, você não pode, mas você pode verificar o usuário tem sido a de seu site e / ou é autenticado. Os cookies são enviados em solicitações de AJAX para que você pode contar com isso.

Outras dicas

O que eu encontrei melhor é um CSRF token e guardá-lo na sessão para links em que você precisa para verificar a referência.

Então, se você está gerando um retorno de chamada FB então seria algo parecido com isto:

$token = uniqid(mt_rand(), TRUE);
$_SESSION['token'] = $token;
$url = "http://example.com/index.php?token={$token}";

Então, o index.php será parecido com este:

if(empty($_GET['token']) || $_GET['token'] !== $_SESSION['token'])
{
    show_404();
} 

//Continue with the rest of code

Eu sei de sites seguros que fazem o equivalente a isso para todas as suas páginas seguras.

Usando $ _SERVER [ 'HTTP_REFERER']

O endereço da página (se houver) que o agente do usuário para o pagina atual. Este é definido pelo agente de utilizador. Nem todos os agentes de utilizador irão definir isso, e alguns ainda possuem a capacidade de modificar HTTP_REFERER como um característica. Em suma, não pode realmente ser confiável.

if (!empty($_SERVER['HTTP_REFERER'])) {
    header("Location: " . $_SERVER['HTTP_REFERER']);
} else {
    header("Location: index.php");
}
exit;

Não há nenhuma maneira confiável para verificar isso. É realmente sob a mão do cliente para lhe dizer onde ele veio. Você poderia imaginar usar cookies ou sessões de informações colocar apenas em algumas páginas do seu site, mas isso iria quebrar a sua experiência do usuário com marcadores.

Temos única opção única à esquerda depois de ler todos os problemas falso referrer: i.e. A página que desejamos acompanhar como referencial deve ser mantido na sessão, e como ajax chamada em seguida, verificar em sessão se ele tem valor de página de referência e fazendo a ação outro sábio nenhuma ação.

Enquanto, por outro lado, como ele solicitar qualquer página diferente, em seguida, fazer o valor da sessão de referência para null.

Lembre-se que variável de sessão é definido no pedido de página único desejo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top