[파이썬] Flask에서의 CSRF 보호

Flask는 웹 애플리케이션 개발을 위한 Python 마이크로 프레임워크로, 여러 보안 기능 중 하나인 CSRF(Cross-Site Request Forgery) 보호도 제공합니다. CSRF는 악의적인 공격자가 사용자의 권한으로 요청을 위조하여 악용하는 공격 유형입니다. Flask는 이러한 CSRF 공격으로부터 보호하기 위한 기능을 제공하고 있어, 개발자가 쉽게 보안을 강화할 수 있습니다.

Flask-WTF 사용하기

Flask-WTF는 Flask의 확장 모듈로, 웹 폼의 생성 및 검증을 도와주는 기능을 제공합니다. CSRF 보호를 위해서는 Flask-WTF를 사용하여 토큰을 생성하고 검증해야 합니다. 다음은 Flask-WTF를 사용하여 CSRF 보호를 설정하는 예시입니다.

  1. Flask-WTF 설치하기

    pip install flask-wtf
    
  2. Flask 애플리케이션에 Flask-WTF 초기화하기

    from flask_wtf.csrf import CSRFProtect
    
    csrf = CSRFProtect(app)
    
  3. 템플릿에 CSRF 토큰 추가

       
    <form method="POST">
      {{ form.csrf_token }}
      <!-- 나머지 폼 필드들 -->
    </form>
       
    
  4. POST 요청으로부터 CSRF 토큰 검증하기

    from flask_wtf.csrf import validate_csrf
    
    @app.route('/submit', methods=['POST'])
    def submit_form():
        token = request.form.get('csrf_token')
        validate_csrf(token)
        # CSRF 토큰이 유효한 경우, 폼 데이터 처리하기
        # 그렇지 않은 경우, 오류 처리 또는 리다이렉션 등 필요한 조치 수행하기
    

Flask-WTF의 CSRFProtect 클래스는 애플리케이션에 CSRF 보호를 적용할 수 있는 기능을 제공합니다. 애플리케이션 객체를 생성한 뒤 csrf 변수로 CSRF 보호를 활성화할 수 있습니다. 또한, form.csrf_token을 사용하여 템플릿에 CSRF 토큰을 자동으로 추가할 수 있습니다. 마지막으로, validate_csrf 함수를 사용하여 POST 요청으로부터 받은 CSRF 토큰을 검증할 수 있습니다.

이와 같이 Flask에서는 Flask-WTF를 사용하여 CSRF 보호를 구현할 수 있습니다. Flask-WTF를 통해 간편하게 CSRF 보호를 적용할 수 있으며, 웹 애플리케이션 개발 시에 보안을 강화할 수 있습니다.