Django应用程序中的密码字符串比较

Django应用程序中的密码字符串比较,django,Django,根据设计,在任何Django应用程序中都不可能获得用户的密码 我正在为我的Django应用程序实现一个change password功能,其中一个要求是确保用户不会保留与以前相同的新密码 我不能在这里进行字符串比较,那么在这种情况下,最佳的模式是什么 以下是我的想法:访问我的更改密码功能需要重新验证(即用户必须再次输入密码)。我可以设想在此时将密码字符串保存在会话变量中(例如,session.request['old_password']),然后将此会话变量与用户设置的新密码字符串进行比较?这种

根据设计,在任何Django应用程序中都不可能获得用户的密码

我正在为我的Django应用程序实现一个
change password
功能,其中一个要求是确保用户不会保留与以前相同的新密码

我不能在这里进行字符串比较,那么在这种情况下,最佳的模式是什么


以下是我的想法:访问我的
更改密码
功能需要重新验证(即用户必须再次输入密码)。我可以设想在此时将密码字符串保存在会话变量中(例如,
session.request['old_password']
),然后将此会话变量与用户设置的新密码字符串进行比较?这种模式是否存在安全问题?

您不需要在会话中存储旧密码,也不应该存储旧密码。由于会话数据保存在会话存储器中,并且在密码更改的短暂时间内,它以纯文本格式存在。理论上,攻击者可以使用数据库事件或触发器捕获这些纯文本密码对象。更好的方法是使用django内置的

如果要手动输入,请检查密码(密码,编码) 通过比较纯文本密码和散列密码对用户进行身份验证 在数据库中输入密码,使用方便功能 检查密码()。它需要两个参数:密码的纯文本 检查,以及数据库中用户密码字段的完整值 检查,如果匹配则返回True,否则返回False


在本例中,您需要创建一个自定义表单,该表单将调用此方法作为其clean()方法的一部分。如果上述函数调用返回true,则需要引发验证错误,说明旧密码正在重新使用。

您不需要在会话中存储旧密码,也不应该存储旧密码。由于会话数据保存在会话存储器中,并且在密码更改的短暂时间内,它以纯文本格式存在。理论上,攻击者可以使用数据库事件或触发器捕获这些纯文本密码对象。更好的方法是使用django内置的

如果要手动输入,请检查密码(密码,编码) 通过比较纯文本密码和散列密码对用户进行身份验证 在数据库中输入密码,使用方便功能 检查密码()。它需要两个参数:密码的纯文本 检查,以及数据库中用户密码字段的完整值 检查,如果匹配则返回True,否则返回False


在本例中,您需要创建一个自定义表单,该表单将调用此方法作为其clean()方法的一部分。如果上述函数调用返回true,则需要引发一个验证错误,说明旧密码正在被重新使用。

根据我在“应答”下的建议,似乎有现有的软件包可以为您执行此操作,因此您不必亲自编写

本质上,这似乎是通过将以前使用的哈希密码存储在数据库中,然后将新的哈希密码与当前存储的密码进行比较来实现的


有关更多信息,请参阅他们的验证器。

根据我在“答案”下的建议,似乎有这样的现有软件包可以为您执行此操作,因此您不需要亲自编写

本质上,这似乎是通过将以前使用的哈希密码存储在数据库中,然后将新的哈希密码与当前存储的密码进行比较来实现的


有关更多信息,请参阅验证程序。

对新密码进行散列,并将其与旧密码的散列进行比较。对新密码进行散列,并将其与旧密码的散列进行比较。或者更好。。。编写自定义密码验证程序,以便
set\u password
为您执行此操作…:)你好@Sayse这是一个很好的建议。为什么不发布一个答案呢?谢谢,但它更像是对你已经非常完整的答案的补充,或者更好。。。编写自定义密码验证程序,以便
set\u password
为您执行此操作…:)你好@Sayse这是一个很好的建议。为什么不发布一个答案呢?谢谢,但它更像是你已经非常完整的答案的附录谢谢,我会查出来:-)谢谢,我会查出来:-)