Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

"Туннелирование" ссылок

70K
09 ноября 2011 года
Kot78
15 / / 05.11.2011
Приветствую!
Задача такова:
Есть яваскрипт на стороне пользователя в виде расширения для FF. Этот скрипт находит ссылки на определенные сайты на произвольных, загруженных пользователем страницах. Эта часть задачи выполнена.
Далее нужно, чтобы при нажатии на найденную ссылку пользователь был направлен по исходному адресу ссылки, но через другой сайт. Через некий буфер или туннель. Цель в том, чтобы замаскировать адрес исходной страницы, с которой пользователь пришел по ссылке. Конечный сайт должен видеть только адрес буферного сайта.
Посоветуйте, пожалуйста, возможные методы решения. На чем лучше писать скрипт для буферного сайта? Может, есть какие-то стандартные заготовки?
Буду рад любым подсказкам, так как не очень представляю, как подступиться к решению.
Спасибо!
P.S. Надеюсь, не слишком коряво объяснил.
12
10 ноября 2011 года
alekciy
3.0K / / 13.12.2005
Цитата: Kot78
Приветствую!
Цель в том, чтобы замаскировать адрес исходной страницы, с которой пользователь пришел по ссылке. Конечный сайт должен видеть только адрес буферного сайта.


Делай как это делают яндекс или гугл. Или как на free-lance.ru при переходе по внешней ссылке. Т.е. через перенаправление (редирект). Ссылка должна просто вести на твой сайт в духе http://example.com?go_uri=example.org, а он уже через 303 редирект должен перенаправлять на go_uri адрес (курить в сторону header функции в PHP и 303-ого статуса).

70K
14 ноября 2011 года
Kot78
15 / / 05.11.2011
Попробовал вот так:
 
Код:
<?php
if (isset($_GET['go_uri']) && preg_match('~^[a-z0-9]+://[-a-z0-9.]+(?::\\d+)?(?:/[-a-z0-9\\~!@#$%\\^&*()_=+\\[\\]{};:|/,.?]*)?$~i', $_GET['go_uri'])) {
    header('Location: ' . $_GET['go_uri']);
    exit;
}
?>

Работает.
Но я так понял, что в этом случае вообще теряется информация, откуда пользователь пришел на конечную страницу. А можно сделать так, чтобы было известно, что он пришел из "туннеля"?
12
14 ноября 2011 года
alekciy
3.0K / / 13.12.2005
Цитата: Kot78

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


Ни чего не теряется. Браузер пошлет весь комплект заголовков + в referer будет адрес твоего сайта, который типа "туннель". В общем ставь опыты, смотри логи веб сервера.

70K
14 ноября 2011 года
Kot78
15 / / 05.11.2011
Цитата: alekciy
Ни чего не теряется. Браузер пошлет весь комплект заголовков + в referer будет адрес твоего сайта, который типа "туннель". В общем ставь опыты, смотри логи веб сервера.


Смотрю в браузере свойства страницы. Если напрямую переход, то указан URL ссылающейся страницы, а если через "туннель", нет этой строчки почему-то. Или это не показатель? Я просто не знаю, откуда эта информация у браузера. С сервера или из своих внутренних логов?

12
14 ноября 2011 года
alekciy
3.0K / / 13.12.2005
Цитата: Kot78
Смотрю в браузере свойства страницы. Если напрямую переход, то указан URL ссылающейся страницы, а если через "туннель", нет этой строчки почему-то. Или это не показатель? Я просто не знаю, откуда эта информация у браузера. С сервера или из своих внутренних логов?


Какой "этой"? О_о

Должно быть: страница на сайте источнике src.example/index.html на которой есть ссылки; через JS все эти ссылки изменяются с http://dst.example/... на http://tunnel.example/index.php?go_uri=http%3A%2F%2Fdst.example%2F... (это нужно спец символы эскейпить) при этом index.php делает 303 редирект на адрес указанный в go_uri. При этом в логах веб сервера dst.example (который в go_uri) будет указан referer на tunnel.example, а не на src.example

70K
14 ноября 2011 года
Kot78
15 / / 05.11.2011
Сейчас всё так и работает. "Эта" строчка - это строчка в свойствах страницы, где указан ссылающийся URL. При прямом переходе в ней отображен адрес начальной страницы, а если переход через "туннель", то нет этой строчки.
12
14 ноября 2011 года
alekciy
3.0K / / 13.12.2005
Цитата: Kot78
При прямом переходе в ней отображен адрес начальной страницы,


Может конечной?
То, что будет видно в строке состояние (по крайне мере в Opera она так называется) на ссылках перебитых через JS зависит от браузера. По идее при правильной реализации там должен быть адрес "туннеля".

70K
14 ноября 2011 года
Kot78
15 / / 05.11.2011
Нет, именно начальной, с которой пришел пользователь. В FF в свойствах конечной страницы появляется строка "ссылающийся URL". А вот в случае перехода через "туннель", нет такой строки, как если бы я не перешел, а просто вручную набрал бы адрес. Вот что меня смущает. JS-скрипт дело не меняет. Если перебить ссылку без упоминания туннеля, то после переходя ссылающийся URL отображается правильно.
12
14 ноября 2011 года
alekciy
3.0K / / 13.12.2005
Цитата: Kot78
Нет, именно начальной, с которой пришел пользователь.


Тогда вообще не понял, что тут за схема. Причем тут страница, с которой пришел пользователь О_о "Начальной" считаем страницу "...произвольных, загруженных пользователем страницах..." на которой подружается JS и изменяет ссылка на этой начальной странице. Каким тут боком страницы с которых пользователь пришел?

