Skip to content
This repository has been archived by the owner on Nov 7, 2024. It is now read-only.

D.1. CSRF 방어: Flask WTF을 이용한 CSRF 공격 조치

HOIWOONG JUNG edited this page Apr 3, 2021 · 13 revisions

Flask WTF을 이용한 CSRF 공격 조치

  • 기본틀 작성하기

소스버전

TODO

  • flask wtf 설치
  • 의존성 패키지 기록
  • flask config 시큐리티 설정
  • flask wtf 이니셜라이즈
  • flask form 틀 만들기
  • login, register, logout 엔드포인트작성
  • login.html
  • register.html
  • csrf_token 노출 시켜보기
  • form 노출 시켜보기

CSRF란

CSRF (Cross Site Request Forgery)의 약자로, 사이트간 요청 위조를 뜻합니다.
희생자의 의지와 무관하게 공격자가 의도한 작업이 진행 되게끔 유도하는 해킹방법입니다.

# 클릭하면 100만원 이라는 버튼이였는데...!
<form action="http://웹사이트.com/api/user" method="put"> 
  <input type="hidden" name="password" value="123456" /> 
  <input type="submit" value="클릭하면 100만원"/>
</form>

SoWkIImgAStDuU8g038oapCB4lDA5DxENVEcUUwRUHDGHQViUTEzyKtJcZTpjxpjse4YzsRsJeG45nVS00LTEnGvAuNN2-UyshxZpTmTN6ZcWPJ2zLafl5amyTNsFM_cB7ZTtu9g7fe-iD8tRRtOp4Er6cxAcxap580OQFARcGqAhzTiURMbuUtKEGglbwrvsp3ZJTSIaFOt2rhUj2taud98pKi1XX00

  1. 공격자는 공격용 Web 페이지를 준비하고 사용자가 액세스하도록 유도한다.
  2. 사용자가 공격용 Web 페이지에 액세스하면, 미리 준비되어 있던 잘못된 요청이 공격 대상 서버에 보내진다.
  3. 공격 대상 서버의 Web 응용 프로그램은 잘못된 요청을 처리하고 사용자가 의도하지 않은 처리를 진행한다.

CSRF 토큰 검증

CSRF방어가 필요한 요청(=쓰기/변경이 가능한 엔드포인트 및 메서드들) 마다 특정 토큰을 포함시켜서 요청하여, 서버에서 비교하는 방식


레퍼런스


Clone this wiki locally