2009-05-13 13 views
10

Souvent, lors de la recherche de réponses, j'ai trouvé que certains sites Web vous permettent de lire les informations qu'ils offrent si le référent est, par exemple, google.com. Pourtant, si vous liez directement à l'information, elle sera indisponible.PHP - Script de redirection Referer

Ce que je cherche est le script PHP plus petit qui établira un referer de mon choix, et une destination, comme suit:

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

Notes:

  • ref_red.php est le nom du script sur mon exemple.
  • referer et fin devrait accepter http, https, ftp.
  • referer et fin peut contenir un URI de tout type, aussi simple que http://end.com ou aussi compliqué que: http://example.com/some/rr/print.pl?document=rr, par exemple.

REMARQUE: Comme recommandé sur une réponse, j'ajoute ceci. Le script n'est pas un proxy complet en soi. Seule la requête HTTP initiale serait envoyée par proxy (pas les demandes suivantes comme des images, etc.) pour la seule destination de la définition du référenceur .

+0

Veuillez utiliser les noms de domaine réservés aux exemples, par exemple 'example.com',' example.org', 'example.net' ou tout autre nom se terminant par' .example'. Voir RFC 2606. – Gumbo

Répondre

11

cette fonction devrait vous donner un point de départ il va chercher une url http avec le referrer spécifié

manipulation des parms de requête devrait être assez trivial, donc je laisse cette partie pour vous faire

<?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; 
    } 

?> 
+0

Cela fonctionne comme un charme. Merci! –

+0

Cette solution fonctionne-t-elle encore aujourd'hui? On dirait que je vois des visites (directes) et aucun référent du tout. –

0

Le referer est défini par votre navigateur, et non par un mécanisme côté serveur. Vous pourriez, je suppose, construire un proxy en PHP qui fait la requête du serveur distant et qui définit l'en-tête du referer de manière appropriée. Il semble plus utile d'utiliser simplement un plugin Firefox, par exemple. http://www.stardrifter.org/refcontrol/. Editer: Je reformulerais votre question pour indiquer clairement que vous voulez écrire un proxy PHP, avec un en-tête de referrer personnalisé. Je vais probablement juste modifier quelque chose comme http://sourceforge.net/projects/poxy/ pour prendre le paramètre referrer et le transmettre. Editer à nouveau: Vous pouvez être clair sur ce que vous demandez, mais demander l'impossible ne le rend pas possible. Le navigateur est responsable de la définition de l'en-tête du référent; il utilise l'URI qui l'a amené à rediriger vers une nouvelle ressource. Vous demandez un script qui dit "S'il vous plaît visitez http://example.net, mais prétendre que je suis réellement www.foo.com lorsque vous le faites". Il n'y a pas de mécanisme permettant au serveur de demander au navigateur de "mentir" sur son origine. Je suppose que cela peut être possible via un piratage JavaScript compliqué, mais ce serait pirater au sens du chapeau noir - un site web capable de forcer un navigateur à usurper le referrer serait un véritable trou de sécurité.

+0

Je comprends parfaitement que le référant est défini par le client. Le script que je suis après sera * ce * client et définira le referer spécifié. Un plugin Firefox n'est pas une option, puisque je veux utiliser un tel script sur les liens publics. –

+0

@Adam, je suis très clair sur ce que je demande, et le comportement attendu. Il peut remplir une fonction que certains mandataires exécutent, mais ce n'est pas un proxy en soi. Tout ce que je recherche est un script de redirection, écrit sur PHP, qui va également définir l'en-tête Referer. –

+0

@David Je crois que vous ne comprenez pas le mécanisme d'une redirection. Dans ce cas, lorsque votre script définit le référent, il le fait sur la demande au lien, il doit ensuite soit restituer cette information au client, et ainsi ne pas effectuer une redirection du tout, il transmettrait toutes les informations par lui-même, ou il redirigerait le client vers le lien, détruisant ainsi l'ensemble du referrer. Même si le script ne transmettait que partiellement le contenu, le référant serait toujours envoyé pour les images/CSS/JS etc. –

2

Vous pouvez utiliser l'un des services disponibles sur Internet qui permettent de masquer les référents (en définissant leur adresse), mais vous ne pouvez pas imposer un référent spécifique qui n'est pas le référent réel. L'utilisateur doit effectivement être redirigé vers ce site Web (qui apparaîtra comme un référent) avant d'être redirigé vers le site Web cible.

L'un de ces services: http://linkanon.com

modifier:

Depuis que vous avez changé votre question maintenant, mon commentaire sur l'écriture d'un agent utilisateur en PHP qui agit comme un proxy, applique, mais cela se rapproche de une activité criminelle, parce que vous allez afficher un site Web d'un tiers à un utilisateur qui pourrait penser qu'il se trouve sur le site réel, alors qu'en fait, elle aura chargé votre contenu (le contenu que vous avez transmis). Pour effectuer cette activité proche du criminel (vous êtes à deux doigts d'essayer de lire un nom d'utilisateur et un mot de passe), vous chargez le contenu du site Web du tiers avec PHP en utilisant votre propre agent utilisateur écrit qui spécifie le faux référent et transmet simplement le sortie au visiteur de votre site Web. La fonction en PHP qui permet une envoyer des en-têtes HTTP, est en-tête ($ header):

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

Au lieu de crier aux gens qui essaient d'aider, vous pouvez essayer de lire HTTP (qui est le protocole selon lequel le monde tourne autour) spécification concernant l'en-tête Referer: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html (Voir la section 14.36).

Vous pourriez également vouloir lire http://en.wikipedia.org/wiki/Referrer_spoofing où vous pouvez voir que tout tourne autour du côté client. PHP est côté serveur. Tout ce que vous pouvez faire est d'essayer d'écrire un code client (Javascript) généré par PHP, mais si vous avez de la chance, alors vous entrez dans le monde des utilisateurs.

+0

Votre assertion est incorrecte. Définir un référant est tout à fait possible et le lien que vous avez fourni (bien que je préférerais ne pas l'utiliser) le prouve. –

+0

Oui, il est possible avec quelque chose comme un plugin Firefox, mais pas comme si vous stockez un script sur votre site Web qui pirate le navigateur de votre visiteur. Vous pouvez écrire un "navigateur" en PHP qui fait ça, mais je suppose que vous ne voulez pas faire ça. – jbasko

+0

"Hacker dans le navigateur de votre visiteur"? Qu'est-ce que tu racontes? Sérieusement. Lis juste à nouveau mon entrée, réfléchis-y bien (si tu t'en soucies vraiment), et reviens. –