В общем, убедишь, что точно понимаешь, чего хочешь достичь и определись в используемой терминологии.

70K
14 ноября 2011 года
Kot78
15 / / 05.11.2011
Допустим, пользователь открыл произвольную страницу start.ru, перебиваем при помощи JS-расширения все ссылки на этой странице, допустим, на end.com. Тыкаем на любую ссылку - открывается end.com. На end.com в FF смотрим свойства страницы, среди прочей информации видим строчку "ссылающийся URL start.ru". Всё нормально.
Теперь перебиваем все ссылки на start.ru на http://tunnel.org?go_uri=end.com. Тыкаем на ссылку. После "туннелирования" открывается end.com. Опять смотрим свойства страницы, строки "ссылающийся URL " нет, хотя ожидалось, что будет "ссылающийся URL tunnel.org".
Вот я и обеспокоился, почему так?
12
14 ноября 2011 года
alekciy
3.0K / / 13.12.2005
Ну вот уже нормальное описание. Совет на будущее, в описании в примерах не использовать доменные имена в духе start.ru. Нужно все же следовать требованиям RFC2606 и рекомендациям IANA.

Сейчас специально взял FF и проверил. Там есть ссылающийся URL. Если его нет в твоем случае, значит ты что-то сделал не так или чего то не учел (возможно причина в локально загруженном JS и ограничениям безопасности, тут документация по FF с гуглом тебе в мощь). Рекомендую посмотреть как это выполнено тут: http://www.free-lance.ru/projects/?pid=926431
70K
14 ноября 2011 года
Kot78
15 / / 05.11.2011
Т.е. на сервере конечной страницы всё нормально отслеживается? Проблема только с отображением в конкретном FF на конкретном компьютере?
12
14 ноября 2011 года
alekciy
3.0K / / 13.12.2005
Цитата: Kot78
Т.е. на сервере конечной страницы всё нормально отслеживается? Проблема только с отображением в конкретном FF на конкретном компьютере?


А это я не знаю. Если у тебя при переходе по ссылке которая находится в описание проекта на фрилансе в FF этот факт видно (у меня видно), а в случае с твоим скриптом нет, то проблема в реализации. Если не видно в обоих случаях, проблема в FF.

Ни что тебе не мешает конечную страницу указать на твой же сервер и после этого изучить лог веб сервера с тем, что бы понять, если там referer или нет. Или воспользоваться сетевым сниферов в духе wireshark.

70K
15 ноября 2011 года
Kot78
15 / / 05.11.2011
Похоже, при любых простых редиректах реферером остается начальный сайт. Браузеры не признают редирект за полноценный переход по ссылке. Нужно какое-то более сложное решение :(
12
15 ноября 2011 года
alekciy
3.0K / / 13.12.2005
Цитата: Kot78
Похоже, при любых простых редиректах реферером остается начальный сайт. Браузеры не признают редирект за полноценный переход по ссылке. Нужно какое-то более сложное решение :(


Не бывает ни простых редиректов, ни сложных. И переходов полноценных и не полноценных тоже нет. Что за расизм :D

Ссылку на фриланс с примером такого "туннелирования" я привел. Там все работает как и ожидается. Если у тебя получает не так, то видимо проблема все же в твоей реализации.

70K
15 ноября 2011 года
Kot78
15 / / 05.11.2011
В примере с фриланса как раз ссылающийся URL тот, на котором пользователь кликнул по ссылке. А моя реализация в первом посте представлена. И в ней действительно проблема :)
12
15 ноября 2011 года
alekciy
3.0K / / 13.12.2005
Цитата: Kot78
В примере с фриланса как раз ссылающийся URL тот, на котором пользователь кликнул по ссылке. А моя реализация в первом посте представлена. И в ней действительно проблема :)


Когда JS через DOM изменяет ссылку А на ссылку Б, то при клике на измененной ссылки получаем "пользователь кликнул по ссылке", перешел на страницу сайта-туннеля, оттуда отредиректился на сайт С. На сайте С у referer получаем адрес страницы сайта-туннеля.И это схема работает. Единственный камень который тут может возникнуть это ограничение безопасности самого браузера, но на сколько я помню в данном случае оно не должно возникать, но возникнуть может. Попробуй для теста реализовать данную схему использую не локальный JS, а загруженный вместе со страницей сайта.

74K
16 ноября 2011 года
OlegSobachnik
14 / / 11.11.2011
alekciy
По поводу последнего - уверен? Я сейчас этого точно не знаю, а тестить лень как-то, но по-моему, если

1. Пользователь открыл страницу А
2. Со страницы А перешёл по ссылке, ведущий на страницу Б
3. Страница Б отредиректила браузер на страницу В

то сервер страницы В получит информацию, что реферер - страница А.
Либо вообще никакого реферера не получит.
12
10 февраля 2012 года
alekciy
3.0K / / 13.12.2005
Цитата: OlegSobachnik
alekciy
По поводу последнего - уверен? Я сейчас этого точно не знаю, а тестить лень как-то, но по-моему, если

1. Пользователь открыл страницу А
2. Со страницы А перешёл по ссылке, ведущий на страницу Б
3. Страница Б отредиректила браузер на страницу В

то сервер страницы В получит информацию, что реферер - страница А.
Либо вообще никакого реферера не получит.


Уверен. Сервер страницы В получить в реферере адрес страницы Б и ни каким боком он не может получить в реферерах страницу А. Хочешь убедиться - отбрось лень и проверь.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог