[python] Flask-WTF에서 CSRF 공격을 방지하는 방법은 무엇인가요?

Flask-WTF는 Flask 프레임워크에서 웹 폼을 쉽게 만들고 처리할 수 있게 해주는 확장 라이브러리입니다. 하지만 CSRF(Cross-Site Request Forgery) 공격에 취약할 수 있습니다. CSRF 공격은 인증된 사용자가 악의적인 웹 사이트를 통해 요청을 전송하도록 유도하여 사용자의 동의 없이 원치 않는 동작을 수행하게 하는 공격입니다.

Flask-WTF에서 CSRF 공격을 방지하기 위해 다음과 같은 방법을 사용할 수 있습니다:

  1. 시크릿 키 설정하기: Flask-WTF는 CSRF 토큰을 생성하기 위해 암호화된 시크릿 키를 사용합니다. 이를 위해 Flask 어플리케이션의 설정 파일에서 시크릿 키를 설정해야 합니다. 시크릿 키는 무작위로 생성되어야 하며, 다른 사람들과 공유되지 않도록 주의해야 합니다. 예를 들어, 다음과 같이 시크릿 키를 설정할 수 있습니다:
app = Flask(__name__)
app.config['SECRET_KEY'] = 'your-secret-key'
  1. CSRF 토큰 사용하기: Flask-WTF는 웹 폼 생성 시 자동으로 CSRF 토큰을 생성하고 검증합니다. CSRF 토큰은 웹 폼에서 숨겨진 필드(hidden field)로 자동으로 포함되며, 폼 제출 시에는 이 토큰이 함께 전송됩니다. 이를 통해 Flask-WTF는 제출된 요청이 유효한지 검증합니다. 예를 들어, 다음과 같이 CSRF 보안을 적용할 수 있습니다:
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField
from wtforms.validators import DataRequired

class MyForm(FlaskForm):
    name = StringField('Name', validators=[DataRequired()])
    submit = SubmitField('Submit')
  1. CSRF 보호 기능 활성화하기: Flask-WTF는 기본적으로 CSRF 보호 기능이 비활성화되어 있습니다. 이를 활성화하기 위해서는 Flask 어플리케이션에서 설정을 변경해야 합니다. 예를 들어, 다음과 같이 CSRF 보호 기능을 활성화할 수 있습니다:
app = Flask(__name__)
app.config['WTF_CSRF_ENABLED'] = True

CSRF 공격은 웹 애플리케이션에 심각한 보안 취약점을 초래할 수 있으므로, Flask-WTF를 사용하는 경우 반드시 이러한 CSRF 보호 기능을 적용해야 합니다.