2015-06-20 3 views
2

В конечном счете, мне нужно знать, в каком домене находится один из моих файлов javascript. Я прочитал и испытал из первых рук, что $_SERVER['HTTP_REFERER'] ненадежный. Одна из первых трех обработанных вами браузеров/компьютеров не отправила HTTP_REFERER, и я знаю, что она может быть подделана. Я применил другое решение, используя два метода javascript.

document.referrer 

И

window.location.href 

Я использую бывший, чтобы получить URL окна, где кто-то нажал на одну из моих ссылок. Я использую первый, чтобы узнать, в какой домен включен мой javascript-файл. Я тестировал его немного до сих пор, и он очень хорошо захватывает URL-адреса браузера без икоты. Мой вопрос: надежны ли два JavaScript-метода? Будут ли они возвращать URL-адрес из браузера каждый раз или есть какие-то оговорки, как использование $_SERVER['HTTP_REFERER'], с которым я еще не сталкивался?

+2

'document.referrer' использует ту же информацию от клиента, что и' HTTP_REFERER', поэтому они оба могут быть подделаны одинаково. – Barmar

+1

Ни один из них не покажет, где находится файл Javascript. 'window.location.href' - это URL-адрес веб-страницы с использованием JS-файла. 'document.referrer' - это страница, на которой была ссылка, с которой они следовали, чтобы добраться туда. – Barmar

+0

Я не беспокоюсь о том, что это подделка, а просто не имея ее. Кроме того, я думал, что HTTP_REFERER был передан как заголовок http? Не открывается ли window.location.href непосредственно из строки url? – Gilberg

ответ

0

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

В общем, вы не будете иметь информацию о реферере при связывании с HTTPS на HTTP-домен. Проверьте этот вопрос для получения дополнительной информации по этому вопросу:

https://webmasters.stackexchange.com/questions/47405/how-can-i-pass-referrer-header-from-my-https-domain-to-http-domains

Об использовании window.location.href, я бы сказал, что это надежно на практике, но только потому, что это интересно, что клиент будет поставлять правильную информацию, так что приложения в зависимости от того, что будет вести себя так, как ожидалось.

Просто имейте в виду, что это по-прежнему клиентская сторона посылает вам некоторую информацию, поэтому всегда будет зависеть от браузера, чтобы отправить вам что-то правильное. Вы не можете контролировать это, просто верьте, что он будет работать в соответствии с тем, что указано в стандарте. Клиент может все же решить скрыть это или подделать его по любой причине.

Возможно, возможно, что в некоторых ситуациях, например, сторонние скрипты (также причины неприкосновенности), браузер может оставить его пустым.

+0

Может ли браузер фактически оставить window.location.href пустым? Если да, есть ли у вас какие-либо практические примеры того, как это делается, или браузеров, которые заполняют его? – Gilberg

+0

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

+0

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

Смежные вопросы