PHP – скрипт перенаправления рефералов

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

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

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

Заметки:

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

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

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

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

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

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

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

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

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

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

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

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

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