nodejs-如何安全地将令牌从http获取请求传递到html页面

node js - How to safely pass token from http get request to html page?

本文关键字:请求 获取 http 页面 html 令牌 何安全 安全 nodejs-      更新时间:2023-09-26

我正在实现我自己的自定义密码重置,它可以发送一封电子邮件,用户可以在其中进入一个页面重置密码。

到目前为止,我已经生成了一个唯一的令牌,它被放在http获取请求链接中,并通过电子邮件发送给用户。

当用户点击链接(例如mywebsite.com/verifypasswordreset?id=96rZyAWLTu)时,

我有一条获得代币的快速路线:

//Verify Password Reset
app.get('/verifypasswordreset', function(req, res) {
    Parse.Cloud.run('verifyPasswordReset', { token: req.param("id") }, {
      success: function(user) {   
          res.sendFile(path.join(__dirname + '/website/resetpassword.html'));
      },
      error: function(error) {
          res.sendFile(path.join(__dirname + '/website/404.html'));
      }
    }); 
});

然后,我运行一个Parse云代码函数,该函数验证令牌是否存在,如果存在,则通过发送包含重置密码表单的html进行响应。(resetpassword.html

在这一点上,resetpassword.html页面的url中仍然嵌入了令牌(mywebsite.com/verifypasswordreset?id=96rZyAWLTu),然而,一旦用户提交表单,它就会发布一个http帖子并发布新密码,将令牌留在链接中,因此我不知道哪个令牌与密码重置相关?

//Reset Password
app.post('/resetpassword', function(req, res) {
    res.send('You sent the password "' + req.body.password + '".');
});

当用户提交表单以更改密码时,如何以某种方式从当前url(mywebsite.com/verifypasswordreset?id=96rZyAWLTu)中获取令牌并将其包含在http post请求中,以便我的node-js应用程序能够读取它并知道哪个令牌与密码重置相关?

或者,他们是一个更好的&追踪代币的更安全方式?

*注意忽略我正在使用http我将在启动前购买SSL证书并使用https。

当您只是发送一个resetpassword.html页面时,我看不出验证令牌有什么意义。但是,当实际更新用户的密码时,必须验证令牌。因此,这里有一个稍微修改过的工作流程:

用户单击链接(例如mywebsite.com/passwordreset?id=96rZyAWLTu)

app.get('/passwordreset', function(req, res) {
      res.sendFile(path.join(__dirname + '/website/resetpassword.html'));
});

您的resetpassword页面的URL仍然嵌入了令牌。现在,用户提交表单,它进行http发布并发布新密码。

app.post('/passwordreset', function(req, res) {
Parse.Cloud.run('verifyPasswordReset', { token: req.param("id") }, {
  success: function(user) {   
           //update user's password here
           res.send('You sent the password "' + req.body.password + '".');
  },
  error: function(error) {
      res.sendFile(path.join(__dirname + '/website/error.html'));
  }
});