SoShin_
소신
SoShin_
전체 방문자
오늘
어제
  • 분류 전체보기
    • Study
      • HTML | CSS
      • JavaScript
      • Django
      • Python
      • Flask
      • Git
      • Project
      • 이것저것
      • 코딩테스트
      • NestJS
    • Review
      • Book
      • Movie & Drama

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • orm
  • SQLAlchemy
  • Python
  • js
  • db
  • allauth
  • node.js
  • MongoDB
  • 영화추천
  • 위도경도
  • FLASK
  • 문제풀이
  • Django allauth
  • 장고 제네릭뷰
  • 장고
  • KakaoAPI
  • 장고 유저기능
  • 파이썬
  • openpyxl
  • Django
  • 플라스크
  • JavaScript
  • 장고 allauth
  • flask orm
  • 유저기능
  • 코딩테스트
  • 영화리뷰
  • Django 유효성 검증
  • 자바스크립트
  • SQLite

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
SoShin_

소신

Study/Django

Django의 CSRF 방지 / CSRF / Cross-Site Request Forgery

2021. 12. 9. 16:36
반응형

장고의 CSRF 방지

크로스 사이트 요청 위조(CSRF, Cross-Site Request Forgery)는 웹 사이트에서
유저가 서버로 요청을 보내는 행위를 악의적으로 변경 및 조작한 후 요청을 전송하는 것입니다.

즉 사용자가 요청하지 않은 것도 사용자가 요청한 것처럼 처리되는 것입니다.


CSRF 위조의 단계

  1. 사용자가 보안이 취약한 사이트에 로그인 후 아이디와 패스워드 등 입력을 서버로 전송시킨다. [ Form 사용 ]
  2. 서버가 사용자가 전송한 정보를 보고 정상 유저임을 인증 [ 로그인 성공 ] 이때, 서버로 부터 인증된 사용자라는 정보가 사용자에게도 전달된다.
  3. 이 상태에서 사용자가 로그아웃을 하지 않은 채, 악성 사이트로 이동하게 됩니다.
  4. 악성 사이트에서 사용자의 정보를 가져오거나, 돈을 송금하는 등의 요청을 전송하는 폼을 누르게 하거나, 해당 폼을 굳이 작성하지 않아도 자동으로 전송되는 형태로 요청을 시도합니다.
  5. 요청을 보낼 때, 사용자가 가지고 있는 인증 정보 또한 함께 서버로 전송됩니다.
  6. 취약한 사이트에서는 인증된 사용자가 보낸 요청이므로 요청을 그대로 수행하게 됩니다. [ 돈 송금 요청 등]

CSRF 방지 토큰

이러한 CSRF를 방지하는 방법으로 많이 사용하는 방법이 CSRF 위조 방지 토큰 (Cross Site Request Forgery Token)입니다.

요청 위조 방지 토큰은 서버로부터 폼을 요청할 때 발행되며, 사용자가 폼에 데이터를 입력하고 서버로 전송할 때 이 토큰 값을 함께 전달하여 서버에서 토큰 값을 비교한 뒤 요청을 처리하는 방식입니다.

그래서 다른 이름으로는 요청 검증 토큰 ( Request Verification Token )이라고 부르기도 합니다.

 

CSRF 위조 방지 토큰을 사용하게 된다면 악성 사이트가 폼을 전송할 때 위조 방지 토큰 값을 같이 전송하지 않기 때문에 서버에서는 사용자가 직접 보낸 요청인지 아닌지를 알 수 있게 되므로 CSRF를 검증할 수 있게 됩니다.


Django의 CSRF 방지

Django는 CSRF 위조 방지를 위한 기본 기능을 제공해줍니다.

위에서 말한 위조 방지 토큰 (Cross Site Request Forgery Token)을 삽입하고 검증하는 과정을 아주 간단하게 구현할 수 있습니다.

사용 방법은 Form을 사용하는 템플릿에 아래 코드와 같이 {% csrf_token %} 템플릿 태그를 넣어주면 됩니다.

<form method="post">{% csrf_token %}
    내부코드
</form>

 

반응형

'Study > Django' 카테고리의 다른 글

Django Validator / 장고 유효성 검증 / validator 추가하기  (0) 2021.12.10
Django Validator / 장고 유효성 검증 / 내장 Field 옵션  (0) 2021.12.10
Django traling slash / 장고 트레일링 슬래시  (0) 2021.12.09
Django Model Form / 장고 모델 폼 / forms.ModelForm  (0) 2021.12.08
Django model DateTimeField 한국 시간으로 설정하기  (0) 2021.12.07
    'Study/Django' 카테고리의 다른 글
    • Django Validator / 장고 유효성 검증 / validator 추가하기
    • Django Validator / 장고 유효성 검증 / 내장 Field 옵션
    • Django traling slash / 장고 트레일링 슬래시
    • Django Model Form / 장고 모델 폼 / forms.ModelForm
    SoShin_
    SoShin_
    직접 쓰는 개발 블로그

    티스토리툴바