HttpServletRequest - come ottenere l'URL di riferimento?


144

Devo registrare gli URL che si collegano al mio sito in un servlet Java.


Ho capito bene che se avessi trovato il tuo sito su Google e avessi aperto il link, avresti registrato "google.com"?
Romano,

Risposte:


310

E 'disponibile in HTTP referernell'intestazione . Puoi ottenerlo in un servlet come segue:

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

Tuttavia, è necessario rendersi conto che questo è un valore controllato dal cliente e può quindi essere falsificato in qualcosa di completamente diverso o addirittura rimosso. Pertanto, qualunque sia il valore restituito, non è necessario utilizzarlo per alcun processo aziendale critico nel back-end, ma solo per il controllo della presentazione (ad esempio nascondere / mostrare / modificare determinate parti di layout puri) e / o statistiche.

Per gli interessati, informazioni di base sull'errore di ortografia sono disponibili su Wikipedia .


2
fa differenza "referer" e "referer"?
ante.sabo,

7
@ante: no, la ricerca dell'intestazione non fa distinzione tra maiuscole e minuscole.
BalusC

2
Nota che qualsiasi intestazione può essere null.
RDS

@BalusC E se avessi bisogno dei due precedenti URL? È possibile ?
Angel Cuenca,

26

In realtà è: request.getHeader("Referer")o anche meglio, e per essere sicuro al 100% request.getHeader(HttpHeaders.REFERER), dove si trova HttpHeaderscom.google.common.net.HttpHeaders


11
Dai documenti dell'API Java EE per il metodo getHeader(String name)(citazione):"The header name is case insensitive."
informatik01

7
voto comunque per riferimento HttpHeaders. Apache HTTP è un altro buono:org.apache.http.HttpHeaders
Barett,

16

Gli URL vengono passati nella richiesta: request.getRequestURL() .

Se intendi altri siti che ti collegano? Desideri acquisire il referrer HTTP, che puoi fare chiamando:

request.getHeader("referer");

6

Come tutti hanno già detto

request.getHeader("referer");

Vorrei aggiungere ulteriori dettagli sull'aspetto della sicurezza dell'intestazione del referer in contrasto con la risposta accettata. Nei cheat sheet del progetto OWASP (Open Web Application Security Project ), sotto il cheat sheet Prevenzione richieste contraffatte (CSRF) menziona l'importanza dell'intestazione del referer .

Ancora più importante per questo controllo Same Origin consigliato, un numero di intestazioni di richiesta HTTP non può essere impostato da JavaScript perché si trovano nell'elenco delle intestazioni "vietate". Solo i browser stessi possono impostare valori per queste intestazioni, rendendole più affidabili perché nemmeno una vulnerabilità XSS può essere utilizzata per modificarle.

Il controllo dell'origine sorgente consigliato qui si basa su tre di queste intestazioni protette: Origin, Referer e Host, che la rendono una difesa CSRF piuttosto potente da sola.

Puoi fare riferimento all'elenco delle intestazioni vietate qui . L'agente utente (ovvero: browser) ha il pieno controllo su queste intestazioni e non sull'utente.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.