我的自定义登录安全吗?

Die*_*ila 0 python security django

我创建了自己的自定义登录,我没有使用django的登录.

这是我的models.py:

class TipeUser(models.Model):
    tipe = models.CharField(max_length=30)
    detail = models.CharField(max_length=50, blank=True, null=True)
class User(models.Model):

    user = models.CharField(max_length=20)
    password = models.CharField(max_length=50)
    state = models.CharField(max_length=1)
    id_tipe_user = models.ForeignKey(TipeUser, on_delete=models.CASCADE)
Run Code Online (Sandbox Code Playgroud)

我的views.py:

    def login(request):

        context={}  
        return render(request, 'login.html', context)

    def validate(request):
        if request.method=='POST':
            nameUser = request.POST.get('nameUser')
            passwordUser = request.POST.get('passwordUser')
            password = md5.new(passwordUser).hexdigest()
         try:
            userAdmin = User.objects.get(user=nameUser, password=password, id_tipe_user=1, state=1)
            request.session['nameUser'] = userAdmin.user
            return redirect('home')
         except User.DoesNotExist: 
             message= "User/Password wrong !!"
              context = {
                 'message': message,
              }
               return render(request, 'login.html', context)

    def home(request):

        if 'nameUser' not in request.session:

            return render(request, 'login.html', {})
        else:
           return render(request, 'myMenu.html', context)

def logout(request):

    if 'nameUser' in request.session:

        #delete session
        del request.session['nameUser']
        #redirect to login
        return redirect('login')


    else:
        return redirect('login')
Run Code Online (Sandbox Code Playgroud)

我想第二个意见,这是一个好习惯吗?我在这里完全安全,还是需要修改我的代码?

AKX*_*AKX 10

不,这不对.

  • 使用MD5哈希密码至少15年来一直不安全.
  • 您不应该将模型实例放入会话中,因为它们不会"生效",即如果数据库中的用户发生更改,则会话中的对象仍将具有旧数据.
  • 你假设有一个TipeUserID为1(无论这意味着什么).
  • 您正在state使用整数查询CharField 1.
  • 可能还有其他的事情,但我不打算详细列举它们,因为 -

坦率地说,你正在重新发明Django为会话和用户提供的完美好轮子.你为什么做这个?如果您需要有关用户模型的额外数据,那么已经有了支持.