HTTP Referrer Gotchas? - PullRequest
       7

HTTP Referrer Gotchas?

2 голосов
/ 02 июня 2009

Мне нужно убедиться, что моя веб-страница всегда находится в пределах фрейма, принадлежащего третьей стороне. Эта третья сторона ссылается на нашу целевую страницу, используя src = "../ index.php".

Теперь мой вопрос: если я использую реферер, чтобы убедиться, что страница была запрошена либо мной, либо у третьей стороны, и, если не требуется принудительная перезагрузка стороннего сайта, есть ли какие-то большие ошибки, о которых я должен знать из

Например, существуют ли некоторые распространенные браузеры, которые не следуют правилам реферера?

Спасибо.

Ответы [ 6 ]

7 голосов
/ 02 июня 2009

Кроме того, это REFERER, потому что это как-то неправильно написано в спецификации. Это был мой самый первый REFERER гоча.

5 голосов
/ 02 июня 2009

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

4 голосов
/ 02 июня 2009

Ссылки не требуются. Если браузер не предоставляет его, вы попадете в бесконечный цикл перенаправления. Реферер по сути является «добровольным», как куки, java и javascript.

Несмотря на то. Вы можете сохранить журнал IP и время последнего перенаправления. Удалите журналы на срок более 5 минут и никогда не перенаправляйте чаще, чем один раз в 5 минут. Вы должны поймать 99,9% пользователей, но остальным следует избегать бесконечного цикла перенаправления. Журнал не может полагаться ни на что в браузере (это исходная проблема), поэтому нет файлов cookie и нет сеанса. Достаточно простой таблицы из двух столбцов базы данных.

1 голос
/ 08 октября 2009

Даже известные форматы могут измениться ...

Google явно изменил URL своего реферера. 14 апреля 2009 г., Предстоящее изменение поисковых запросов Google.com; Google Analytics не влияет :

Начиная с этой недели, вы можете начать видеть новый формат URL-адреса для посетителей, посещающих страницы результатов поиска Google. До сих пор обычный реферер для кликов по результатам поиска для термина «цветы», например, был бы примерно таким:

  http://www.google.com/search?hl=en&q=flowers&btnG=Google+Search

Теперь вы увидите несколько строк реферера, которые выглядят так:

  http://www.google.com/url?
    sa=t&source=web&ct=res&cd=7
    &url=http%3A%2F%2Fwww.example.com%2Fmypage.htm
    &ei=0SjdSa-1N5O8M_qW8dQN&rct=j
    &q=flowers
    &usg=AFQjCNHJXSUh7Vw7oubPaO3tZOzz-F-u_w
    &sig2=X8uCFh6IoPtnwmvGMULQfw

(См. Также Google меняет URL-адреса своих рефереров с / search на / url. Известные проблемы? )

1 голос
/ 02 июня 2009

Единственный способ сделать это - напрямую авторизовать запрос из-за манипуляции с реферером.

Вы можете ограничить запросы набором IP-адресов, если хотите быть слабым, или потребовать, чтобы включающий клиент / система имел файл cookie аутентификации для запросов, показанных в iframe.

Удачи

0 голосов
/ 02 июня 2009

Помните, что Internet Explorer (все версии) специально пропускает HTTP REFERRER всякий раз, когда пользователь переходит на ссылку в результате JavaScript. ( сообщение об ошибке )

, например

function doSomething(url){
  //save some data to the session
  //...
  location.href = url;//IE will NOT pass the HTTP REFERRER on this link
}
...