Cryptography 重置用户密码。这个原则行吗?

Cryptography 重置用户密码。这个原则行吗?,cryptography,sails.js,Cryptography,Sails.js,我已经为我的站点实施了密码重置。请您指出我最终遇到的问题或做过的傻事,好吗 服务器和客户端位于不同的位置。服务器是Sails(node.js),而客户端是Angular,DB是postgresql 用户希望更改其密码。他键入电子邮件,密码将发送给他。验证码在这里 服务器将首先检查是否存在此类电子邮件。如果是的话,那么它将 生成GUID(节点的UUID库)。在数据库中使用用户电子邮件(也可能是用户id)写入GUID。如此简单的表格,带有GUID、电子邮件和时间戳 完成后,服务器将创建一个具有此类型

我已经为我的站点实施了密码重置。请您指出我最终遇到的问题或做过的傻事,好吗

服务器和客户端位于不同的位置。服务器是Sails(node.js),而客户端是Angular,DB是postgresql

  • 用户希望更改其密码。他键入电子邮件,密码将发送给他。验证码在这里
  • 服务器将首先检查是否存在此类电子邮件。如果是的话,那么它将
  • 生成GUID(节点的UUID库)。在数据库中使用用户电子邮件(也可能是用户id)写入GUID。如此简单的表格,带有GUID、电子邮件和时间戳
  • 完成后,服务器将创建一个具有此类型的链接//localhost://changepwd?tokenizer=GUID
  • 当用户单击时,将从URL获取链接GUID,并与数据库中的GUID进行比较。如果存在,则将进行另一次检查,以确保请求不超过1小时(或任何时间)
  • 之后,用户将生成小表单并发送给他。该表单具有允许更改密码的字段
  • GUID也将作为机密字段嵌入表单中,当用户提交表单时,将对该GUID进行最终检查

  • 这里还有很多事情要做,然后我写了下来,但本质上这是我做的方式。任何评论都是非常感谢的:)

    这是一个非常有效的流程。为了增加安全性,通常会提出一个安全问题-这可以阻止泄露电子邮件帐户的用户传播更多的损害。

    这是一个完全有效的流程。对于额外的安全性,通常会提出一个安全问题-这会阻止泄露电子邮件帐户的用户传播更多的损害。

    GUID不是密码重置链接的好标记,因为它通常是基于时间的,因此是可预测的

    您应该使用不可预测的内容,例如:

    select md5("some_secret_phrase"||uuid_generate()||old_password_hash);
    

    GUID不是密码重置链接的好标记,因为它通常是基于时间的,因此是可预测的

    您应该使用不可预测的内容,例如:

    select md5("some_secret_phrase"||uuid_generate()||old_password_hash);
    

    到底是怎么回事?(攻击者无论如何都可以将电子邮件地址放入表单中并生成新的令牌)当攻击者能够预测令牌时,即使没有收到密码重置电子邮件,他也能够重置受害者的密码。这到底是怎么回事?(攻击者无论如何都可以将电子邮件地址放入表单并生成新的令牌)当攻击者能够预测令牌时,即使没有收到密码重置电子邮件,他也能够重置受害者的密码。