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

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

Ответ 1

Он доступен в HTTP referer header. Вы можете получить его в сервлет следующим образом:

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

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

Для интересующихся, о проблемах с орфографией можно найти в Wikipedia.

Ответ 2

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

Ответ 3

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

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

request.getHeader("referer");

Ответ 4

Как уже отмечалось,

request.getHeader("referer");

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

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

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

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