HttpServletRequest - jak uzyskać odsyłający adres URL?


144

Muszę rejestrować adresy URL, które prowadzą do mojej witryny w serwlecie Java.


Czy dobrze zrozumiałem, że jeśli znalazłem Twoją witrynę w google i otworzyłem link, to zalogowałeś się na „google.com”?
Roman

Odpowiedzi:


310

Jest dostępny w nagłówku HTTPreferer . Możesz go pobrać w serwlecie w następujący sposób:

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

Musisz jednak zdać sobie sprawę, że jest to wartość kontrolowana przez klienta i dlatego można ją sfałszować na coś zupełnie innego, a nawet usunąć. W związku z tym, niezależnie od zwracanej wartości, nie należy jej używać do żadnych krytycznych procesów biznesowych w zapleczu, a jedynie do sterowania prezentacją (np. Ukrywania / pokazywania / zmiany niektórych czystych części układu) i / lub statystyk.

Dla zainteresowanych wyjaśnienie dotyczące błędów ortograficznych można znaleźć w Wikipedii .


2
czy ma znaczenie „referer” i „Referer”?
ante.sabo

7
@ante: nie, przy wyszukiwaniu nagłówków wielkość liter nie jest rozróżniana.
BalusC

2
Zauważ, że każdy nagłówek może być null.
rds

@BalusC A jeśli potrzebuję dwóch poprzednich adresów URL? To jest możliwe ?
Angel Cuenca

26

Właściwie to: request.getHeader("Referer")lub nawet lepiej, a żeby być pewnym na 100% request.getHeader(HttpHeaders.REFERER), gdzie jest HttpHeaderscom.google.common.net.HttpHeaders


11
Z dokumentacji Java EE API dla metody getHeader(String name)(cytat):"The header name is case insensitive."
informatik01

7
mimo wszystko głosuj za odniesieniem do HttpHeaders. Apache HTTP to kolejny dobry:org.apache.http.HttpHeaders
Barett

16

Adresy URL są przekazywane na żądanie: request.getRequestURL().

Czy masz na myśli inne witryny, które prowadzą do Ciebie? Chcesz przechwycić stronę odsyłającą HTTP, co możesz zrobić, wywołując:

request.getHeader("referer");

6

Jak wszyscy wspomnieli, jest

request.getHeader("referer");

Chciałbym dodać więcej szczegółów na temat aspektu bezpieczeństwa nagłówka referer w przeciwieństwie do akceptowanej odpowiedzi. W ściągach Open Web Application Security Project ( OWASP ), w sekcji Cross-Site Request Forgery (CSRF) Prevention Cheat Sheet wspomina się o znaczeniu nagłówka referer .

Co ważniejsze, w przypadku tego zalecanego sprawdzania Same Origin nie można ustawić wielu nagłówków żądań HTTP w języku JavaScript, ponieważ znajdują się one na liście „zabronionych” nagłówków. Tylko same przeglądarki mogą ustawić wartości dla tych nagłówków, co czyni je bardziej godnymi zaufania, ponieważ nawet luka XSS nie może zostać wykorzystana do ich modyfikacji.

Zalecane tutaj sprawdzenie pochodzenia źródła opiera się na trzech z tych chronionych nagłówków: Origin, Referer i Host, co czyni go całkiem silną obroną CSRF.

Możesz odnieść się do listy zabronionych nagłówków tutaj . Agent użytkownika (tj. Przeglądarka) ma pełną kontrolę nad tymi nagłówkami, a nie użytkownik.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.