[python] Flask-WTF에서 폼 필드에 입력된 값을 암호화하여 안전하게 저장하는 방법은 어떻게 되나요?
Flask-WTF는 Flask 프레임워크를 사용하여 폼을 구현하는 데 도움을 주는 확장 라이브러리입니다. Flask-WTF를 사용하면 폼 필드에 입력된 값을 처리하고 저장하는 과정에서 데이터를 암호화하여 보안을 강화할 수 있습니다.
아래는 Flask-WTF와 cryptography 라이브러리를 사용하여 폼 필드에 입력된 값을 암호화하는 예제 코드입니다:
from flask import Flask, render_template, request
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField
from wtforms.validators import DataRequired
from cryptography.fernet import Fernet
import os
app = Flask(__name__)
app.config['SECRET_KEY'] = os.urandom(32) # 랜덤한 시크릿 키 생성
# 암호화에 사용할 키 생성
key = Fernet.generate_key()
cipher = Fernet(key)
# Flask-WTF를 사용하여 폼 생성
class MyForm(FlaskForm):
data = StringField('Data', validators=[DataRequired()])
submit = SubmitField('Submit')
# 웹 페이지 라우트
@app.route('/', methods=['GET', 'POST'])
def home():
form = MyForm()
if form.validate_on_submit():
# 입력된 데이터를 암호화하여 저장
encrypted_data = cipher.encrypt(form.data.data.encode())
# 암호화된 데이터를 저장하는 로직 작성
return "Data saved successfully!"
return render_template('form.html', form=form)
if __name__ == '__main__':
app.run(debug=True)
위 코드에서 key
변수는 암호화에 사용할 고유한 키를 생성합니다. cipher
변수는 cryptography
라이브러리의 Fernet
클래스를 사용하여 암호화 객체를 생성합니다.
MyForm
클래스는 Flask-WTF의 FlaskForm
을 상속받아 폼을 만듭니다. StringField
는 문자열을 입력받는 필드이며, DataRequired
는 필드가 비어있지 않은지 검증하는 유효성 검사기입니다.
home
함수에서는 폼이 제출될 때 데이터를 암호화하여 저장하는 로직을 작성합니다. cipher.encrypt()
함수를 사용하여 데이터를 암호화한 후 저장하는 로직을 추가하면 됩니다.
위 코드는 단순한 예제이므로 실제로는 데이터를 적절한 방식으로 저장하는 로직을 구현해야 합니다. 암호화된 데이터를 안전하게 저장하고 복호화하는 과정도 구현해야 합니다.
참고:
- Flask-WTF 공식 문서: https://flask-wtf.readthedocs.io/
- cryptography 공식 문서: https://cryptography.io/