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