我在数据库中的Django应用密码如下:
**EDITED**
但是,如果我将其复制给另一个用户,则可以登录该用户的帐户。
假设数据库遭到破坏或某种形式的注入,我是否可以检测是否以某种方式重复/复制了密码,以便拒绝访问该帐户或向管理员发出警报?
答案 0 :(得分:0)
Selcuk所说,如果某人有权访问您的数据库,他/她可以执行系统生成密码之类的任何操作。
但是您可以更难更改密码。
如果要拒绝从数据库复制密码,则必须创建自己的用户模型并更新哈希算法,如下所示。
首先创建一个用户模型:
from django.contrib.auth.hashers import make_password, check_password
class MyUser(User):
def set_password(self, raw_password):
self.password = make_password(self.username + raw_password)
self._password = raw_password
def check_password(raw_password):
def setter(raw_password):
self.set_password(raw_password)
self._password = None
self.save(update_fields=['password'])
return check_password(self.username + raw_password, self.password. setter)
通过这些更改,用户密码哈希包含用户名,并且其他用户的副本哈希无法正常工作