Skip to main content
 首页 » 编程设计

python之为什么在 django/python 中创建自己的用户类来管理用户信息是不好的做法

2025年05月04日33lonelyxmas

为什么在 django 中创建自己的用户类而不是使用 django 内置的用户函数被认为是不好的做法?

P.S 我想创建的用户类包含他们的电子邮件、密码(散列整数)、名称和用户类型的字段。使用 python 的 hash() 方法对密码进行哈希处理。

hash(password_string); 

请您参考如下方法:

使用您自己的 User 类是 fully supported甚至受到包括我在内的一些人的鼓励。它允许进行各种自定义,例如使用电子邮件作为用户名、提供用户类型或您能想到的几乎所有内容。

虽然支持提供您自己的身份验证机制,但如果您没有安全方面的经验,强烈建议不要提供。您应该基于 Django 的身份验证机制和 Django 使用的散列函数的多年经验,并依靠社区对安全漏洞的持续关注。

至于使用内置的hash(password_string)存储密码?您最好以纯文本形式存储密码。内置的 hash() 函数专为提高速度而设计。它不是加密安全的,而且速度非常快。这意味着什么?第一个意味着碰撞不是均匀分布的。一些散列值出现的次数比其他的多,这意味着一些密码天生就比较弱,与其他密码相比会相等。第二个意味着获得数据库中密码的攻击者可以简单地暴力破解这些值。您使用的是单次迭代,这意味着攻击者每秒可以尝试数十亿个密码。您没有使用盐,这使得密码列表怀疑并行性和彩虹表。更不用说,在 Python 3 中,hash() 函数以随机值作为种子,每个新的 Python 进程都会为相同的密码生成不同的哈希值,即密码只会有效对于那个特定的 Python 进程,直到它重新启动。

这只是冰山一角。

所以请随意推出您自己的 User 类,使用任何您喜欢的用户名,提供您想要的任何其他属性,但是拜托,拜托,请为每个人使用 Django 的默认身份验证机制清酒。