CSRF[2021.10.21]

김정훈·2021년 10월 21일
0

HTTP

목록 보기
6/9

1. Web Application Security란?

개발자들이 웹사이트, 모바일 어플, 웹 API 등을 만들때 해커들의
공격을 막기위한 보안 필수사항

* 해커들의 여러가지 공격들
 - SQL injection
 - XSS
 - CSRF
 

2. CSRF

1. 다른 사이트에서 유저가 보내는 요청을 조작
  - 이메일에 첨부된 링크를 이용해 
  
2. 해커가 직접 데이터에 접근 할 수 없다.
  - 다른 오리진이기 때문에 response에 직접 접근할 수 없음
  
3. CSRF 공격을 하기 위한 조건
  - 쿠키를 사용한 로그인
  : 유저가 로그인 했을 때, 쿠키로 어떤 유저인지 알 수 있어야 함
  
  - 예측할 수 있는 요청 / parameter를 가지고 있어야 함
  : request에 해커가 모를 수 있는 정보가 담겨 있으면 안됨
  
4. CSRF를 막는 방법
  - CSRF 토큰 사용하기
  : 서버측에서 CSRF 공격에 보호하기 위한 문자열을 유저의 브라우저와
    웹 앱에만 제공
  - Same-site cookie 사용하기
  : 같은 도메인에서만 세션/쿠키를 사용할 수있다.
  
  

3. 토큰

클라이언트에서 인증 정보를 보관하는 방법

1. 토큰 기반 인증을 사용하는 이유
  - 세션기반 인증 = 서버(혹은DB)에 유저 정보를 담는 방식
  - 서버에서는 유저가 민감하거나 제한된 정보를 요청 할 때마다
    세션 값과 일치하는지 확인
  - 이러한 부담을 클라리언트에게 넘겨 주기 위해 고안됨

2. 토큰을 클라이언트에 저장 가능?
  - 토큰은 유저 정보를 암호화한 상태로 담을 수 있고, 암호화했기 
    때문에 클라이언트에 담아도 무리가 없다.
    
3. 대표적은 JWT 
  - Json Web Token의 약자
  - Json 포맷으로 사용자에 대한 속성을 저장하는 웹 토큰

4. JWT의 구조
  - Header
   : 어떤 종류의 토큰인지, 어떤 알고리즘으로 암호화 했는지를 담는다.
   {
      "alg": "HS256",
      "typ": "JWT"
   }
  
  - Payload
   : 유저의 정보, 권한 여부, 기타 필요한 정보등을 담는다.
   {
      "sub": "someInformation",
      "name": "phillip",
      "iat": 151623391
   }
   
  - Signature
   : Header, Payload를 base64인코딩한 값과 salt값의 조합으로 
     암호화된 값을 담는다.
     HMACSHA256(base64UrlEncode(header) + '.' + base64UrlEncode(payload), secret);
  
5. 토큰 기반 인증의 장점
  - Stateless & Scalability(무상태성 & 확장성)
   : 서버는 클라리언트에 대한 정보를 저장할 필요가 없다
     토큰을 헤더에 추가함으로 인증절차 완료
  
  - 안정성
   : 암호화 한 토큰을 사용하여 암호화 키를 노출 할 필요가 없다
  
  - 어디서나 생성 가능
   : 토큰을 생성하는 서버가 꼭 토큰을 만들지 않아도 됨
   
  - 권한 부여에 용이
   : 토큰의 payload안에 어떤 정보에 접근 가능한지 정의
   
6. 토큰기반 인증 절차
  - 클라이언트가 서버에 아이디/비밀번호를 담아 로그인 요청
  - 아이디/비밀번호가 일치하는지 확인하고, 클라이언트에게 보낼 
    암호화된 토큰을 생성
  - 토큰을 클라이언트에게 보내주면, 클라이언트는 토큰을 저장
  - 클라이언트가 HTTP헤더에 토큰을 담아 보낸다
  - 서버는 토큰을 해독하여 맞다고 판단되면 클라이언트의 요청을 
    처리한 후 응답을 보내준다
  
  
   
 
profile
프론트엔드 개발자를 꿈꾸고 있습니다!

0개의 댓글