2009-05-13 6 views
10

Spesso, durante la ricerca di risposte, ho riscontrato che determinati siti Web consentono di leggere le informazioni che offrono se il referente è, ad esempio, google.com. Tuttavia, se si collega direttamente alle informazioni, non sarà disponibile.PHP - Script di reindirizzamento del referente

Quello che sto cercando è lo script più piccolo PHP che fisserà un referer della mia scelta, e una destinazione, in questo modo:

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

Note:

  • ref_red.php è il nome dello script sul mio esempio.
  • referer e fine dovrebbe accettare http, https, ftp.
  • referer e fine può contenere un URI di qualsiasi tipo, semplice come http://end.com o complicato come: http://example.com/some/rr/print.pl?document=rr, per esempio.

NOTA: Come consigliato su una risposta, sto aggiungendo questo. Lo script non è un proxy completo di per sé. Solo la richiesta HTTP iniziale sarebbe stata inoltrata con il proxy (non richieste successive come immagini, ecc.) Per il scopo unico di impostare il riferimento .

+0

Si prega di utilizzare per esempi nomi di dominio riservati come 'esempio.com',' esempio.org', 'esempio.net' o qualsiasi altra desinenza in' .esempio'. Vedi RFC 2606. – Gumbo

risposta

11

questa funzione dovrebbe darvi un punto di partenza sarà prendere qualsiasi URL http con il referrer specificato

gestire i parms query dovrebbe essere abbastanza banale

, quindi lascerò che parte da fare per voi

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

Funziona come un fascino. Grazie! –

+0

Questa soluzione funziona ancora oggi? Sembra che io veda visite (dirette) e nessun referente. –

0

Il riferimento è impostato dal browser, non da un meccanismo lato server. Potresti, immagino, costruire un proxy in PHP che faccia la richiesta del server remoto e settaggi l'intestazione del referer in modo appropriato. Sembra più utile usare solo un plugin per Firefox, ad es. http://www.stardrifter.org/refcontrol/.

Modifica: vorrei riformulare la domanda per chiarire che si desidera scrivere un proxy PHP, con un'intestazione referrer personalizzata. Probabilmente dovrei semplicemente modificare qualcosa come http://sourceforge.net/projects/poxy/ per prendere il parametro del referrer e passarlo.

Modifica di nuovo: potresti essere chiaro su quello che stai chiedendo, ma chiedere l'impossibile non lo rende possibile. Il browser è responsabile per l'impostazione dell'intestazione del referrer; utilizza l'URI che ha causato il reindirizzamento a una nuova risorsa. Stai chiedendo una sceneggiatura che recita "Visita il http://example.net, ma fai finta di essere effettivamente www.foo.com quando lo fai". Non esiste alcun meccanismo per il server che istruisca il browser a "mentire" su dove proviene.

Suppongo che possa essere possibile tramite qualche incongruente javascript JavaScript, ma sarebbe hacking in senso black hat - un sito Web che è in grado di forzare un browser a falsificare il referrer sarebbe un vero buco di sicurezza.

+0

Capisco perfettamente che il referente è impostato dal client. Lo script che seguo sarà * that * client e imposterà il referer specificato. Un plugin per Firefox non è un'opzione, dal momento che voglio usare tale script sui link pubblici. –

+0

@Adam, sono molto chiaro su ciò che sto chiedendo e sul comportamento previsto. Potrebbe eseguire una funzione eseguita da alcuni proxy, ma non è un proxy di per sé. Tutto quello che sto cercando è uno script di reindirizzamento, scritto su PHP, che imposterà anche l'intestazione Referer. –

+0

@David Credo che tu stia fraintendendo il meccanismo di un reindirizzamento. In questo caso, quando il tuo script imposta il referrer, lo fa sulla richiesta al link, allora dovrebbe servire a restituire tali informazioni al client, e quindi non eseguire affatto un reindirizzamento, sarebbe come trasmettere tutte le informazioni da solo, oppure reindirizza il client al collegamento, distruggendo così l'intero nascondiglio del referrer. Anche se lo script ha solo parzialmente proxato il contenuto, il referrer sarebbe comunque stato inviato per immagini/CSS/JS ecc. –

2

È possibile utilizzare uno dei servizi disponibili su Internet che consente di nascondere i referenti (impostando il loro indirizzo), ma non è possibile imporre un referente specifico che non sia il referente corrente. L'utente deve essere effettivamente reindirizzato a quel sito Web (che apparirà come referrer) prima di essere reindirizzato al sito web di destinazione.

Uno di tali servizi: http://linkanon.com

edit:

Dal momento che hai cambiato la tua domanda ora, il mio commento sulla scrittura di un agente utente in PHP che agisce come un proxy, si applica, ma allora questo si avvicina al un'attività criminale, perché visualizzerai un sito Web di terze parti a un utente che potrebbe pensare di trovarsi nel sito Web effettivo, mentre in realtà avrà caricato i tuoi contenuti (il contenuto che hai trasmesso). Per eseguire questa attività da vicino a criminale (sei a un passo dal tentativo di leggere un nome utente e una password), carichi il contenuto del sito web di terze parti con PHP utilizzando il tuo user agent scritto che specifica il falso referrer e passa semplicemente il uscita per visitatore del tuo sito web. La funzione in PHP che consente di inviare intestazioni HTTP, è di intestazione ($ intestazione):

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

Invece di gridare a persone che cercano di aiutare, si potrebbe provare a leggere HTTP (che è il protocollo in base al quale il mondo gira intorno) specifiche riguardanti l'intestazione del referente: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html (vedi sezione 14.36).

Si potrebbe anche voler leggere http://en.wikipedia.org/wiki/Referrer_spoofing dove si può vedere che è tutto sul lato client. PHP è lato server. Tutto quello che puoi fare è provare a scrivere un codice cliente (Javascript) generato da PHP, ma se hai fortuna, ti stai sfondando nel mondo degli utenti.

+0

L'asserzione non è corretta. Impostare un referente è completamente possibile e il link che hai fornito (anche se preferirei non usarlo) lo dimostra. –

+0

Sì, è possibile con qualcosa come un plug-in per Firefox, ma non come se avessi archiviato uno script sul tuo sito web che ha accesso al browser del tuo visitatore. Puoi scrivere un "browser" in PHP che fa quella cosa, ma suppongo che tu non voglia farlo. – jbasko

+0

"Hack nel browser del visitatore"? Di cosa stai parlando? Sul serio. Leggi di nuovo la mia voce, pensaci attentamente (se ti interessa davvero), e torna indietro. –

Problemi correlati