如何创建安全的express.js + mongodb用户身份验证系统

时间:2014-03-04 18:15:17

标签: node.js session express

目前我处于以下情况: 我使用以下技术创建了用户身份验证系统:
expressjs(使用会话和cookie)
mysql(保留用户名和密码)
用于持久会话存储的mongodb

目的是创建一个将用户ID存储在cookie中的系统,并根据允许访问权限进行访问。

第一个问题。如果我正确理解会话是如何工作的,那么每次用户访问我的网站(登录或不登录)时,她/他将使用快速会话机制创建新的会话ID,该机制将存储在req.sessionID中。

现在的问题。在登录页面上:
用户输入用户名/密码 我向mysql服务器发出请求,确认用户名/密码。现在,从我在网上找到的例子中,做一个简单的用户身份验证的解决方案就是做这样的事情:
req.session.user =用户名
然后检查是否设置了req.session.user,并基于允许访问用户等。 但是,对于我的网站,用户的用户名是用户的电子邮件。以纯文本格式存储用户的详细信息是否安全?即使是出于身份验证目的,是否可以安全使用?

还有哪些其他选择?我可以在使用bcrypt存储到数据库之前加密用户名,并使用它吗?

提前致谢。

A

1 个答案:

答案 0 :(得分:0)

  1. 将会话cookie选项设置为httpOnly并将足够长的字符串传递给secret。
  2. 您的req对象不仅包含sessionID属性,还包含会话对象。此对象存储在Mongo(或您传递给快递的任何会话存储)中,并且它的内容不适用于您的客户端。因此,您可以安全地存储您想要的任何信息。
  3. 在幕后快速检查会话密钥(客户端可用的会话的唯一部分,您可以证明Chrome devtools的此检查资源选项卡)与当前会话匹配。如果有人试图伪造会话密钥,Express会注意到这一点。实际上,Express使用Connect中间件,因此您可能希望浏览此更多详细信息http://www.senchalabs.org/connect/session.html