#python #python-3.x #django #database
#python #python-3.x #django #База данных
Вопрос:
Я пытаюсь создать приложение, для которого требуются некоторые конфиденциальные данные. Теперь внутри моей базы данных я использую модуль python secrets для создания безопасного 16-байтового шестнадцатеричного токена для каждого объекта. Однако, поступая таким образом, я не смогу хэшировать его, поскольку оно больше не является целым числом. Итак, мне было интересно, если я использую secrets
модуль, будет ли достаточно безопасно предоставлять идентификаторы конечным пользователям?
так, например, у меня есть поле для одной из моих таблиц в моей базе данных, такое, что:
id = secrets.token_hex(16)
который, например, вернул бы id = cf125cf14d4ae9ed8972ee7512755e6d
Или я должен придерживаться обычных первичных ключей базы данных, которые представляют собой автоматически увеличиваемые целые числа, а затем использовать библиотеку хеширования для отображения хэшированного значения, а затем просто декодировать их, когда я захочу их использовать?
Комментарии:
1. Безопаснее относительно. От каких угроз вы защищаетесь? После того, как вы определили, какие угрозы существуют, вы можете определить наилучший подход к защите данных.
2. Это для отслеживания приватных чатов. Итак, в URL-адресе пользователи будут видеть идентификатор комнаты чата, так что это, по сути, то, что я защищаю.
Ответ №1:
Мне нравится использовать uuid в качестве первичных ключей для всех объектов.
import uuid
from django.db import models
class SomeModel(models.Model):
id = models.UUIDField(
default = uuid.uuid4,
editable = False,
primary_key = True,
)