token, xss, csrf

.·2022년 7월 1일
0

blog

목록 보기
26/52

[1] 토큰이란?

정보를 담고있는 데이터이다.
토큰은 대표적으로 refreshToken이나 accessToken이 있다.
토큰은 암호화된 정보를 가지고 인증이나 인가를 처리하는 역할을 담당한다.
대표적으로 JWT(JSON WEB TOKEN)이 존재한다.
JWT는 그냥 JSON 형식으로 만들어진 TOKEN일 뿐이다.

(1)

JWT 토큰 구성 = Header + Payload + Signature

1.Header

  • "alg" , "typ" #해시알고리즘(SHA256,HMAC,RSA)과 타입(JWT)을 명시

2.Payload

  • 사용자의 정보나 추가 데이터에 대한 설명
  • registered , private, public 클레임들이 존재
  • registered claim : iss(토큰발행자) , exp(토큰만료시간) , sub(토큰제목) , aud(토큰대상자) , nbf(토큰활성날짜) , jti(고유식별자)
  • private claim : 서버와 클라이언트 협의 간의 사용되는 클레임
  • public claim : 사용자 정의 클레임

3. Signatrue

  • 시크릿 키를 포함하여 암호화 되어 있음, 암호화 해쉬 알고리즘에는 많은 종류가 존재한다.
  • HMACSHA256(
    base64UrlEncode(header) + "." +
    base64UrlEncode(payload).
    secret)

(2) 작동방식

사용자가 로그인 정보 입력
서버에 로그인 정보를 보냄
서버는 로그인 정보를 받아서 사용자의 고유 ID 값을 설정하고 Payload에 기타 정보를 넣고 JWT토큰의 유효기간을 설정하고 Secret Key로 암호화하고 토큰을 발급
클라이언트는 서버에 요청할 때 Authorization header나 URL에 JWT토큰을 담아서 전달
서버는 JWT Signature을 Secret Key로 복호화해서 사용자 정보와 유효기간을 확인
Payload에서 사용자의 정보에 맞는 데이터를 가져온다.

(3) 장단점

1. 장점

  • 서버에 인증 저장소를 만들어 둘 필요가 없어 서버 자원과 비용을 절감 , 트래픽 부담이 적음
    수평 스케일이 용이? , 디버깅 및 관리가 용이?
  • REST 서비스로 제공이 가능
  • 정보가 조작이 되었는지 검증을 함으로써 안정성이 보장

2. 단점

  • 토큰이 클라이언트에게 있으므로 DB에서 클라이언트 정보를 바꾸어도 토큰까지 바꿀 수는 없음
  • 필드가 많이 추가되면 토큰의 크기가 커질 수 있음

[2] XSS(Cross Site Scripting)

  • 크로스 사이트 스크립팁으로 상대방의 브라우저에 자바스크립트를 실행하도록 하여 정보를 빼오거나 악의적인 정보를 심는 방법

  • 이미지 태그에 심거나 에디터와 같은 곳에 심기도 한다.

  • 웹 개발자라면 HttpOnly와 같은 속성으로 기본적으로 쿠키는 막아놓아야 한다.

  • 보안과 관련된 문제들을 참고하려면 "OWASP Top10" 를 검색해서 어떤 보안이 중요한지를 찾아보아야 한다.

[3] csrf(Cross Site Request Forgery)

  • 클라이언트가 어떤 이미지나 버튼등을 클릭하였을 때 특정 코드를 실행하게 해서 다른 서버에 요청을 보내게 하는 방법이다.

  • 예를 들자면 페이스북에 자동 로그인되어있는 철수가 악의적인 사이트에 있는 이미지를 클릭하였을 때 자동으로 페이스북에 광고성 게시글을 올리는 요청을 보내는 것입니다. 본인이 원하지 않았지만 글을 작성하게끔 유도하는 방법입니다.

  • 일반적으로는 요청을 보낼 때 같은 도메인일 경우에만 허용하게 하여서 csrf를 방어를 대부분 할 수 있습니다.

0개의 댓글