在「“Invalid Username or Password”: a useless security measure」這篇文章裡談到了使用者登入錯誤時的提示訊息。
通常為了安全考量,「沒有這個帳號」與「密碼錯誤」,我們會給出一樣的錯誤訊息,避免攻擊者可以猜測。像是 Amazon 的畫面:
這樣設計的前提是讓攻擊者不知道這個帳號是不是存在 (如果不存在的話就換其他帳號繼續攻擊)。但這個假設通常是錯的,因為大多數的系統一個 e-mail 綁定一個帳號,所以註冊時就可以分辨:
因此應該提供正確的訊息,而非將資訊隱蔽起來。
這邊的主因會是...你無法從一個打點就可以收集到全部的資訊...而你的解法會變成我只要寫機器人來登入時就可以得知兩個或是N個資訊,類似
1.無此帳號
2.密碼錯誤
而登入並不像註冊,需要輸入很多欄位,甚至加入類似captcha之類的阻擋手法(註冊你願意填captcha但登入時填captcha你會很不爽),所以就會變成一個脆弱的測試點,量一多就可以收集出站內的mail和密碼偵測之類的