PHP - скрипт перенаправления Referer - PullRequest
10 голосов
/ 13 мая 2009

Часто при поиске ответов я обнаружил, что некоторые веб-сайты позволяют читать информацию, которую они предлагают, если реферером является, например, google.com. Тем не менее, если вы ссылаетесь непосредственно на информацию, она будет недоступна.

Я ищу маленький PHP-скрипт, который установит реферер по моему выбору и пункт назначения, например:

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

Примечания:

  • ref_red.php - это имя скрипта в моем примере.
  • реферер и конец должны принять http , https , ftp .
  • referer и end могут содержать URI любого типа, например http://end.com или сложного типа: http://example.com/some/rr/print.pl?document=rr, например.

ПРИМЕЧАНИЕ: Как рекомендовано в ответе, я добавляю это. Сценарий сам по себе не является полным прокси. Прокси будет только первоначальный HTTP-запрос (не последующие запросы, такие как изображения и т. Д.) Для единственной цели установки referer .

Ответы [ 3 ]

11 голосов
/ 14 мая 2009

эта функция должна дать вам отправную точку он получит любой http URL с указанным реферером

обработка паролей запроса должна быть довольно тривиальной, поэтому я оставлю эту часть для вас

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

?>
2 голосов
/ 13 мая 2009

Вы можете использовать одну из служб, доступных в Интернете, которые позволяют скрывать рефереры (путем установки их адреса), но вы не можете навязать конкретного реферера, который не является реальным реферером. Пользователь должен быть фактически перенаправлен на этот веб-сайт (который будет отображаться в качестве реферера), прежде чем он будет перенаправлен на целевой веб-сайт.

Одна из таких услуг: http://linkanon.com

редактирование:

Поскольку вы изменили свой вопрос сейчас, мой комментарий о написании пользовательского агента на PHP, который действует как прокси-сервер, применяется, но затем это приближается к преступной деятельности, потому что вы будете показывать сторонний веб-сайт пользователю, который может показаться, что она находится на реальном веб-сайте, хотя на самом деле она загрузит ваш контент (контент, который вы передали). Чтобы выполнить это действие, близкое к криминальному (вы в одном шаге от попытки прочитать имя пользователя и пароль), вы загружаете контент веб-сайта третьей стороны с помощью PHP, используя собственный письменный пользовательский агент, который указывает фальшивый реферер и просто передает вывод посетителю вашего сайта. Функция в PHP, которая позволяет отправлять заголовки HTTP, является header ($ header):

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

Вместо того, чтобы кричать на людей, которые пытаются помочь, вы можете попытаться прочитать HTTP (это протокол, согласно которому мир вращается) спецификацию заголовка Referer: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html (см. Раздел 14.36).

Вы также можете прочитать http://en.wikipedia.org/wiki/Referrer_spoofing, где вы можете видеть, что это все на стороне клиента. PHP на стороне сервера. Все, что вы можете сделать, это попытаться написать клиентский код (Javascript), сгенерированный PHP, но если вам повезет, вы врываетесь в мир пользователя.

0 голосов
/ 13 мая 2009

Реферер устанавливается вашим браузером, а не каким-либо механизмом на стороне сервера. Я думаю, вы могли бы создать прокси в PHP, который выполняет запрос удаленного сервера и соответствующим образом устанавливает заголовок referer. Кажется более полезным просто использовать плагин Firefox, например http://www.stardrifter.org/refcontrol/.

Edit: я бы перефразировал ваш вопрос, чтобы было ясно, что вы хотите написать прокси PHP с настраиваемым заголовком реферера. Вероятно, я бы просто изменил что-то вроде http://sourceforge.net/projects/poxy/, чтобы взять параметр referer и передать его.

Снова отредактируйте: вы можете понять, о чем просите, но просьба о невозможном не делает невозможным. Браузер отвечает за настройку заголовка реферера; он использует URI, который заставил его перенаправить на новый ресурс. Вы просите сценарий, который говорит: «Пожалуйста, посетите http://example.net,, но представьте, что я на самом деле www.foo.com, когда вы это делаете». У сервера нет механизма, позволяющего браузеру «врать» о том, откуда он взялся.

Я полагаю, что это может быть возможно посредством некоторого запутанного взлома JavaScript, но это будет взлом в смысле черной шляпы - веб-сайт, способный заставить браузер подделать реферер, будет настоящей дырой в безопасности.

...