帐户激活应该有多安全?

时间:2011-10-10 04:58:16

标签: django account-management

我正在Django从头开始编写一个帐户激活过程,这是我的基本思考过程:

创建一个类似的模型:

class UserAccountActivation(models.Model):
    lock = models.CharField(max_length=16)
    key = models.CharField(max_length=16)

必要时使用如下函数生成锁定和键值:

def generate_entry():
    """Generate a random alphanumeric string between 8 and 16 characters long."""
    ''.join(random.choice(string.ascii_lowercase + string.digits) for x in range(random.randint(8,16))

撰写如下链接:

r'^activate/(?P<lock>\w{8,16})/(?P<key>\w{8,16})/?$'

发送出去。当他们点击链接时,我激活帐户并禁用激活密钥。

我最初考虑将随机字符串哈希作为额外的预防措施,但这似乎是不必要的,并且在我的网址中有两个32长度密钥需要很长时间:

account/12345678/12345678
    or
account/12345678901234567890123456789012/12345678901234567890123456789012

这是一种安全且推荐的处理帐户激活方式吗?是否有必要在字符串上有随机长度?

2 个答案:

答案 0 :(得分:1)

嗯,要回答这个问题,您必须考虑为什么您的帐户激活受到保护。可能是为了防止人们猜测激活码,因此他们可以使用虚假的电子邮件地址。由于电子邮件地址无论如何都很容易获得,因此激活过程不需要比在网络上的某个地方注册电子邮件帐户要困难得多。更多的是浪费精力,因为攻击者只会将攻击转移到另一个弱点。

使用随机字符串对此非常好。

如果您需要更高的安全性,可以考虑在其中放置一个哈希帐户ID,这样您就可以计算并停止多次尝试猜测激活码的失败尝试。

答案 1 :(得分:1)

拥有可变长度是一件好事,以免它受到timing attacks的影响。

此外,python的内置随机并不是真正的加密安全,所以最好使用sha from hashlib或通过linux生成的随机系统,你可以通过进行系统调用来获得。