使用唯一整數標識符來模糊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 位元隨機分量。 verse_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中文網其他相關文章!