我有以下问题。我为我的网站制作了一个注册密码,以便用户 需要知道这个密码才能注册。此外,我想要一个链接到它的布尔值,它将决定用户使用此密码获得的权限类型。
class RegistrationPassword(models.Model):
password = models.CharField(max_length=20, unique=True)
poweruser = models.BooleanField(default=False)
def __unicode__(self):
return self.password
我向admin注册了这个,这样我就可以添加和删除密码,并使poweruser链接到它们是真还是假。然后,当用户注册时,我检查布尔值,如下所示:
registrationpassword = form.cleaned_data.get('registrationpassword')
ispoweruser = RegistrationPassword.objects.get(password=registrationpassword).poweruser
问题是密码没有以任何方式进行散列或加密。如何为我的方法添加更多安全性?
答案 0 :(得分:1)
此外,我想要一个与之关联的布尔值,这将决定用户使用此密码获得的权利类型
别。使用组。这就是他们的目的。
如果此“超级用户”不是超级用户,那么您需要定义一个具有额外权限的组,并将高级用户置于该组中。
每个视图功能都需要确认用户是否在适当的组中才能使用视图功能。
现在ispoweruser
是一个针对组名的简单测试,没有额外的密码没有额外的布尔值。
答案 1 :(得分:0)
使用auth应用和user.is_superuser
。不要重新发明轮子。
答案 2 :(得分:0)
问题是密码没有以任何方式进行散列或加密。如何为我的方法添加更多安全性?
最常用的密码是使用SHA-x或MD-5散列算法进行散列。在这种情况下,开发人员散列密码并将散列副本存储在数据库或代码中。因此,任何地方都没有人类可读的副本。
要对此密码进行身份验证,您必须创建用户输入密码的HASH,然后将其与存储的密码进行比较。
如果您正在创建一个Web应用程序,则可以在提交网页之前使用javascript完成哈希,这样一个哈希密码会通过网络传播,这使得黑客很难拦截然后“取消哈希”它们
Javascript哈希如下(假设我们使用的是md5,用户密码是“test”)
运行类似于以下
的查询选择md5(concat(pwd,'9985'))作为newpwd来自uname ='xyz'的用户
如果有人试图通过HTTP回复发布数据,则认证将不会通过,因为服务器每次都会创建新的会话ID。 因此,如果用户注销并重新登录,则通过网络发送新的哈希密码。
请参阅以下链接以供参考
Python's safest method to store and retrieve passwords from a database
What is the format in which Django passwords are stored in the database?