新浪微博登錄時,只有輸對密碼後才需要輸入驗證碼,是不是不好的設計?

登錄新浪微博時,輸入完密碼後,就可以直接點「登錄」了,不需要驗證碼;只有輸對了密碼,才會被要求輸入驗證碼;而輸錯了密碼,再繼續輸入密碼登錄,卻不需要驗證碼。

從防止 robot 破解密碼的角度來看,我的疑問如下:

(1) 輸對了密碼,此時再輸入驗證碼,意義何在?此時,攻擊者可以手輸入驗證碼,然後就可以登錄了吧?

(2) 輸錯了密碼,再次輸入密碼登錄,仍然不需要驗碼。如何防止 robot 反覆重試?

測試環境:

Fedora 15 下 Chrome 16.0.912.63 和 Firefox 12.0


這種情況下的驗證碼是為了避免機器登錄,也就是避免你為自動程序註冊帳號,以後讓自動程序去做一些事。

至於暴力破解密碼,這個不管有沒有驗證碼,情形都是相同的,並沒有引入新的漏洞。


列位,在那裡設置驗證碼的意義不在於安全方面。而是在於伺服器性能的利用方面。

如果按照之前的設定方法,每刷新一次頁面,伺服器從接到請求開始,就需要為這個請求配置一個驗證碼。

做過網站驗證碼的人都知道。驗證碼的生成過程是:

  1. 由伺服器先生成一組隨機字元串;

  2. 由字元串生成一個臨時圖片,jpg或者png格式,大小為1Kb上下;
  3. 再經過網路,將字元串傳給用戶;

即便是圖片大小僅有1Kb左右,但如果是大量生成,也會對伺服器的性能造成很大的影響。

設想,如果有人利用殭屍網路大量、頻繁地刷新驗證碼,那麼肯定會影響伺服器的正常功能。但如果先驗證用戶身份,再發出驗證碼請求,那麼至少伺服器知道是哪個用戶在搗亂,這樣屏蔽掉這個用戶,就達到了防止刷驗證碼的惡意操作了。


不符合人性,根本就是要改掉,沒得說


具體原因 @鄭維 已經介紹得比較充分了,針對問題中的「不好的設計」說一點個人見解。

設計更多的是權衡的結果,每一項成果都是多個環節多次角力後的綜合產出。

單純看驗證碼的話,的確是一項不好的設計,但這種不好的設計能換取另外一些好的特性,而代價是使用時的一些不便,那麼在沒有更好方案出現之前,這種設計就是合理的。

《設計的法則》[1]一書中提到一個詞,「滿足即可」。[2]

滿足主義者尋找到一個能使用的方法時,就不再繼續努力;

完美主義者必須尋遍所有可能後,再決定使用哪種方法。

現實中的設計,通常要在兩個極端之中選一個合適的度,不過多投入,但也不過少推敲。

參考:

[1]:《設計的法則》(大陸版100條),作者William Lidwell Kritina Holden Jill Butler,李嬋 譯

[2]:《人類的模型(Models of Man)》,作者Herbert A.Simon


推薦閱讀:

Python爬蟲學習過程中碰到了難以解決的問題該怎麼做?
驗證碼有什麼作用?
為什麼現在非reCaptcha的驗證碼也越來越瘋狂了?
網頁爬蟲遇到難以通過圖像識別繞過的驗證碼時,獲取整個驗證碼庫,人工標註答案,再進行圖像比對,是否可行?
簡訊驗證碼平台哪家速度快又穩定,推薦下?

TAG:新浪微博 | 驗證碼 | 密碼 |