Django模型密码字段安全

时间:2017-06-12 05:39:00

标签: django django-models

我正在创建一个体育应用程序,允许用户创建自己的联赛并邀请他们的朋友玩。理想情况下,我想密码保护联盟。这是目前的表格:

class StraightRedPersonalLeague(models.Model):
    seasonid = models.IntegerField(primary_key = True)
    personalleaguelongname = models.CharField(max_length=36)
    personalleagueshortname = models.CharField(max_length=24)
    leaguepassword = ????
    leagueispublic = models.NullBooleanField(null=True)
    soccerseason = models.ForeignKey('straightred.StraightredSeason', db_column='soccerseasonid', related_name='personalleague_seasonUserSelection')



    class Meta:
        managed = True
        db_table = 'straightred_personalleague'

我在stackoverflow上进行了搜索,发现了以下内容:

How to create Password Field in Model django

答案未被接受,但有一些赞成。将密码存储为charfield是否安全?如果是这样,我认为forms.PasswordInput是正在做所有“神奇”的安全问题的部分。

对此安全问题的任何建议都将不胜感激。

3 个答案:

答案 0 :(得分:3)

TLDR

你不应该为此烦恼。你应该使用django非常安全的user authentication框架。最简单的方法是

class StraightRedPersonalLeague(models.Model):
    seasonid = models.IntegerField(primary_key = True)
    personalleaguelongname = models.CharField(max_length=36)
    user = models.OneToOneField(User)
    leagueispublic = models.NullBooleanField(null=True)
    soccerseason = models.ForeignKey('straightred.StraightredSeason', db_column='soccerseasonid', related_name='personalleague_seasonUserSelection')



    class Meta:
        managed = True
        db_table = 'straightred_personalleague'
让pjango担心保护密码。

forms.PasswordInput

这没有魔力,它基本上映射到HTML密码字段。 forms.PassworodInput仅用于用户输入,并不表示密码实际存储在数据库中的方式。

密码存储字段

django.contrib.auth.models.User继承自AbstractBaseUser,这就是密码字段在其中的定义方式:

password = models.CharField(_('password'), max_length=128)

但是,(而且它很大但是),幕后工作还有很多工作要确保密码是安全的。

答案 1 :(得分:0)

将密码存储为CharField是安全的,但您必须将其哈希。 您可以查看here如何哈希密码。以下是关于set_password()方法的官方documentation

答案 2 :(得分:0)

你最好从已经拥有所有密码安全工具的AbstractUser继承它。