HttpServletRequest - como obter o URL de referência?

144

Preciso registrar URLs que estão vinculando ao meu site em um Java Servlet.

shane
fonte
Entendi corretamente que, se encontrei seu site no google e abri o link, você registrou 'google.com'?
Roman

Respostas:

310

Está disponível no cabeçalho HTTPreferer . Você pode obtê-lo em um servlet da seguinte maneira:

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

Você, no entanto, precisa perceber que esse é um valor controlado pelo cliente e, portanto, pode ser falsificado para algo totalmente diferente ou mesmo removido. Portanto, qualquer que seja o valor que ele retorne, você não deve usá-lo para nenhum processo crítico de negócios no back-end, mas apenas para o controle da apresentação (por exemplo, ocultar / mostrar / alterar certas partes do layout) e / ou estatísticas.

Para os interessados, é possível encontrar informações sobre o erro ortográfico na Wikipedia .

BalusC
fonte
2
faz diferença "referenciador" e "referenciador"?
ante.sabo
7
@ante: não, a pesquisa de cabeçalho não diferencia maiúsculas de minúsculas.
BalusC
2
Observe que qualquer cabeçalho pode ser null.
Rds 03/03
@BalusC E se eu precisar dos dois URLs anteriores? É possível ?
Anjo Cuenca
26

Na verdade, é: request.getHeader("Referer")ou melhor ainda, e para ter 100% de certeza request.getHeader(HttpHeaders.REFERER), onde o HttpHeaders estácom.google.common.net.HttpHeaders

wpodgorski
fonte
11
De docs API Java EE para o método getHeader(String name)(citação):"The header name is case insensitive."
informatik01
7
voto positivo de qualquer maneira para referência HttpHeaders. O Apache HTTP é outro bom:org.apache.http.HttpHeaders
Barett
16

Os URLs são passados ​​na solicitação: request.getRequestURL() .

Se você quer dizer outros sites com links para você? Você deseja capturar o Referenciador HTTP, o que você pode fazer chamando:

request.getHeader("referer");
Chris K
fonte
6

Como todos mencionaram, é

request.getHeader("referer");

Gostaria de adicionar mais alguns detalhes sobre o aspecto de segurança do cabeçalho do referenciador, em contraste com a resposta aceita. Nas folhas de dicas do Open Web Application Security Project ( OWASP ), em Folha de dicas de prevenção de falsificação de solicitação entre sites (CSRF), ele menciona a importância do cabeçalho do referenciador .

Mais importante para esta verificação de mesma origem recomendada, vários cabeçalhos de solicitação HTTP não podem ser definidos pelo JavaScript, porque estão na lista de cabeçalhos 'proibidos'. Somente os próprios navegadores podem definir valores para esses cabeçalhos, tornando-os mais confiáveis, porque nem mesmo uma vulnerabilidade XSS pode ser usada para modificá-los.

A verificação da Origem de origem recomendada aqui baseia-se em três desses cabeçalhos protegidos: Origem, Referenciador e Host, tornando-se uma defesa CSRF bastante forte por si só.

Você pode consultar a lista de cabeçalhos proibidos aqui . O agente do usuário (ou seja, navegador) tem controle total sobre esses cabeçalhos e não sobre o usuário.

Don D
fonte