關於無效驗證碼
驗證碼作用更多是防止隨意的機器,目的是給機器造成麻煩,但是我也見過很多項目的驗證碼是沒有任何效果的,這裏說的無效驗證碼包括圖形驗證碼和短信驗證碼。
為什麽說是無效的,不是因為驗證碼的圖形做的太簡單很容易圖形識別,這種不算無效的。
下面舉例子無效的驗證碼,
圖形驗證碼,點擊獲取驗證碼變圖形,點擊後,服務端把真正的圖形驗證碼對應的文字返回給前端(web或者安卓或者ios),然後你在輸入框輸入驗證碼,前端(web或者安卓或者ios)在本地判斷,web的就是指js判斷了,(同理安卓 ios的也是判斷輸入框的值等不等於某個值),如果你填寫的值與服務端返回的驗證碼不相等,在點擊提交時候,前端(web或者安卓或者ios)提示你的驗證碼輸入有誤,進而不請求提交信息的接口。這種在普通測試人員裏面看起來似乎沒毛病,普通測試人員會用等價類,填不正確和正確的驗證碼進行測試,當然發現不了什麽大問題。但是我們換個思路,直接請求提交信息的接口,可以看到驗證碼並沒有同其他參數一起post到服務端,那這就很好辦了,在web ios 安卓裏面操作,你不填寫正確的驗證碼,他會提示你驗證碼錯誤然後不請求提交信息的接口,但你也可以不用這些前端,用requests直接請求接口,那麽這就是要說的無效驗證碼了。
短信驗證碼也有無效的情況,原理和這個差不多,也是前端(包括web ios 安卓)請求了服務端短信驗證碼接口,然後服務端把驗證碼返回給前端了,並且服務端去用手機號碼和驗證碼調用短信平臺,前端在你提交信息時候先判斷你填寫的驗證碼是不是正確的,如果正確了再請求提交信息的接口。這種也可以直接用requests解決,當然如果你不會requests,你也可以用抓包工具如f12 fiddler抓包服務端返回給前端(包括web ios 安卓)的驗證碼,這樣即使你沒有別人的手機卡收不到短信,你也可以輕松獲得任何手機號碼的驗證碼,然後把抓包得到的驗證碼填在輸入框,提交信息時候就不會提示你驗證碼有誤了。試想這種地方如果是在短信找回密碼的地方,會有多麽嚴重的後果。
短信驗證碼接口做的太簡單的不行,所有短信驗證碼的地方前面應該加入一個圖形驗證碼。萬一有人惡意請求接口,短信平臺的費用刷刷的沒了,這不是危言聳聽,是我自己見過並且實踐過的,一個很少人用的項目,不到一天2000元短信費用居然耗盡了。
所以,各位要註意了,很多沒很多經驗的開發團隊,過分的依賴前端處理信息,造出這種項目是很不好的,這種驗證碼的目的已經是倒行逆施了,驗證碼的目的變成了防人不防機器了。
本來是要舉實際例子,把真實的地址貼出來,但考慮一下這樣還是不好。
關於無效驗證碼