10 Stimmen

PHP - Skript zur Referer-Umleitung

Bei der Suche nach Antworten habe ich oft festgestellt, dass man auf bestimmten Websites die angebotenen Informationen lesen kann, wenn der Verweis z. B. google.com lautet. Wenn Sie jedoch direkt auf die Informationen verlinken, sind sie nicht verfügbar.

Was ich suche, ist das kleinste PHP-Skript, das einen Referer meiner Wahl und ein Ziel wie folgt setzt:

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

Anmerkungen:

  • ref_red.php ist der Name des Skripts in meinem Beispiel.
  • Referent et Ende sollte akzeptieren http , https , ftp .
  • Referent et Ende kann einen URI beliebigen Typs enthalten, so einfach wie http://end.com oder so kompliziert wie: http://example.com/some/rr/print.pl?document=rr zum Beispiel.

NOTE : Wie in einer Antwort empfohlen, füge ich dies hinzu. Das Skript ist kein vollständiger Proxy per se. Nur die erste HTTP-Anfrage wird als Proxy übermittelt. (keine nachfolgenden Anfragen wie Bilder usw.) für die einziger Zweck der Einstellung der Referent .

13voto

bumperbox Punkte 10010

Diese Funktion sollte Ihnen einen Anhaltspunkt geben sie holt jede http-Url mit dem angegebenen Referrer

Der Umgang mit den Abfrageparametern sollte ziemlich trivial sein, daher überlasse ich diesen Teil Ihnen

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

?>

2voto

jbasko Punkte 6682

Sie können einen der im Internet verfügbaren Dienste nutzen, die es erlauben, Referrer zu verstecken (indem Sie ihre Adresse einstellen), aber Sie können keinen bestimmten Referrer vorschreiben, der nicht der tatsächliche Referrer ist. Der Nutzer muss tatsächlich zu dieser Website weitergeleitet werden (die als Referrer erscheint), bevor er auf die Ziel-Website weitergeleitet wird.

Einer dieser Dienste: http://linkanon.com

bearbeiten:

Da Sie Ihre Frage nun geändert haben, gilt mein Kommentar über das Schreiben eines User-Agents in PHP, der wie ein Proxy agiert, aber dann kommt dies einer kriminellen Aktivität nahe, denn Sie zeigen einem Benutzer eine Website eines Drittanbieters an, der denken könnte, dass er sich auf der eigentlichen Website befindet, während er in Wirklichkeit Ihre Inhalte geladen hat (die Inhalte, die Sie weitergegeben haben). Um diese fast schon kriminelle Aktivität durchzuführen (Sie sind nur einen Schritt davon entfernt, einen Benutzernamen und ein Passwort auszulesen), laden Sie den Inhalt der Website eines Dritten mit PHP, indem Sie einen selbst geschriebenen Benutzeragenten verwenden, der den gefälschten Referrer angibt und die Ausgabe einfach an den Besucher Ihrer Website weiterleitet. Die Funktion in PHP, mit der man HTTP-Header senden kann, ist header($header):

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

Anstatt Leute anzuschreien, die zu helfen versuchen, könnten Sie versuchen, die HTTP-Spezifikation (das ist das Protokoll, nach dem sich die Welt dreht) bezüglich des Referer-Headers zu lesen: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html (Siehe Abschnitt 14.36).

Sie sollten auch Folgendes lesen http://en.wikipedia.org/wiki/Referrer_spoofing wo Sie sehen können, dass sich alles um die Client-Seite dreht. PHP ist serverseitig. Alles, was Sie tun können, ist zu versuchen, einen von PHP generierten Client-Code (Javascript) zu schreiben, aber wenn Sie Glück haben, dann brechen Sie in die Welt der Benutzer ein.

0voto

Adam Wright Punkte 48270

Der Referer wird von Ihrem Browser gesetzt, nicht von einem serverseitigen Mechanismus. Sie könnten, so vermute ich, einen Proxy in PHP konstruieren, der die Anfrage an den entfernten Server stellt und den Referer-Header entsprechend setzt. Es scheint nützlicher zu sein, einfach ein Firefox-Plugin zu verwenden, z.B. http://www.stardrifter.org/refcontrol/ .

Bearbeiten: Ich würde Ihre Frage umformulieren, um klarzustellen, dass Sie einen PHP-Proxy mit einem benutzerdefinierten Referrer-Header schreiben möchten. Ich würde wahrscheinlich nur etwas ändern wie http://sourceforge.net/projects/poxy/ um den Referrer-Parameter zu übernehmen und weiterzugeben.

Erneut bearbeiten: Vielleicht ist Ihnen klar, worum Sie bitten, aber das Unmögliche zu verlangen, macht es nicht möglich. Der Browser ist für das Setzen des Referrer-Headers verantwortlich; er verwendet den URI, der ihn zur Weiterleitung auf eine neue Ressource veranlasst hat. Sie bitten um ein Skript, das sagt "Bitte besuchen Sie http://example.net aber tun Sie so, als ob ich tatsächlich www.foo.com wäre, wenn Sie das tun". Es gibt keinen Mechanismus, mit dem der Server den Browser anweisen könnte, zu "lügen", woher er kommt.

Ich nehme an, dass es über einen komplizierten JavaScript-Hack möglich ist, aber es wäre ein Hack im Sinne von Black Hat - eine Website, die einen Browser dazu zwingen kann, den Referrer zu fälschen, wäre eine echte Sicherheitslücke.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X