토큰 기반 인증이란 사용자가 자신의 아이덴티티를 확인하고 고유한 액세스 토큰을 받을 수 있는 프로토콜을 말한다. 사용자는 토큰 유효 기간 동안 동일한 웹페이지나 앱, 혹은 그 밖에 해당 토큰으로 보호를 받는 리소스로 돌아갈 때마다 자격 증명을 다시 입력할 필요 없이 토큰이 발급된 웹사이트나 앱에 액세스할 수 있다.
JWT는 플랫폼에 적합한 안전한 토큰 인증 방법이다.
XSS(Cross-Site Scripting) 이란 웹 애플리케이션에서 일어나는 취약점으로 관리자가 아닌 권한이 없는 사용자가 웹 사이트에 스크립트를 삽입하는 공격 기법이다. 공격 방법이 단순하고 가장 기초적이지만, 많은 웹사이트들이 XSS에 대한 방어 조치를 해두지 않아 공격을 받기 쉽다. 이 취약점은 웹 애플리케이션이 사용자로부터 입력 받은 값을 제대로 검사하지 않고 사용할 경우 나타나며, 공격에 성공하면 사이트에 접속한 사용자는 삽입된 코드를 실행하게 된다. 보통 의도치 않은 행동을 수행시키거나 쿠키나 세션 토큰 등의 민감한 정보를 탈취한다.
토큰을 localStorage 에 저장하면, localStorage의 경우 스크립트 실행으로 가져올 수 있기 때문에 XSS 공격 취약점이 생긴다.
SRF 공격(Cross Site Request Forgery)은 웹 어플리케이션 취약점 중 하나로 인터넷 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위(수정, 삭제, 등록 등)를 특정 웹사이트에 요청하게 만드는 공격이다.
CSRF 공격의 경우 아래의 두 가지 조건이 충족되었을때 공격이 가능하다.
1. 위조 요청을 전송하는 서비스에 사용자가 로그인 상태
2. 사용자가 해커가 만든 피싱 사이트에 접속
쉽게 말해 자동 로그인이 되어있는 상태에서 피싱 사이트에 접속하게 되면 CSRF 공격을 받을 수 있다는 것이다. 또한 사용자가 해커가 만든 피싱 사이트에 접속하지 않더라도 해커가 XSS 공격을 성공한 정상 사이트를 통해 CSRF 공격이 수행될 수 있다.
토큰을 쿠키에 저장할 경우에는 CSRF 공격에 취약하게 된다.
토큰이 쿠키에 기본적으로 저장되어있기에, 탈취는 할 수 없겠지만 인증된 사용자의 행위는 할 수 있게 된다.
자동으로 댓글을 쓰게 하는 행위와 같이 정보를 탈취하는 것이 아니라 단순히 사용자 행위를 할 수 있게 되는 것이다.
참고 문서 - 출처: https://itstory.tk/entry/CSRF-공격이란-그리고-CSRF-방어-방법 [덕's IT Story:티스토리]
출처: https://mygumi.tistory.com/375 [마이구미의 HelloWorld:티스토리]