Убераем REFERER из трафика

Часто у меня спрашивают о том, как же убрать этот ужасный REFERER с трафика. Немного о том, а зачем же это нужно. Ответ достаточно простой: что бы не спалили левый трафик, хотя отсутствие REFERER’a — это тоже достаточно паливно!

Итак, как же нам поступить для того чтобы убрать REFERER.

Есть вот такие пару приемов:

1. Самый простой вариант. Перезагрузка страницы метатегом в заголовке страницы с нулевым тайм-аутом.

<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
<meta name="robots" content="noindex, nofollow"> 
<meta http-equiv="refresh" content="0; url='https://webmasteru.pw/ref.php'"> 
</head> 
</html>


2. Представляет собой редирект из фрейма.

<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
</head> 
<body> 
<iframe src="javascript:parent.location='https://webmasteru.pw/ref.php'" style="visibility:hidden"> 
</iframe> 
<script> 
    var x = 0 
    function go() { location.replace("https://webmasteru.pw/ref.php") } 
    window.setTimeout('go()', 5000) 
</script> 
</body> 
</html> 

3. Отправка формы, довольно-таки хитрый способ.

<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
</head> 
<body> 
<script> 
    var x = 0 
    function go2() { location.replace("https://webmasteru.pw/ref.php") } 
    function go() { 
        if(x) return 
        x += 1 
        try { 
            var html = '<form target="_parent" action="https://webmasteru.pw/ref.php">' 
            html += '<input type="hidden" name="u" value="" /></form>' 
            window.frames[0].document.body.innerHTML = html 
            window.frames[0].document.forms[0].submit() 
        } catch(e) { 
            go2() 
        } 
    } 
</script> 
<iframe onload="window.setTimeout('go()', 99)" src="about:blank" style="visibility:hidden"> 
</iframe> 
<script>window.setTimeout('go2()', 3333)</script> 
</body> 
</html>  

4. Редирект совершает флеш-объект (ссылка ему передается параметром).

<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
</head> 
<body> 
<embed src="/r.swf?u=https://webmasteru.pw/ref.php" width="1" height="1" type="application/x-shockwave-flash"> 
<script>window.setTimeout('location.replace("https://webmasteru.pw/ref.php")', 5000)</script> 
</embed> 
</body> 
</html>

Так же есть еще более универсальный способ избавления от REFERER’a.

Много комментариев дано прямо в коде, но я попытаюсь объяснить поподробнее. В скрипте скомбинировано два разных подхода к переадресации в зависимости от браузера:

  1. META-редирект. Хорошо работает в Firefox и IE, очищая поле REFERER.
  2. Редирект через JavaScript методом программного клика по ссылке с атрибутом rel=»nofollow». Это работает в последних версиях браузеров, основанных на движке WebKit (Chrome, Safari, новая Opera). На случай, если JavaScript отключен, через 3 секунды будет осуществлен META-редирект. Это не очистит поле REFERER в перечисленных браузерах, но, как минимум, заменит его и в любом случае осуществит переадресацию.
<?php 
//Ваша ссылка, на которую осуществляется редирект 
$target_link = 'http://google.com'; 
  
if(!isset($_SERVER['HTTP_REFERER'])) 
{ 
    //Если нам никто реферер не передал, то достаточно 
    //просто совершить 301 редирект - браузер при этом реферера навешивать 
    //не будет 
  
    //Неплохо бы еще проверить, если у нас редирект с HTTPS на HTTP, то также 
    //осуществляем 301 редирект через header(), так как браузер 
    //в таком случае не передаст реферер, но эту простую задачку 
    //я оставлю вам. 
    header('Location: ' . $target_link, true, 301); 
    exit(); 
} 
  
//А иначе всё не так просто 
$target_link = htmlspecialchars($target_link); 
  
//Будем делать редирект через тег <meta>. 
//Это срабатывает в Firefox и IE, однако, в других браузерах не работает. 
  
//В то же время, браузеры на движке WebKit 
//(Safari, Chrome, новая Opera) поддерживают 
//атрибут rel="noreferrer" у тегов <a> 
$is_webkit = isset($_SERVER['HTTP_USER_AGENT']) 
    && strpos(strtolower($_SERVER['HTTP_USER_AGENT']), 'webkit') !== false; 
if($is_webkit) 
{ 
    //Ставим таймаут редиректа через тег <meta> в 3 секунды 
    //(на тот случай, если в браузере выключен JavaScript). 
    //Это, конечно, не удалит реферера, зато заменит его 
    //на URL этого скрипта и переадресует пользователя 
    //на целевую страницу. 
    $meta_timeout = 3; 
    //Пробуем осуществить редирект с помощью JavaScript. 
    //(Это очищает Referer). 
    $onload = 'onload="redirect();"'; 
} 
else 
{ 
    //Firefox и IE и так не шлют реферер при редиректе через 
    //тег <meta>, поэтому нам не нужны извращения через JavaScript. 
    $meta_timeout = 0; 
    $onload = ''; 
} 
  
echo <<<HERE 
<!doctype html> 
<html> 
    <head> 
        <meta http-equiv="X-UA-Compatible" content="IE=edge" /> 
        <meta http-equiv="cache-control" content="max-age=0" /> 
        <meta http-equiv="cache-control" content="no-cache" /> 
        <meta http-equiv="expires" content="0" /> 
        <meta http-equiv="expires" content="Tue, 01 Jan 1980 1:00:00 GMT" /> 
        <meta http-equiv="pragma" content="no-cache" /> 
        <meta http-equiv="refresh" content="$meta_timeout;url=$target_link"> 
        <title></title> 
        <script type="text/javascript"> 
        <!-- 
        var redirect = function() 
        { 
            document.getElementById("link").click(); 
        } 
        --> 
        </script> 
    </head> 
    <body $onload> 
        <a href="$target_link" rel="noreferrer" id="link"></a> 
    </body> 
</html> 
HERE;
[Всего голосов: 1    Средний: 5/5]