[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() 함수를 사용하여 데이터를 암호화한 후 저장하는 로직을 추가하면 됩니다.

위 코드는 단순한 예제이므로 실제로는 데이터를 적절한 방식으로 저장하는 로직을 구현해야 합니다. 암호화된 데이터를 안전하게 저장하고 복호화하는 과정도 구현해야 합니다.

참고: