Безопаснее ли использовать целочисленный PrimaryKey хеширование или использовать модуль secrets без хеширования

#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,
    )