首页 > 解决方案 > 检查常用密码的最佳方法?(最佳实践和性能明智)

问题描述


我目前正在一个 **Node.js** 网站上工作/学习,该网站将拥有来自不同国家/地区的用户,在实施用户注册的同时,我想尝试保护自己和用户免受攻击,但到目前为止我所做的似乎有点矫枉过正:

我从以下来源获取密码:https ://www.openwall.com/mirrors/ (全球通用的),获取每种可用语言的较低版本(将它们重新合并到一个文件中)并删除重复的条目。总字数约为。2.8M并导致“超出最大调用堆栈大小

所以显然这似乎不是这样做的方法,我知道它们是可以为我做的中间件/服务,我不想避免它们,我只是不知道哪个是“全球”并且确实不要过多牺牲性能
(有关信息,我目前使用joi进行表单验证)

编辑:由于我的代码被问到这里是主要问题(imo):

let commonPasswords;
    
fs.promises.readFile("static/commonPasswords.txt")
.then((result) => {
commonPasswords = result.toString().split(/\r?\n/);
})
.catch(err => console.log("Error while setting common passwords:", err));

const validateUserRegisteration = (user) => {
  if (commonPasswords.length > 0) {
    const userRegisteration = Joi.object({
      username: Joi.string().min(3).max(20).required(),
      email: Joi.string().email(),
      password: Joi.string().min(8).max(64).not(...commonPasswords),
      confirmPassword: Joi.ref('password')
    });
    return userRegisteration.validate(user);
  } else {
    throw err;
  }
};

EDIT2:我结束了“手动”检查我的密码的顺序(并且只有在之前成功的情况下):

  1. 使用保管箱密码强度包(感谢imvain2
  2. “手动”检查密码是否在我的 commonPasswords 列表中(现在是一组)
  3. 调用 userRegisteration.validate(user)

标签: javascripthtmlnode.jssecuritypasswords

解决方案


推荐阅读