서버로부터 받은 토큰 어디에 저장할까?
- 브라우저의 localStorage or sessionStorage에 담아서 사용한다.
- 브라우저의 쿠키에 담아서 사용한다.
1. localStorage or SessionStorage에 담아서 사용할 경우
- 사용하기가 매우 편리하고 구현하기도 쉽다.
- 단, 누군가 페이지(ex. 게시글)에 악성 스크립트를 삽입한다면 쉽게 토큰을 탈취 당할 수 있다. (XSS 공격)
2. 쿠키에 담아서 사용한다
- 쿠키 역시 XXS 공격에 노출되어 있지만 httpOnly라는 속성을 활성화하면 자바스크립트를 통해 쿠키를 조회할 수 없으므로 악성 스크립트로부터 안전하다.
- 그 대신 CSRF(Cross Site Request Forgery)라는 공격을 받을 수 있다.
결론
CSRF 공격은 백엔드에서 request의 referrer를 확인하여 domain이 일치하는지를 검증하거나,
Security Token(ex. CSRF Token)을 사용한다면 제대로 된 방어가 가능하기 때문에 사용자 토큰을 쿠키에 담아서 사용하려고 한다.
결론도 알수 있을까요