此 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.1。 PASSWORD_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 较长超时的安全隐患,并检查您是否真的需要较短的超时来实现您的目的。
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.1。 PASSWORD_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 较长超时的安全隐患,并检查您是否真的需要较短的超时来实现您的目的。