让我们从两个假设开始:
SECRET_KEY
作为加密密钥。SECRET_KEY
需要更改。在这种情况下,最好的做法是什么?我认为我应该在修复安全漏洞后立即更改SECRET_KEY
,但是如果我这样做,我将基本上无法访问所有加密数据。
我想到的是首先进行迁移,这将暂时用简单的字段/文本字段替换加密字段+数据迁移到未加密的存储值。然后更改SECRET_KEY
。最后再带回加密字段,再次进行数据迁移以加密存储的值。
这似乎是一个很大的麻烦,是否有更好/更简单/更快的方式处理这种情况?
答案 0 :(得分:1)
由于您只有一个密钥,因此您唯一的办法就是重新加密整个数据库。
正确的方法是首先不要将django的SECRET_KEY
用于数据库任务(即使django不会将其用于用户密码之类的事情),也要为敏感数据实现密钥轮换算法。
django-fernet-fields
提供开箱即用的此功能;但是,它假设您将键旋转作为最佳实践,而不是妥协的结果。
最佳实践密钥轮换依赖于“使用中的加密”,其中秘密未使用旧密钥加密,并在使用时使用新密钥重新加密。最终,您最常用的机密信息会被重新加密,您可以进行审核以使其余条目无效或强制重新加密。