为什么在django中创建自己的用户类被认为是不好的做法,而不是使用django内置的用户函数?
P.S我想要创建的用户类包含其电子邮件,密码(散列整数),名称和用户类型的字段。使用pythons hash()方法对密码进行哈希处理。
hash(password_string);
答案 0 :(得分:6)
使用您自己的User
课程是fully supported,甚至包括我在内的一些人都鼓励过。它允许各种自定义,例如使用电子邮件作为用户名,提供用户类型,或几乎任何你能想到的东西。
如果您没有安全方面的经验,强烈建议不要提供您自己的身份验证机制。您应该建立在Django身份验证机制和Django使用的散列函数的多年和多年经验的基础上,并依靠社区的持续监视来寻找安全漏洞。
使用内置hash(password_string)
存储密码?您最好以纯文本格式存储密码。内置hash()
功能专为提高速度而设计。它不是加密安全的,而且速度非常快。那是什么意思?第一个意味着碰撞不均匀分布。某些散列值比其他散列值更多,这意味着某些密码本身就更弱,并且与其他密码相比也是如此。第二个意味着,在数据库中获取密码的攻击者可以简单地强制执行这些值。您正在使用单次迭代,这意味着攻击者每秒可以尝试数十亿个密码。您没有使用salt,这会使密码列表怀疑并行性和彩虹表。更不用说,在Python 3中,hash()
函数以随机值播种,并且每个新的Python进程将为相同的密码生成不同的哈希,即密码仅对该特定Python进程有效,直到它重新启动。
这只是冰山一角。
所以请随意滚动自己的User
课程,使用您喜欢的任何内容作为用户名,提供您想要的任何其他属性,但请,请为每个人使用Django的默认身份验证机制。