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

时间:2013-11-30 10:06:47

标签: cryptography sails.js

我已为我的网站实施密码重设。你是否善意指出我所做的最终问题或愚蠢的事情。

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

  1. 用户想要更改密码。他输入了将密码发送给他的电子邮件。 Captcha在这里。
  2. 服务器将首先检查是否有这样的电子邮件。如果是这样,那就...... [/ li>
  3. 生成GUID(节点的UUID库)。使用用户电子邮件(也许是用户ID)在数据库中写入GUID。这个简单的表格带有GUID,电子邮件和时间戳。
  4. 完成后,服务器将创建一个此类型的链接。 //本地主机:// changepwd标记者= GUID
  5. 当用户单击链接时,将从URL中获取GUID并将其与数据库中的URL进行比较。如果存在,则进行另一次检查以确保请求不超过1小时(或任何时间)。
  6. 之后,用户将生成小表格并发送给他。该表单包含允许更改密码的字段。
  7. GUID也将作为表单中的秘密字段嵌入,当用户提交表单时,将对该GUID进行最终检查。
  8. 还有更多的事情发生在这里然后我写下来了,但实质上这是我做这件事的方式。任何评论都更受欢迎:)

2 个答案:

答案 0 :(得分:1)

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

你应该使用不可预测的东西,例如:

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

答案 1 :(得分:0)

这是一个完全有效的流程。为了提高安全性,通常会提出一个安全问题 - 这会阻止已经泄露电子邮件帐户的用户散布更多损失。