개발

[springboot] Referer 헤더와 사용법 (현재페이지 이전에 방문한 사이트 url 확인하기)

베르월드 2023. 6. 19. 20:47

 

안녕하세요!

 

웹 개발을 진행하다보면 현재 페이지에 접속하기 바로 직전의 홈페이지 url을 확인해야할 때가 있습니다.

 

만약 SpringBoot 프레임워크를 사용한다면 정말 손쉽게 Referer 헤더를통해서 사용자가 어떤 페이지에서 현재 페이지로 이동했는지 알아볼 수 있습니다.

 

이번에 저는 SpringBoot 프레임워크 기반에서 Referer 헤더를 어떻게 사용하는지 확인해보려고 합니다.

 

 

1. Referer 헤더란?

: Referer 헤더는 웹 요청에서 이전 페이지의 URL 정보를 포함하는 HTTP 헤더입니다. 클라이언트(웹 브라우저)가 서버에 요청을 보낼 때, Referer 헤더는 현재 요청을 실행한 이전 페이지의 URL을 전달합니다.

 

 

2. Referer 헤더의 활용방법

 

  • 웹 애플리케이션의 분석 및 통계: Referer 헤더를 분석하여 어떤 웹 페이지나 외부 사이트로부터 트래픽이 유입되는지 파악할 수 있습니다. 이를 통해 마케팅 전략이나 사용자 동선을 파악하는 데 도움을 줄 수 있습니다.

 

  • 보안검증 : Referer 헤더를 사용하여 요청이 유효한 소스에서 온 것인지 확인할 수 있습니다. 예를 들어, 웹 애플리케이션에서는 외부에서의 CSRF(Cross-Site Request Forgery) 공격을 방지하기 위해 Referer 값을 확인하고 요청의 유효성을 검증하는 경우가 있습니다.

 

  • 리다이렉션 및 포워딩: Referer 헤더를 사용하여 이전 페이지로의 리다이렉션이나 포워딩을 수행할 수 있습니다. 이전 페이지의 URL을 Referer 헤더에서 추출하여 다음 요청을 처리하는 데 활용할 수 있습니다.

 

  • 사용자 경험 개선: Referer 헤더를 활용하여 사용자가 어떤 경로로 애플리케이션에 접근하는지 파악하고, 이를 기반으로 사용자 경험을 개선할 수 있습니다. 예를 들어, 특정 페이지로부터의 유입인 경우 특정한 환영 메시지를 표시하거나 사용자에게 맞춤형 콘텐츠를 제공할 수 있습니다.

 

3. Referer 헤더 사용 예시

String referer = request.getHeader("Referer");

 

위의 코드를 Controller에 추가합니다.

referer는 사용자가 직전에 접속했던 url을 반환하므로 다음과 같이 활용할 수 있습니다.

 

    @GetMapping("/")
    public String index(Model model, HttpServletRequest request) {
	
    	String referer = request.getHeader("Referer");
        String url = "naver"; //확인하고싶은 url 
        if(referer.contains(url)){
        	model.addAttribute("referer", "네이버에서 유입");
        }

        return "/test/index.html";
    }

 

 

4. Referer 헤더의 보안과 주의사항

Referer 헤더를 사용하면 사용자의 유입 경로를 확인하거나 민감한 정보를 주고받을때 체크하여 보안을 강화할 수 있습니다. 하지만 Referer 사용중 주의해야하는 사항들이 있으니 개발에 활용하기 전, 꼭 숙지해주세요.

 

 

  • 민감한 정보 노출: Referer 헤더는 이전 페이지의 URL을 포함하므로, 민감한 정보(예: 사용자 인증 토큰, 세션 ID 등)가 포함될 수 있습니다. 이러한 정보가 Referer 헤더에 노출되면 보안 위험이 발생할 수 있으므로, 민감한 정보가 포함된 Referer 헤더의 사용을 피해야 합니다.

 

  • 외부 사이트로의 노출: Referer 헤더는 다른 도메인 또는 외부 사이트로 이동한 경우에도 해당 정보를 포함할 수 있습니다. 이는 보안상의 문제가 될 수 있으므로, 외부 사이트로 Referer 헤더를 전송할 필요가 없는 경우에는 적절한 설정 또는 처리를 통해 Referer 헤더의 노출을 제어해야 합니다.

 

  • 변조된 Referer 헤더: 공격자는 HTTP 요청에서 Referer 헤더를 조작하여 다른 사이트로 가장하는 등의 공격을 시도할 수 있습니다. 이를 통해 CSRF(Cross-Site Request Forgery) 공격 등의 보안 취약점이 발생할 수 있으므로, 웹 애플리케이션에서는 적절한 보안 검증 및 대응을 구현해야 합니다.

 

  • Referer 체크의 유효성 검증: Referer 헤더를 검증하여 유효한 요청인지 확인하는 경우, 신뢰할 수 있는 Referer 헤더 값을 설정하고, 필요한 경우 Referer 체크를 우회할 수 있는 대체 방법을 고려해야 합니다. 일부 사용자는 보안 설정, 브라우저 확장 프로그램 등을 통해 Referer 값을 조작할 수 있으므로, 엄격한 Referer 체크만을 의존하면 안됩니다.

 

  • SSL(HTTPS) 사용: 보안상의 이유로 SSL(HTTPS)를 사용하여 통신을 암호화하는 것이 좋습니다. SSL을 사용하면 통신 과정에서 Referer 헤더도 암호화되어 전송되므로, 중간에 변조되거나 노출될 위험이 감소합니다.

 

 

 

 

이렇게 Referer 헤더에대해 알아보았습니다. 

저는 참 자주 사용하는 코드였는데 블로그 글을 작성하며 Referer 헤더에 대해 더 많이 알아볼 수 있었네요.

제 글이 개발에 도움이 되셨길 바라며 이만 글을 적겠습니다, 읽어주셔서 감사합니다!