如何在我的 Python Flask 应用程序中加密 sqlite 数据库中的单列?

问题描述 投票:0回答:1

我希望我的 sqlite 数据库中的一列被加密,但对我的 Flask 应用程序仍然可见。当我使用下面的解决方案时 - 我的 Flask 应用程序能够看到加密列中的数据,但是当我打开数据库时,我看到数据已加密。

但我不确定我的解决方案是否可以安全地在 pythonanywhere.com 上公开托管。我面临的弱点是什么?将我的“密钥”保存在代码中安全吗?这是我的代码如下:

from flask import Flask
from flask_login import LoginManager, UserMixin, login_user, logout_user, login_required
from sqlalchemy_utils import EncryptedType

key = "my_encryption_key_here"

app = Flask(__name__)
app.config['SECRET_KEY'] = 'hello'
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///db.sqlite'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
login_manager = LoginManager()
login_manager.init_app(app)

class Rx(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    sx_string = db.Column(EncryptedType(db.String, key), nullable=True, unique=False)

python sqlite flask sqlalchemy flask-sqlalchemy
1个回答
0
投票

我建议将其放入一个单独的文件中,该文件在您的

.gitignore
文件中被明确忽略,然后从那里导入它。或者,您可以使用包含可以加载的环境变量的
.env
文件(PythonAnywhere 网站上有一个帮助页面解释了如何执行此操作,只需在首页搜索“环境”即可。

原因是,如果它与代码的其余部分混合在一起,如果您将代码存储在 GitHub 或类似内容上的 git 存储库中,那么您的加密密钥将位于该服务上 - 因此,如果发生违反该服务,或者如果您不小心将存储库公开或类似的事情,您的密钥将被泄露。

© www.soinside.com 2019 - 2024. All rights reserved.