項目中遇到這樣一個場景:
1.有個頁面需要先輸入用戶手機號谒主,然后發(fā)送短信驗證碼;
2.輸入完短信驗證碼后也拜,再彈出一個交易密碼的彈框以舒;
后臺把這兩步分別使用2個接口來校驗信息,第一個接口傳入?yún)?shù) 手機號和短信驗證碼慢哈,校驗成功彈出窗口繼續(xù)輸入交易密碼蔓钟,輸完后調(diào)用接口傳人參數(shù) 交易密碼 校驗交易密碼,校驗成功即可支付了卵贱! 哈哈哈滥沫,真開心,大功告成键俱?
對于上面的操作流程認真分析一下兰绣,有沒有不安全的隱患存在呢?下面簡單說說我個人看法:
1.第一步校驗手機號和短信驗證碼 肯定是沒有疑問编振,這一步校驗目的是保證當前操作人一定是本人(手機丟了這種情況暫時不考慮)缀辩;
2.第二步校驗僅僅傳人校驗密碼,這樣就會留下一個隱患踪央,當有人且本人知道了該用戶的交易密碼直接使用工具(非APP)直接去調(diào)用第二個接口臀玄,那也肯定能夠校驗通過,可能有人會說我報文頭加session機制防止工具直接調(diào)用接口畅蹂;那就不得不考慮到更牛逼點壞人健无,他能夠破解APP,把APP第一步校驗手機號(可以理解為這一步就是用來確定是不是本人操作)注釋掉了液斜,那后面就照樣可以通過了睬涧!或許大家覺得這些情況太極端了,確實我也認為又能夠破解APP又還能搞到你交易密碼這種人極少旗唁。
我的處理方式:
第一種:如果你的手機號和短信驗證碼 還有交易密碼都在同一個頁面,那么后臺就把這2個接口合并成一個接口來同時校驗這三個參數(shù)痹束;
第二種:如果手機號检疫,短信驗證碼 和交易密碼不在同一個頁面,那么還是使用兩個接口去校驗祷嘶,但是第二個接口還必須將手機號 短信驗證碼還有交易密碼都傳入了一起校驗屎媳。
這樣用兩個接口校驗的好處:先校驗短信驗證碼了就可以避免用戶在短信驗證碼頁面輸錯了夺溢,自己還沒發(fā)現(xiàn),繼續(xù)去輸入交易密碼烛谊,輸完了去提交校驗時候才發(fā)現(xiàn)短信驗證碼錯誤了风响,又用返回到上個頁面,這樣從用戶體驗角度考慮并不友好丹禀。
建議使用第二種方式状勤,可擴展性更強一些。
前面說那么牛逼的壞蛋可能很少双泪,那為什么還考慮這么多呢持搜,我是想跟大家講一個后臺接口定義原則:外圍判定只能用作外圍校驗使用,不允許當作內(nèi)部系統(tǒng)判斷標準焙矛。
什么意思葫盼?
可以把后臺之外的都當做外圍系統(tǒng),比方說web前端村斟,APP端等贫导,就剛剛這個場景 校驗手機號和短信驗證碼 就是在判斷是否是本人,如果按我最開始的處理方式蟆盹,我第一步校驗成功了去第二步操作孩灯,僅僅傳人交易密碼其實就是將前端得到的結果,現(xiàn)在操作用戶為本人這個結果直接給后臺日缨,后臺直接使用了這個結果钱反,沒有再去校驗一遍,就出問題啦匣距!可能這里理解起來有點亂面哥,不妨去想想當使用優(yōu)酷APP看視頻,你去看VIP資源的時候毅待,本來APP從登錄后就知道你是不是VIP尚卫,那后臺是不是就不用再校驗你是不是真的VIP呢,就寫這么多吧尸红,慢慢體會吱涉!