使用uuid.uuid4()或secrets.token_urlsafe()很难猜测URL并在Postgresql中快速选择?

时间:2019-05-04 20:03:12

标签: python postgresql

我通过以下方式生成“难以猜测的” URL:

import uuid
url = uuid.uuid4()

URL存储在Postgres数据库中具有普通索引的字段中(用于快速搜索)。字段的数据类型为uuid: https://www.postgresql.org/docs/9.1/datatype-uuid.html

创建“难以猜测” URL的另一种可能性是使用secrets模块并将其存储在某些Postgres字符串数据类型中:

import secrets
url = secrets.token_urlsafe()

对于在数据库中进行快速搜索以及对随机生成的URL的安全性而言,哪种方法更好?

谢谢

1 个答案:

答案 0 :(得分:2)

secrets.token_urlsafe不同,不能保证uuid4的质量。 secrets.token_urlsafe用于生成共享机密。 uuid4用于生成可能的通用唯一标识符。

问题是您可能应该同时使用它们:一个秘密令牌您在数据库中查找的标识符:

create table foo (
    id uuid primary key,
    token text not null
);

请注意,token_urlsafe的长度应随时间而变化,以便将来的Python版本可能会生成更长的字符串。