我通过以下方式生成“难以猜测的” 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的安全性而言,哪种方法更好?
谢谢
答案 0 :(得分:2)
与secrets.token_urlsafe
不同,不能保证uuid4
的质量。 secrets.token_urlsafe
用于生成共享机密。 uuid4
用于生成可能的通用唯一标识符。
问题是您可能应该同时使用它们:一个秘密令牌和您在数据库中查找的标识符:
create table foo (
id uuid primary key,
token text not null
);
请注意,token_urlsafe
的长度应随时间而变化,以便将来的Python版本可能会生成更长的字符串。