[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Подмена реферера
Pandion
Добрый день.

Делаю виджет, вставляемый на сайт клиента js-кодом
js формирует iframe, в котором виджет

Мой сервер получает домен клиента, на котором грузится виджет, пo HTTP_REFERER

Может ли пользователь как-то подменить этот HTTP_REFERER ?
FatCat
Может.
HTTP_REFERER отправляет браузер пользователя, и эти данные можно подделать.
Например, в Опере 11.62 есть небезопасные "инструменты разработчика", позволяющие редактировать кеш браузера в режиме отображения. Таким образом, я могу открыть страницу любого сайта, в кеше вставить код твоего айфрейма - у меня в браузере отобразится твой айфрейм на странице чужого сайта, а тебе на сервер придет запрос якобы с того сайта, чей кеш я буду редактировать.

_____________
Бесплатному сыру в дырки не заглядывают...
Pandion
Цитата (FatCat @ 28.04.2016 - 09:33)
Может.
HTTP_REFERER отправляет браузер пользователя, и эти данные можно подделать.
Например, в Опере 11.62 есть небезопасные "инструменты разработчика", позволяющие редактировать кеш браузера в режиме отображения. Таким образом, я могу открыть страницу любого сайта, в кеше вставить код твоего айфрейма - у меня в браузере отобразится твой айфрейм на странице чужого сайта, а тебе на сервер придет запрос якобы с того сайта, чей кеш я буду редактировать.

Как в таком случае можно обезопаситься?
FatCat
Никак.
Всё, что передает браузер, может быть подделано.

_____________
Бесплатному сыру в дырки не заглядывают...
Pandion
Цитата (FatCat @ 28.04.2016 - 10:37)
Никак.
Всё, что передает браузер, может быть подделано.

Тогда может как-то по-другому определять домен, на котором грузится виджет?
FatCat
В любом случае, информация будет отдаваться браузером, и ее можно подделать. Джаваскрипт выполняется в браузере.

Можно наделать ловушек. Чем больше будет ловушек, и чем они хитрее - тем больше шансов, что не смогут подделать.

Например использовать в качестви имени айфрейма домен страницы:
document.write("<iframe name=\"+((document.location+'').split(':\/\/')[1]).split('\/')[0]+\"\></iframe>");

А отдавать виджет в айфрейм с именем, получаемом из HTTP_REFERER.

_____________
Бесплатному сыру в дырки не заглядывают...
tceburashka.com
Привет. основной js код у тебя на основной странице? Если да, то действия следующие. JS код проверяет, что он не во фрейме,а в строке браузера твой URL и затем загружает твой виджет со специальным ключём. Ключ этот единоразовый и только для этой сессии. Если ключ приходит левый и с левого IP - выдавайте сообщение и не грузите свой виджет.

_____________
Парсинг - автоматизация ручной работы. http://tceburashka.com
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.