https://github.com/GitHub-Laziji/shield
传统的防范暴力破解的方法是在前端登录页面增加验证码, 虽然能有一定程度效果, 但是用户也跟着遭罪, 验证码越复杂, 用户登录的失败率越高
于是最近我想了一个新的设计, 前端在登录时采用解密的方式获取密钥, 把密钥与表单以前发往后端, 用密钥来代替验证码
具体细节如下
随机字符串
和一个指定范围内的随机数
rstr+MD5(rstr+rint)
MD5(rint+rstr)
randomString = Utils.getUUID();
randomNumber = Utils.randomInt(range);
privateText = randomString + Utils.md5(randomString+randomNumber);
privateKey = Utils.md5(randomNumber+randomString);
let randomString = result.substring(0, 32)
let valueString = result.substring(32)
let answerString
for (let i = 0; i < range; i++) {
let s = crypto.createHash("md5").update(randomString + i).digest('hex')
if (s == valueString) {
answerString = crypto.createHash("md5").update(i + randomString).digest('hex')
break
}
}
经过测试 10000 次内 md5 加密前端用时不超过 300ms, 用户察觉不到, 但是暴力破解的难道确增加了几千倍, 这意味这本来一个小时能破解的网站, 现在可能要一年才能破解
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.