[python] Flask-WTF에서 CSRF 토큰을 생성하고 검증하는 방법은 어떻게 되나요?

Flask-WTF는 Flask 웹 프레임워크와 함께 사용되는 패키지로, 웹 애플리케이션의 보안을 강화하기 위한 다양한 기능을 제공합니다. CSRF(Cross-Site Request Forgery) 공격을 방지하기 위해 Flask-WTF는 편리한 CSRF 보호 기능을 제공합니다.

CSRF 토큰 생성하기 Flask-WTF에서 CSRF 토큰을 생성하는 방법은 매우 간단합니다. 우선, 토큰을 생성할 폼을 정의해야 합니다. 폼 클래스는 Flask-WTF의 FlaskForm을 상속받아야 합니다.

from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField

class MyForm(FlaskForm):
    name = StringField('Name')
    submit = SubmitField('Submit')

위의 예제에서 MyForm 클래스에는 name 필드와 submit 버튼이 있는 폼이 정의되어 있습니다. 이제 이 폼을 렌더링해 HTML 페이지에 표시하려면 다음 코드를 사용할 수 있습니다.

from flask import Flask, render_template
from flask_wtf.csrf import generate_csrf

app = Flask(__name__)
app.config['SECRET_KEY'] = 'your-secret-key'

@app.route('/')
def index():
    form = MyForm()
    csrf_token = generate_csrf()
    return render_template('index.html', form=form, csrf_token=csrf_token)

if __name__ == '__main__':
    app.run()

위의 코드에서 generate_csrf() 함수를 사용하여 CSRF 토큰을 생성하고, 이를 템플릿으로 전달합니다. 템플릿에서는 각각의 필드와 함께 토큰을 사용하여 폼을 보호할 수 있습니다.

CSRF 토큰 검증하기 요청을 처리할 때 Flask-WTF는 자동으로 CSRF 토큰을 검증합니다. 위에서 생성한 MyForm을 사용해 POST 요청을 처리하는 예제를 살펴보겠습니다.

from flask import Flask, render_template, request
from flask_wtf.csrf import CSRFProtect

app = Flask(__name__)
app.config['SECRET_KEY'] = 'your-secret-key'
csrf = CSRFProtect(app)

@app.route('/', methods=['GET', 'POST'])
def index():
    form = MyForm()
    if form.validate_on_submit():
        # 폼이 제출되고 유효성 검사를 통과한 경우
        name = form.name.data
        # 데이터 처리 로직 추가
        return f'Hello, {name}!'
    return render_template('index.html', form=form)

if __name__ == '__main__':
    app.run()

위의 예제에서 validate_on_submit() 메서드를 사용하여 폼이 제출되고 유효성 검사를 통과했는지 확인합니다. 이를 통해 CSRF 토큰이 자동으로 검증되고, 안전하게 요청을 처리할 수 있습니다.

Flask-WTF를 사용하면 간편하게 CSRF 토큰을 생성하고 검증할 수 있습니다. 이를 통해 웹 애플리케이션의 보안을 강화할 수 있으며, CSRF 공격으로부터 안전하게 데이터를 보호할 수 있습니다.

참고 문서: Flask-WTF Documentation