普通網站防暴力破解的新設計

前端防暴力破解的一個設計

Demo 地址

https://github.com/GitHub-Laz...前端

描述

傳統的防範暴力破解的方法是在前端登陸頁面增長驗證碼, 雖然能有必定程度效果, 可是用戶也跟着遭罪, 驗證碼越複雜, 用戶登陸的失敗率越高git

因而最近我想了一個新的設計, 前端在登陸時採用解密的方式獲取密鑰, 把密鑰與表單之前發日後端, 用密鑰來代替驗證碼github

具體細節以下後端

設計

  • 用戶在登陸頁面輸完用戶名密碼, 點擊登陸
  • js 向後端請求密文
  • 後端生成一個隨機字符串和一個指定範圍內的隨機數
  • 正向拼接 隨機字符串 和 隨機字符串隨機數的加密 獲得密文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, 用戶察覺不到, 可是暴力破解的難道確增長了幾千倍, 這意味這原本一個小時能破解的網站, 如今可能要一年才能破解dom

優點

  • 整個流程對後端帶來的壓力幾乎爲0
  • 用戶無需輸入驗證碼
  • 前端延時極小(對人來講)
  • 對暴力破解影響極大
  • 只需添加部分代碼, 無需更改現有的代碼
  • 條件可控, 隨機數的範圍徹底由後端決定
歡迎關注個人博客公衆號
圖片描述
相關文章
相關標籤/搜索