一意の整数識別子による Django の主キーの隠蔽
Django では、主キーは通常、一意のキーとして機能する自動インクリメントされる整数です。テーブル内の各行の識別子。ただし、このキーを URL またはその他の公開コンテキストで公開すると、プライバシーとセキュリティが侵害される可能性があります。この記事では、主キーの一意の性質を維持しながら主キーを難読化する別のアプローチについて説明します。
要件
アプローチ
これらの要件に対処するために、Instagram の ID 生成システムと同様のソリューションが提案されています。このアプローチには、時間ベースのコンポーネントとランダムなコンポーネントで構成される一意の ID を生成することが含まれます。
ID 生成関数
import time import random START_TIME = int(time.time() * 1000) # Some constant timestamp def make_id(): t = int(time.time() * 1000) - START_TIME u = random.SystemRandom().getrandbits(23) id = (t << 23) | u return id def reverse_id(id): t = id >> 23 return t + START_TIME
make_id 関数は、次を使用して一意の ID を生成します。 41 ビットの時間ベースのコンポーネントと 23 ビットのランダム コンポーネントです。 reverse_id 関数を使用すると、生成された ID からタイムスタンプを抽出できます。
モデル
from django.db import models class MyClass(models.Model): id = models.BigIntegerField(default=make_id, primary_key=True)
make_id 関数を id フィールドのデフォルト値として使用することで、新しいレコードには挿入時に一意の ID が割り当てられます。このアプローチにより、主キー フィールドの整数データ型が維持されると同時に、その連続的な性質がわかりにくくなります。さらに、ID のランダム コンポーネントにより、同時挿入中であっても衝突が防止されます。
使用法
この実装では、主キーの値は簡潔でユニークな整数になります。主キーの機能を維持しながら、暴露に耐性があります。
以上が一意の整数識別子を使用して Django の主キーを安全に難読化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。