강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

insu2012.lee님의 프로필 이미지
insu2012.lee

작성한 질문수

스프링 시큐리티

접근 제어시, HTTP Referrer 를 사용해도 될까요?

해결된 질문

작성

·

4.1K

0

안녕하세요.

좋은 강의내용을 잘 듣고 있습니다. 감사합니다.

한가지 문의를 드리고 싶은데요.

보안적인 측면에서, Referrer 에 있는 정보가 유효한 경우만, 인증 성공을 하고 싶은데요.

HTTP Referrer 가 L4 또는 Proxy Server 등을 거치는 경우, 이전 요청정보가

L4 나 Proxy Server 정보로 변경되지는 않나요..

물론, Referrer 정보 생성을 위해서, 브라우져 form 방식의 Post 로 요청을 할 경우입니다.

실제적으로 이런 방법이 보안적인 측면에서 사용되는 지요?

답변 1

0

정수원님의 프로필 이미지
정수원
지식공유자

L4 혹은 Proxy Server 는 Web 이나 Was 로 분기처리해주는 역할을 하게 되는데 HTTP Referrer 는 하이퍼링크를 클릭했을 경우  IP 가 아닌 도메인 주소 기준으로 이전요청 정보를 참조하기 때문에 특별한 문제가 될 것 같지는 않습니다.

IP 같은 경우는  Proxy  Server 와 실제 Was 가 별도로 구분되기 때문에 헤더 값을 다르게 설정해야 합니다.

그리고 실제로 스프링 시큐리티에서도 로그인 성공시 이동할 TargetUrl 을 구할 때 HTTP Referrer 를 사용해서 구하고 있습니다.

AbstractAuthenticationTargetUrlRequestHandler.java
protected String determineTargetUrl(HttpServletRequest request,

--중략


String targetUrl = null;

if (targetUrlParameter != null) {
targetUrl = request.getParameter(targetUrlParameter);

if (StringUtils.hasText(targetUrl)) {
logger.debug("Found targetUrlParameter in request: " + targetUrl);

return targetUrl;
}
}

// HTTP Referrer 사용
if (useReferer && !StringUtils.hasLength(targetUrl)) {
targetUrl = request.getHeader("Referer");
logger.debug("Using Referer header: " + targetUrl);
}

if (!StringUtils.hasText(targetUrl)) {
targetUrl = defaultTargetUrl;
logger.debug("Using default Url: " + targetUrl);
}

return targetUrl;
}

그런데 위키백과에서는 HTTP Referrer 는 조작또한 가능하기 때문에 리퍼러 정보를 사용할 때에는 보안에 항상 주의해야 한다고 되어 있습니다.

insu2012.lee님의 프로필 이미지
insu2012.lee

작성한 질문수

질문하기