referer — это url (интернет адрес) страницы, с которой браузер осуществил переход на текущую страницу. Например, если имеется страница расположенная по адресу "http://www.site1.com/page1.html " и с помощью гиперссылки браузер с неё переходит на страницу "http://www.site2.com/page2.html", то referer’ом в данном случае окажется адрес первой страницы (http://www.site1.com/page1.html).
Зачем нужен referer?
referer широко используется в системах для подсчёта статистики. Для того, чтобы администратор веб-сайта мог следить за количеством посетителей, пришедших на его ресурс с того или иного сайта (и/или страницы). Когда referer может быть опасным? Он может быть опасен в тех случаях, когда адрес ссылающейся страницы на сайте содержит в себе критическую информацию, т. е. пароли, хэши паролей, сессии (словом — всё то, что может облегчить жизнь потенциальному взломщику)…
Пример опасного referer’а: http://www.bannerz.com/cgi-bin/banneradmin.cgi?login=admin&passwd=qwerty&url=http://abc.tsi.lv
История взлома баннерной системы
Всё началось с того, что в один прекрасный день (или вечер, уже точно не помню), Вася Пупкин, для привлечения новых посетителей на свой сайт, решил установить баннер. Для достижения намеченной цели, Вася выбрал подходящую баннерную сеть, зарегистрировался, разместил там надлежащим образом свой баннер и добавил код системы на свой сайт. Убедившись, что всё работает как надо, он со спокойной душой продолжил играть в half-life 2 =).
Как говорят в таких случаях — «долго ли, коротко ли», но при проверке статистики на следующий день Васю ждал приятный сюрприз. Оказывается пока он спал, на сайт заходил администратор баннерной системы, а самое главное, что в статистике от этого посещения остался «реферер» следующего вида:
http://www.bannerz.com/cgi-bin/banneradmin.cgi?
login=admin&passwd=qwerty&url=http://abc.tsi.lv В данной строке отчётливо виднелся как логин, так и пароль администратора системы! А что ещё нужно было нашему герою для «незначительного» увеличения количества показов своего баннера и других манипуляций с системой?! Правильно — ничего! Вот таким образом и была взломана баннерная сеть.
Как избежать этой ошибки при написании сценариев?
1) Для того, чтобы важные данные не попадали в строку адреса, а соответственно и в поле referer, рекомендуется отсылать их с помощью http метода post, а не get.
Вот примеры «иллюстрирующие» отличия методов get и post
html форма отсылаемая методом get:
url формирующийся в строке браузера после отсылки формы (get):
http://www.bannerz.com/cgi-bin/banneradmin.cgi?
login=admin&passwd=qwerty&url=http://abc.tsi.lv
html форма отсылаемая методом post:
url формирующийся в строке браузера после отсылки формы (post):
http://www.bannerz.com/cgi-bin/banneradmin.cgi
Разница очевидна!
Заключение
И в заключение хочу посоветовать всем программистам веб-сценариев быть более бдительными при разработке своих проектов. И не допускать критическим данным «просачиваться» в адресную строку. Ведь, referer не является единственным способом получения адресов из строки браузера. Ещё существует массив history, который содержит информацию обо всех ресурсах, к которым пользователь обращался во время текущего сеанса работы с браузером. Но это уже тема отдельной статьи. Поэтому на этом я с вами прощаюсь. До встречи! Пока!
Приколы переадресации в мобилах
Если тебя достает какой-то твой друг (недруг, не твой друг…), звоня к тебе в самой неподходящей ситуации (екзамен, в постели…(я сказал сам…), ковыряя очередной кусок какого-то сорца — нужное подчеркнуть), а тебе как раз хочется побыть в тишине, но непременно на связи…. из такой ситуации существует несколько выходов:
— найти и уничтожить обидчика
— выключить телефон (обрезав себе связь с внешним миром)
— засунуть телефон глубоко под подушку:) — что не выход.
Мы пойдем другим путем! Хочеш чтобы у твоего друга…..глаза (а может бы и уши) немножко офигели от полученой информации…..ну че — заинтриговал….тогда читай дальше.
Берем телефон в левую руку……замахиваемся…..да нет же! Для начало надо бы активировать услугу переадресации (хтоя не знаю у кого она еще не активирована, но ето так на всякий пожарний написал!)