Gentle Breeze

[보안] httpOnly Cookie 본문

⑨ 직무역량강화/기타

[보안] httpOnly Cookie

재령 2012. 1. 11. 10:11

 

The HttpOnly cookie is supported by most modern browsers. On a supported browser, an HttpOnly session cookie will be used only when transmitting HTTP (or HTTPS) requests, thus restricting access from other, non-HTTP APIs (such as JavaScript). This restriction mitigates but does not eliminate the threat of session cookie theft via cross-site scripting (XSS). This feature applies only to session-management cookies, and not other browser cookies.

- Wikipedia : http://en.wikipedia.org/wiki/HTTP_cookie



XSS(Cross Site Scripting)를 막기위한 MS의 노력중에 httpOnly Cookie가 있다.

client 측 자바스크립트에서 cookie를 접근하지 못하게 하는 것이다.
이 때 cookie는 반드시 http 접근에 의해서만 노출 될 수 있으며 XSS에서 document.cookie를 접근 할 수 없다.

Server에서 Cookie를 발행할 때 httpOnly 옵션을 추가하여 발행하면 XSS를 통한 Cookie Hijacking에 대응이 된다.

즉, Cookie를 발행할때 httpOnly 라는 문자열만 추가해 주면 XSS Cookie Hijacking Risk를 감소시킬수 있다.

<script type="text/javascript"> 
function showMeTheCookie() 

    alert(document.cookie); 

  
function normalCookie() 

    document.cookie="Name=Value"; 
    showMeTheCookie(); 

  
function httpOnlyCookie() 

    document.cookie="Name=Value; httpOnly"; 
    showMeTheCookie(); 

</script> 
  
<FORM> 
    <INPUT TYPE="BUTTON" onClick="normalCookie();" Value="Display Normal Cookie"> 
    <INPUT TYPE="BUTTON" onClick="httpOnlyCookie();" Value="Display httpOnly Cookie"> 
</FORM>


httponly는 최초 Cookie를 설계할 때 없었던 내용이므로 rfc 문서에는 내용이 없지만 2002년 MS IE6.0 SP1에서 부터 지원을 하기 시작하였으며 현재는 대부분의 browser에서 지원하고 있다

httponly 옵션의 지원은 WAS나 Script Language가 아닌 Client web browser의 지원여부에 달려있다

Cookie를 발행할 때 httpOnly 옵션이 있으면 browser는 이 cookie를 서버로 http Request 요청시에만 전송하며 browser에서 DOM에 의한 요청에는 응답을 하지 않는다

즉 document.cookie 같은 script 언어로 browser의 cookie를 호출했을때 browser가 응답을 하지 않는다

httpOnly 옵션을 붙이는 방법은 cookie 발행시 문자열 하나만 추가해서 적어주면 된다

ASP 에서의 사용 예 :
      Response.AddHeader "Set-Cookie", "CookieName=CookieValue; path=/; HttpOnly"


물론 이 옵션을 붙인다고 100% 안전을 보장하지는 않는다

네트워크 구간에서 cookie를 보호해야 한다면 HTTPS 통신을 하는것이 바람직하며 XMLHTTP 개체를 통해 헤더 정보를 통채로 가져올 때에는 보호받지 못한다

하지만 단지 이 옵션을 하나 추가함으로써 얻을 수 있는 보안성 향상은 크다.

지원하는 browser :
   -Microsoft Internet Explorer 6.0 SP1 이상
   -Mozilla Firefox  3.0.0.6+ 이상
   -Netscape Navigator 9.0b3 이상
   -Opera 9.50 이상
   -Google's Chrome

이에 대한 우회 방법으로는 XST(Cross Site Tracing)가 있으며 아이러니하게도 XST의 핵심에는 XMLHttpRequest가 버티고 있다.

결론은 WAS에서 TRACE옵션을 꺼야한다.

출처 : http://www.securityplus.or.kr/xe/?document_srl=19184&mid=textyle&vid=bangrip1
         http://mkseo.pe.kr/blog/?p=1215

Comments