javascript - 检查常用密码的最佳方法?(最佳实践和性能明智)
问题描述
我目前正在一个 **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:我结束了“手动”检查我的密码的顺序(并且只有在之前成功的情况下):
解决方案
推荐阅读
- php - 在php中检查字符串中的单词数组
- python - 如何获取应用天蓝色表存储查询的不同值?
- apache-kafka - 想要一些如何使用kafkaUser的实际例子
- java - 如何在 java 类中获取每个字段及其子项的字符串表示形式?
- tabulator - 制表符 - 在 fitColumns 布局模式下保持列最小大小以适合数据
- python-3.x - 发现样本数量不一致的输入变量:[889, 418]
- java - 为什么Java(JAMA/math3)和Matlab/Python计算的特征值不一样?
- android - 无法从 WhatsApp 通知中获取图像
- java - Wildfly - 无法获得大于 256 的最大连接数
- amazon-web-services - 后端服务器的可信 SSL 证书