token, XSS, CSRF

유연희·2022년 6월 30일
0

Token

토큰 기반 인증이란 사용자가 자신의 아이덴티티를 확인하고 고유한 액세스 토큰을 받을 수 있는 프로토콜을 말한다. 사용자는 토큰 유효 기간 동안 동일한 웹페이지나 앱, 혹은 그 밖에 해당 토큰으로 보호를 받는 리소스로 돌아갈 때마다 자격 증명을 다시 입력할 필요 없이 토큰이 발급된 웹사이트나 앱에 액세스할 수 있다.

JSON Web Token(JWT)

JWT는 플랫폼에 적합한 안전한 토큰 인증 방법이다.

JWT에는 구성요소

  1. 헤더: 토큰 유형을 비롯해 관련된 서명 알고리즘을 정의합니다.
  2. 페이로드: 토큰 발급자, 토큰 유효기간 등을 정의합니다.
  3. 서명: 보안 서명을 통해 메시지가 전송 과정에서 바뀌지 않은 것을 확인합니다.

토큰 인증 방식

  1. 클라이언트에서 사용자 인증을 위해 서버에 요청한다.
  2. 서버는 토큰을 발급하여 클라이언트에 내려준다.
  3. 클라이언트는 토큰을 localStorage, sessionStorage, Cookie 와 같은 장소에 저장한다.
  4. 필요한 요청마다, 토큰과 함께 서버에 요청한다.
  5. 서버는 토큰 검사를 통해 인증을 확인하고, 결과를 내려준다.

XSS

XSS(Cross-Site Scripting) 이란 웹 애플리케이션에서 일어나는 취약점으로 관리자가 아닌 권한이 없는 사용자가 웹 사이트에 스크립트를 삽입하는 공격 기법이다. 공격 방법이 단순하고 가장 기초적이지만, 많은 웹사이트들이 XSS에 대한 방어 조치를 해두지 않아 공격을 받기 쉽다. 이 취약점은 웹 애플리케이션이 사용자로부터 입력 받은 값을 제대로 검사하지 않고 사용할 경우 나타나며, 공격에 성공하면 사이트에 접속한 사용자는 삽입된 코드를 실행하게 된다. 보통 의도치 않은 행동을 수행시키거나 쿠키나 세션 토큰 등의 민감한 정보를 탈취한다.

토큰을 localStorage 에 저장하면, localStorage의 경우 스크립트 실행으로 가져올 수 있기 때문에 XSS 공격 취약점이 생긴다.

CSRF

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:티스토리]

profile
developer

0개의 댓글