HttpServletRequest - как получить ссылающийся URL?

144

Мне нужно регистрировать URL-адреса, которые ссылаются на мой сайт, в сервлете Java.

Shane
источник
Правильно ли я вас понял, что если я нашел ваш сайт в Google и открыл ссылку, то вы вошли в систему "google.com"?
Роман

Ответы:

311

Это доступно в заголовке HTTPreferer . Вы можете получить его в сервлете следующим образом:

String referrer = request.getHeader("referer"); // Yes, with the legendary misspelling.

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

Для заинтересованных, справочную информацию об опечатках можно найти в Википедии .

BalusC
источник
2
это делает разницу "реферер" и "рефери"?
ante.sabo
7
@ante: нет, поиск заголовка не чувствителен к регистру.
BalusC
2
Обратите внимание, что любой заголовок может быть null.
Rds
@BalusC Что, если мне понадобятся два предыдущих URL? Это возможно ?
Ангел Куэнка
26

На самом деле это: request.getHeader("Referer")или даже лучше, и, чтобы быть на 100% уверенным request.getHeader(HttpHeaders.REFERER), где HttpHeaderscom.google.common.net.HttpHeaders

wpodgorski
источник
11
Из документации по API Java EE для метода getHeader(String name)(цитата):"The header name is case insensitive."
informatik01
7
upvote в любом случае для справки HttpHeaders. Apache HTTP - еще один хороший org.apache.http.HttpHeaders
пример
16

URL - адрес передается в запросе: request.getRequestURL().

Если вы имеете в виду другие сайты, которые ссылаются на вас? Вы хотите перехватить HTTP Referrer, что можно сделать, вызвав:

request.getHeader("referer");
Крис К
источник
6

Как все уже упоминали, это

request.getHeader("referer");

Я хотел бы добавить некоторые подробности о аспекте безопасности заголовка реферера в отличие от принятого ответа. В шпаргалках Открытого проекта безопасности веб-приложений ( OWASP ), в разделе Шпаргалка предотвращения межсайтовых запросов (CSRF), упоминается важность заголовка реферера .

Что еще более важно для этой рекомендованной проверки Same Origin, количество заголовков HTTP-запросов не может быть установлено JavaScript, поскольку они находятся в списке «запрещенных» заголовков. Только сами браузеры могут устанавливать значения для этих заголовков, делая их более надежными, потому что даже уязвимость XSS не может быть использована для их изменения.

Рекомендуемая здесь проверка Source Source основана на трех из этих защищенных заголовков: Origin, Referer и Host, что делает его довольно сильной защитой от CSRF.

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

Дон Д
источник