HttpServletRequest-참조 URL을 얻는 방법?


144

Java 서블릿에서 내 사이트로 연결되는 URL을 기록해야합니다.


Google에서 귀하의 사이트를 발견하고 링크를 열면 'google.com'을 기록했다는 것을 올바르게 이해 했습니까?
로마

답변:


310

HTTP referer헤더 에서 사용할 수 있습니다 . 다음과 같이 서블릿에서 가져올 수 있습니다.

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

그러나이 값은 클라이언트 제어 값이므로 완전히 다르거 나 제거 된 것으로 위장 할 수 있음을 알아야합니다. 따라서 반환되는 값이 무엇이든 백엔드의 중요한 비즈니스 프로세스에는 사용하지 말고 프레젠테이션 제어 (예 : 특정 순수 레이아웃 부분 숨기기 / 표시 / 변경) 및 / 또는 통계에만 사용해야합니다.

오타에 대한 배경 지식은 Wikipedia 에서 찾을 수 있습니다 .


2
"리퍼러"와 "리퍼러"의 차이가 있습니까?
ante.sabo

7
@ante : 아니요, 헤더 조회는 대소 문자를 구분하지 않습니다.
BalusC

2
모든 헤더는입니다 null.
rds

@BalusC 두 개의 이전 URL이 필요한 경우 어떻게해야합니까? 것이 가능하다 ?
Angel Cuenca

26

실제로 HttpHeaders가있는 곳 : request.getHeader("Referer")또는 심지어 더 좋으며 100 % 확실합니다. request.getHeader(HttpHeaders.REFERER)com.google.common.net.HttpHeaders


11
메소드에 대한 Java EE API 문서 getHeader(String name)(견적)에서 :"The header name is case insensitive."
informatik01

7
어쨌든 HttpHeaders 참조를 위해 upvote. 아파치 HTTP는 또 다른 좋은 것이다 :org.apache.http.HttpHeaders
Barett

16

요청에 URL이 전달됩니다 request.getRequestURL()..

당신을 연결하는 다른 사이트를 의미한다면? 다음을 호출하여 수행 할 수있는 HTTP Referrer를 캡처하려고합니다.

request.getHeader("referer");

6

모두 언급했듯이

request.getHeader("referer");

수락 된 답변과 대조적으로 참조 헤더 의 보안 측면에 대한 자세한 내용을 추가하고 싶습니다 . OWASP (Open Web Application Security Project ) 치트 시트의 CSRF (Cross-Site Request Forgery) 예방 치트 시트 에서 참조 헤더의 중요성에 대해 언급합니다 .

이 권장되는 Origin Origin 검사에서 더 중요한 것은 많은 HTTP 요청 헤더가 '금지 된'헤더 목록에 있기 때문에 JavaScript로 설정할 수 없습니다. 브라우저 자체 만이 헤더에 대한 값을 설정할 수 있으므로 XSS 취약점조차도이를 수정하는 데 사용될 수 없기 때문에 더욱 신뢰할 수 있습니다.

여기서 권장되는 Source Origin Check (소스 오리진 검사)는 Origin, Referer 및 Host라는 세 가지 보호 된 헤더를 사용하므로 자체적으로 강력한 CSRF 방어 기능을 제공합니다.

금지 된 헤더 목록은 여기를 참조 하십시오 . 사용자 에이전트 (예 : 브라우저)는 사용자가 아닌 이러한 헤더를 완전히 제어 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.