使用唯一整数标识符来模糊 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中文网其他相关文章!