【问题标题】:Is it safer to user Integer PrimaryKey + Hashing or use secrets module without hashing使用 Integer PrimaryKey + Hashing 或使用没有散列的秘密模块是否更安全
【发布时间】:2021-03-04 09:33:16
【问题描述】:

我正在尝试创建一个需要一些敏感数据的应用程序。现在在我的数据库中,我正在使用 python secrets 模块为每个对象创建一个安全的 16 字节十六进制令牌。但是,这样做我将无法散列它,因为它不再是整数了。所以我想知道如果我使用 secrets 模块将 id 暴露给最终用户是否足够安全?

例如,我在我的数据库中的一个表中有一个字段:

id = secrets.token_hex(16) 例如将返回id = cf125cf14d4ae9ed8972ee7512755e6d

或者我应该坚持使用自动递增整数的常规数据库主键,然后使用散列库来显示散列值,然后在我想使用它们时对它们进行解码?

【问题讨论】:

  • 安全是相对的。您要防范哪些威胁?一旦确定存在哪些威胁,您就可以确定保护数据的最佳方法。
  • 这是为了跟踪私人聊天室。所以在 URL 中,用户会看到聊天室的 id,这就是我要保护的内容。

标签: python python-3.x django database


【解决方案1】:

我喜欢使用 uuid 作为所有实体的主键。

import uuid
from django.db import models

class SomeModel(models.Model):

    id = models.UUIDField(
        default = uuid.uuid4,
        editable = False,
        primary_key = True,
    )

【讨论】:

    猜你喜欢
    • 2011-02-08
    • 1970-01-01
    • 2011-01-20
    • 2020-11-20
    • 1970-01-01
    • 1970-01-01
    • 2012-11-14
    • 1970-01-01
    • 2018-06-22
    相关资源
    最近更新 更多