[java] HttpServletRequest-참조 URL을 얻는 방법?

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



답변

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

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

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

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


답변

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


답변

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

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

request.getHeader("referer");


답변

모두 언급했듯이

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 방어 기능을 제공합니다.

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


답변