此 Hack 是否可以解决 PASSWORD_RESET_TIMEOUT_DAYS 不能设置为少于 1 天的安全问题?

Is this Hack to work around PASSWORD_RESET_TIMEOUT_DAYS cannot be set to less than one day safe?

Django 不允许将变量 PASSWORD_RESET_TIMEOUT_DAYS 设置为少于 1 天。

作为解决方法,我正在考虑在密码重置激活中发送时间戳 URL,使用以下格式:

path('activate/<uidb64>/<timestamp>/<token>/', views.activate, name='activate')

使用时间戳,我可以手动检查时间戳是否在小于一天的时间段内。

想知道从安全角度来看这样做是否不安全?

Django does not allow the variable PASSWORD_RESET_TIMEOUT_DAYS to be set to less than one day.

此问题已 addressed in Django 3.1PASSWORD_RESET_TIMEOUT_DAYS 将被弃用,取而代之的是 PASSWORD_RESET_TIMEOUT,后者以秒为单位计算值。

与此同时,您可以创建自己的 PasswordResetView and provide your own token_generator class that does what Django 3.1 will do) 的子类。

如果您想在 Django <3.1 中子类化现有生成器,here is the diff 显示了您需要覆盖的内容。

然而,在您担心这样做之前,可能值得阅读 this note 较长超时的安全隐患,并检查您是否真的需要较短的超时来实现您的目的。