我正在使用Express和React构建一个node.js Web应用程序,并且想知道是否有必要按如下所示验证使用bcrypt加密的密码:
bcrypt.genSalt(10, (err, salt) => {
bcrypt.hash(newUser.password, salt, (err, hash) => {
if (err) {throw err;}
newUser.password = hash;
newUser
.save()
.then(user => res.json(user))
.catch(err => console.log(err));
});
});
我正在使用此正则表达式在客户端验证密码:
(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}
据我了解,客户端验证还不够,因为攻击者可以使用其他方法进行注入。因此,我是否也需要验证密码服务器端?如果是这样,我应该验证加密的密码吗?还是应该在加密之前使用上述正则表达式再次验证密码?预先感谢。
答案 0 :(得分:1)
为了保护用户的安全,必须加密密码。使用bcrypt时,实际上是在数据库中存储密码的哈希。
比方说,一个用户想要登录。用户名:me密码:mypassword1。
如果用户将其放在登录页面中,并且您没有针对数据库中存储的哈希值验证用户密码的哈希值,则任何用户都可以输入任何密码,并获得该用户的授权。 / p>
如果您担心XSS注入;遵循基本的经验法则-不要信任客户。因此,在将所有输入传递到服务器之前,请始终对所有输入进行验证。服务器(或API)也应对此进行验证,以防万一恶意用户绕过您的客户端,并使用curl,postman或用于发出HTTP请求的任何其他工具击中您的端点。