1

私は 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})/?$'

そして送り出す。リンクをクリックすると、アカウントがアクティブになり、アクティベーション キーが無効になります。

私は当初、追加の予防措置としてランダムな文字列をハッシュすることを考えていましたが、これは不要なようで、URL に 32 の長さのキーを 2 つ含めるとかなり長くなります。

account/12345678/12345678
    or
account/12345678901234567890123456789012/12345678901234567890123456789012

これは、アカウントの有効化を処理する安全で推奨される方法ですか? 文字列にランダムな長さを持たせる必要がありますか?

4

2 に答える 2

1

タイミング攻撃の影響を受けないように、長さを可変にすることは良いことです。

また、python に組み込まれているランダムは、実際には暗号学的に安全ではないため、hashlib の shaを使用するか、sys コールを実行して取得できる Linux 経由で生成されたシステム ランダムを使用することを常にお勧めします。

于 2011-10-10T07:35:19.887 に答える
1

その質問に答えるには、アカウントのアクティベーションが保護されている理由を検討する必要があります。おそらく、人々がアクティベーション コードを推測するのを防ぎ、偽の電子メール アドレスを使用できるようにするためです。いずれにせよ、電子メール アドレスは非常に簡単に取得できるため、アクティベーション プロセスは、ウェブ上のどこかで電子メール アカウントを登録する場合よりもはるかに難しくする必要はありません。攻撃者は攻撃を別の弱点に移すだけなので、それ以上は無駄な努力です。

これには、ランダムな文字列を使用しても問題ありません。

より多くのセキュリティが必要な場合は、ハッシュ化されたアカウント ID をそこに入れることを検討できます。これにより、アクティベーション コードを推測するために失敗した複数の試みをカウントして停止することができます。

于 2011-10-10T05:16:15.800 に答える