Rookies/애플리케이션 보안

[SK shieldus Rookies 19기] Django pybo - 크로스 사이트 요청 위조 (CSRF)

bento 2024. 3. 30. 04:32
[SK쉴더스 Rookies 19기] 클라우드 기반 스마트 융합보안 과정

01. pybo - CSRF

config\settings.py

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

django.middleware.csrf.CsrfViewMiddleware 활성화

 

question_form.html

{% extends 'base.html' %}

{% block content %}
<div class="container">
    <h5 class="my-3 border-bottom pb-2">질문 등록</h5>
    <form method="post" class="post-form my-3">
        {% csrf_token %}
        {{ form.as_p }}				
        <button type="submit" class="btn btn-primary">저장하기</button> 	
    </form>
</div>
{% endblock %}

장고의 경우 프레임워크에서 CSRF 토큰을 활용함

템플릿에 {% csrf_token %} 넣기


  • 전역적으로 비활성화
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
#   'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

 

  • 부분적으로 비활성화

뷰 함수에 @csrf_exempt 데코레이터를 추가

→ csrf토큰이 없거나 변조되어도 질문 등록이 가능해짐

728x90