백엔드 Back-end/네트워크 Network

Q. 쿠키cookie에서 HttpOnly 속성의 기능은?

Tap to restart 2023. 1. 18. 23:00

A. 자바스크립트로 document.cookie로 쿠키에 접근할 수 없게 된다.

 

Set-Cookie: <cookie-name>=<cookie-value>; HttpOnly

위 예처럼 Cookie를 설정했다면 자바스크립트로는 접근이 안 된다.

 

실제 사례

아래 예(소스코드)를 보면 sessionid의 경우 HttpOnly인 상태인 것을 알 수 있다.

 

 

 

document.cookie로 sessionid를 얻으려고 확인해보면 값이 없는 것을 확인할 수 있다.

 

 

MDN 설명을 보자.

A cookie with the HttpOnly attribute is inaccessible to the JavaScript Document.cookie API; it's only sent to the server. For example, cookies that persist in server-side sessions don't need to be available to JavaScript and should have the HttpOnly attribute. This precaution helps mitigate cross-site scripting (XSS) attacks.
출처: MDN: Restric access to cookies

 

HttpOnly로 할 경우 서버에만 전송된다. 예를 들어 서버에서 세션을 관리하는 경우 굳이 클라이언트에서 자바스크립트로 세션을 관리할 필요가 없기 때문에 기본적으로 HttpOnly를 사용한다. 위 장고 예의 경우도 서버에서 세션을 관리하고 있어서 HttpOnly로 설정된 것이다. django_session 테이블에 sessionid 값이 저장된 것을 확인할 수 있다.

 

자바스크립트로 sessionid를 얻을 수 없으니 자바스크립트를 이용한 XSS 공격을 막는데 도움이 된다.