Pergunta

Freqüentemente, ao procurar respostas, descobri que certos sites permitem que você leia as informações que eles oferecem se o referente for, por exemplo, Google.com. No entanto, se você vincular diretamente as informações, elas não estarão disponíveis.

O que estou procurando é o menor script de PHP que definirá um referente de minha escolha e um destino, assim:

http://example.com/ref_red.php?referer=http://google.com/&end=http://example.net/

Notas:

  • ref_red.php é o nome do script no meu exemplo.
  • referente e fim deve aceitar http, https, ftp.
  • referente e fim pode conter um URI de qualquer tipo, tão simples quanto http://end.com ou tão complicado quanto:http://example.com/some/rr/print.pl?document=rr, por exemplo.

NOTA: Conforme recomendado em uma resposta, estou adicionando isso. O script não é um proxy completo em si. Somente a solicitação inicial HTTP seria proxiada (não solicitações subsequentes como imagens, etc.) para o único propósito de definir o referente.

Foi útil?

Solução

Esta função deve lhe dar um ponto de partida de que buscará qualquer URL HTTP com o referencial especificado

O manuseio dos parâmetros de consulta deve ser bastante trivial, então vou deixar essa parte para você fazer

<?php

    echo geturl('http://some-url', 'http://referring-url');

    function geturl($url, $referer) { 

        $headers[] = 'Accept: image/gif, image/x-bitmap, image/jpeg, image/pjpeg,text/html,application/xhtml+xml'; 
        $headers[] = 'Connection: Keep-Alive'; 
        $headers[] = 'Content-type: application/x-www-form-urlencoded;charset=UTF-8'; 
        $useragent = 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.0.3705; .NET CLR 1.1.4322; Media Center PC 4.0)'; 

        $process = curl_init($url); 
        curl_setopt($process, CURLOPT_HTTPHEADER, $headers); 
        curl_setopt($process, CURLOPT_HEADER, 0); 
        curl_setopt($process, CURLOPT_USERAGENT, $useragent);
        curl_setopt($process, CURLOPT_REFERER, $referer);
        curl_setopt($process, CURLOPT_TIMEOUT, 30); 
        curl_setopt($process, CURLOPT_RETURNTRANSFER, 1); 
        curl_setopt($process, CURLOPT_FOLLOWLOCATION, 1); 

        $return = curl_exec($process); 
        curl_close($process); 

        return $return; 
    } 

?>

Outras dicas

Você pode usar um dos serviços disponíveis na Internet que permitem ocultar encaminhadores (definindo o endereço deles), mas não pode impor um referenciador específico que não é o referenciador real. O usuário deve realmente ser redirecionado para esse site (que aparecerá como um referenciador) antes de ser redirecionado para o site de destino.

Um desses serviços: http://linkanon.com

editar:

Como você mudou sua pergunta agora, meu comentário sobre escrever um agente de usuário no PHP que age como um proxy, se aplica, mas isso se aproxima de uma atividade criminosa, porque você estará exibindo um site de terceiros para um usuário que pode pensar que isso Ela está no site real, enquanto na verdade ela terá carregado seu conteúdo (o conteúdo que você passou). Para realizar essa atividade quase criminal (você está a um passo de tentar ler um nome de usuário e senha), você carrega o conteúdo do site de terceiros com PHP usando seu próprio agente de usuário escrito que especifica o referenciador falso e simplesmente passa o saída para visitante do seu site. A função no PHP que permite enviar cabeçalhos HTTP é cabeçalho ($ cabeçalho):

header("Referer: http://example.org");

Em vez de gritar com pessoas que tentam ajudar, você pode tentar ler HTTP (esse é o protocolo segundo o qual o mundo se vira) especificação sobre o cabeçalho do referente: http://www.w3.org/protocols/rfc2616/rfc2616-sec14.html (Consulte a Seção 14.36).

Você também pode querer ler http://en.wikipedia.org/wiki/Referrer_Spoofing Onde você pode ver que é tudo sobre o lado do cliente. PHP é o lado do servidor. Tudo o que você pode fazer é tentar escrever um código de cliente (JavaScript) gerado pelo PHP, mas se você tiver alguma sorte, está invadindo o mundo do usuário.

O referente é definido pelo seu navegador, não por qualquer mecanismo do lado do servidor. Acho que você pode construir um proxy no PHP que faz a solicitação do servidor remoto e define o cabeçalho do referente adequadamente. Parece mais útil usar apenas um plugin do Firefox, por exemplo, http://www.stardrifter.org/refcontrol/.

EDIT: Eu reformularia sua pergunta para deixar claro que você deseja escrever um proxy PHP, com um cabeçalho de referenciador personalizado. Eu provavelmente apenas modificaria algo como http://sourceforge.net/projects/poxy/ Para pegar o parâmetro referenciador e transmiti -lo.

Editar novamente: você pode estar claro sobre o que está pedindo, mas pedir o impossível não torna isso possível. O navegador é responsável por definir o cabeçalho do referenciador; Ele usa o URI que o fez redirecionar para um novo recurso. Você está pedindo um script que diga "por favor visite http://example.net, mas finja que estou na verdade www.foo.com quando você o faz ". Não há mecanismo para o servidor instruir o navegador a" mentir "sobre de onde veio.

Suponho que possa ser possível através de alguns hackers complicados de JavaScript, mas seria invadir o Black Hat Sense - um site capaz de forçar um navegador a falsificar o referencial seria um verdadeiro buraco de segurança.

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