安全存储密码哈希django
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安全存储密码哈希django相关的知识,希望对你有一定的参考价值。
目前我的应用程序在提交时正确存储密码,但它没有散列并以明文形式存储。
我的看法:
def Registration(request):
RegForm = RegistrationForm(request.POST or None)
if request.method == 'POST':
if RegForm.is_valid():
clearUserName = RegForm.cleaned_data['userNm']
clearPassNoHash = RegForm.cleaned_data['userPass']
clearPass = bcrypt.hashpw(clearPassNoHash.encode("utf-8"), bcrypt.gensalt(14) )
RegForm.save()
try:
return HttpResponseRedirect('/Newuser/?userNm=' + clearUserName)
except:
raise ValidationError(('Invalid request'), code='300')
else:
RegForm = RegistrationForm()
return render(request, 'VA/reuse/register.html', {
'RegForm': RegForm
})
形成
class RegistrationForm(ModelForm):
userPass = forms.CharField(widget=forms.PasswordInput, label='Password')
class Meta:
model = Client
fields = ['userNm','userPass']
models.朋友
class Client(models.Model):
userNm = models.EmailField(verbose_name="Email",max_length=50,unique=True) #userNm = <user's email>
userPass = models.CharField(verbose_name="Password", max_length=50)
问题是clearPass
在视图中似乎只是发送clearPassNoHash
的值,因为它的值是.cleaned_data[]
的一部分。知道我做错了什么吗?我非常感谢有关正确实现此操作以帮助散列传递的一些帮助。
谢谢
答案
您只是为变量赋值。您应该将其分配给表单:
if RegForm.is_valid():
clearUserName = RegForm.cleaned_data['userNm']
clearPassNoHash = RegForm.cleaned_data['userPass']
RegForm.userPass = bcrypt.hashpw(clearPassNoHash.encode("utf-8"), bcrypt.gensalt(14) )
RegForm.save()
另一答案
我有一个类似的问题。我的解决方案是在models.py中定义一个方法,并调用该方法来哈希我的纯文本密码。这是我的代码:
#models.py
def hash_password(password):
#since our user model is from AbstractBaseUser, we need to manually hash passwords
hashed = make_password(password) #returns PBKDF2 hashed password
return hashed
#views.py
#encrypt plain password
form.instance.password = hash_password(clean['password'])
您不必使用此(PBKDF2)散列算法,您可以使用您想要的任何一个(例如您的Bcrypt算法)。只要你返回哈希值,你应该是好的。您可以使用的第二个解决方案是内置set_password但我个人从未使用它。
另一答案
我遇到了类似的问题,发现在提交修复问题之前实例化新用户:
def Registration(request):
RegForm = RegistrationForm(request.POST or None)
if request.method == 'POST':
if RegForm.is_valid():
new_user = RegForm.save(commit=False)
new_user.userNm = RegForm.cleaned_data['userNm']
new_user.userPass = bcrypt.hashpw(
RegForm.cleaned_data['userPass'].encode("utf-8"),
bcrypt.gensalt(14))
new_user.save()
try:
return HttpResponseRedirect('/Newuser/?userNm=' + clearUserName)
except:
raise ValidationError(('Invalid request'), code='300')
else:
RegForm = RegistrationForm()
return render(request, 'VA/reuse/register.html', {
'RegForm': RegForm
})
以上是关于安全存储密码哈希django的主要内容,如果未能解决你的问题,请参考以下文章