Редирект без HTTP Referer

redirect

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

Есть один самый надежный путь:
1. Переадресовываем пользователя на HTTPS-адрес.
2. Далее, если целевой адрес HTTP, то переадресовываем туда.
3. Иначе, переадресовываем на наш HTTP-адрес, а оттуда уже на целевой.

Эта схема гарантированно очистит Referer, однако, она достаточно муторная и иногда требует нескольких редиректов.

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

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

Много комментариев дано прямо в коде, но я поясню поподробнее. В скрипте скомбинировано два разных подхода к переадресации в зависимости от браузера:
1. META-редирект. Хорошо работает в Firefox и IE, очищая поле Referer.
2. Редирект через JavaScript методом программного клика по ссылке с атрибутом rel="nofollow". Это работает в последних версиях браузеров, основанных на движке WebKit (Chrome, Safari, новая Opera). На случай, если JavaScript отключен, через 3 секунды будет осуществлен META-редирект. Это не очистит поле Referer в перечисленных браузерах, но, как минимум, заменит его и в любом случае осуществит переадресацию.

Вот и все пояснения по этому решению. Надеюсь, кому-то будет полезно.

Редирект без HTTP Referer: 13 комментариев

  1. Очень интересная статья, вообще ваш сайт один не из многих где есть полезная информация и в понятном виде для любого читателя, жаль что только редко пополняется сайт статьями.
    Ещё такой вопрос, может вы могли-бы написать статью с примерами уникальной многофункциональной клоаке.
    С Функциями: фильтрация поисковых ботов по списку IP адресов, определения ботов в реальном времени, возможность фильтровать по юзер-агенту.

    С Ув. Алекс.

    1. Изменить реферер на произвольный - сомнительно. Если только использовать какие-то уязвимости браузеров (но такие сложно обнаружить, да и не стоит оно того).

  2. А как сделать, чтобы перебрасывая через редирект, передать через него 1 или несколько нужных мне GET параметров?

    Пример:
    Пользователи с рекламной площадки(условно назовем его сайт http://САЙТ1.ru/ переходит по ссылке вида http://САЙТ2.ru/?param1=643213&param2=sj2823&param3=546_sq87 (значения param1, param2 и param3 для каждого пользователя задаются динамически)

    Мне нужно что бы редирект, размещенный на http://САЙТ2.ru/ переадресовывал пользователя на конечный сайт партнерки (http://САЙТ3.ru/), при этом "на ходу" подставлял в конец ссылки текущие значения GET. Т.е. пользователь уходил по ссылке вида:

    http://САЙТ3.ru/?SubID=%5Bparam3%5D&refIP=%5Bparam1%5D

  3. Спасибо за ред с коммами внутри.
    А если вставить ред в ссылку на которую осуществляется редирект типа
    $target_link = 'http://anonimus.to?ссылка';
    По сути реферер должен быть anonimus.to!?

  4. С https не совсем ясно. Можно просто использовать header Location php? И как он работает? Например при переходе на мой https сайт, а потом с моего куда либо, какой будет реферер? Разве с помощью php поменяется реферер?

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *