小小驗證碼,作用可真不小!
我們在開發用戶登錄功能的時候,總是會被要求加一個驗證碼的功能!那么,為什么要加這個驗證碼?驗證碼有什么作用?常見的驗證碼有哪些?
驗證碼就是為了增強網站的安全性,防止機器暴力破解。驗證碼一般都會設置為歪歪扭扭的圖片,這樣做的目的也是為了增加機器識別的難度。
機器一般會通過枚舉法進行匹配驗證碼,枚舉法是利用計算機運算速度快、精確度高的特點,對要解決問題的所有可能情況,一個不漏地進行檢驗,從中找出符合要求的答案,因此枚舉法是通過犧牲時間來換取答案的全面性。
為了防止機器暴力破解,驗證碼一般會有一個過期時間,并且每個驗證碼只能被使用一次。
設置驗證碼有效時長:
- redisService.setCacheObject(verifyKey, verifyCode, Constants.CAPTCHA_EXPIRATION, TimeUnit.MINUTES);
每次使用驗證碼后刪除redis:
- private void checkCode(String code, String uuid) throws ValidateCodeException {
- if (StringUtils.isEmpty(code)) {
- throw new ValidateCodeException("圖片驗證碼不能為空");
- }
- if (StringUtils.isEmpty(uuid)) {
- throw new ValidateCodeException("圖片驗證碼已失效");
- }
- String verifyKey = Constants.CAPTCHA_CODE_KEY + uuid;
- String captcha = redisService.getCacheObject(verifyKey);
- redisService.deleteObject(verifyKey);
- }
IE瀏覽器下使用GET發送請求時,如果兩次請求的地址和參數相同,在不刷新頁面的情況下,瀏覽器會緩存第一次請求的內容,服務端更新后瀏覽器仍然顯示第一次的內容。這也就是為什么我們總會看到驗證碼請求地址上會增加一個隨機數的原因。
- https://ip:port?getCode?random = new Date().getTime();
常見的驗證碼:
- 四位數字,隨機的數字字符串,最原始的驗證碼,驗證作用幾乎為零。
- 隨機數字+字母及干擾像素的圖片。
- 滑動拼圖(這種方式完全是由前端完成的)。
本文轉載自微信公眾號「Java旅途」,可以通過以下二維碼關注。轉載本文請聯系Java旅途公眾號。