后端接口拆分導致的問題

項目中遇到這樣一個場景:

1.有個頁面需要先輸入用戶手機號,然后發送短信驗證碼;

2.輸入完短信驗證碼后,再彈出一個交易密碼的彈框;

后臺把這兩步分別使用2個接口來校驗信息,第一個接口傳入參數 手機號和短信驗證碼,校驗成功彈出窗口繼續輸入交易密碼,輸完后調用接口傳人參數 交易密碼 校驗交易密碼,校驗成功即可支付了! 哈哈哈,真開心,大功告成?


對于上面的操作流程認真分析一下,有沒有不安全的隱患存在呢?下面簡單說說我個人看法:

1.第一步校驗手機號和短信驗證碼 肯定是沒有疑問,這一步校驗目的是保證當前操作人一定是本人(手機丟了這種情況暫時不考慮);

2.第二步校驗僅僅傳人校驗密碼,這樣就會留下一個隱患,當有人且本人知道了該用戶的交易密碼直接使用工具(非APP)直接去調用第二個接口,那也肯定能夠校驗通過,可能有人會說我報文頭加session機制防止工具直接調用接口;那就不得不考慮到更牛逼點壞人,他能夠破解APP,把APP第一步校驗手機號(可以理解為這一步就是用來確定是不是本人操作)注釋掉了,那后面就照樣可以通過了!或許大家覺得這些情況太極端了,確實我也認為又能夠破解APP又還能搞到你交易密碼這種人極少。


我的處理方式:

第一種:如果你的手機號和短信驗證碼 還有交易密碼都在同一個頁面,那么后臺就把這2個接口合并成一個接口來同時校驗這三個參數;

第二種:如果手機號,短信驗證碼 和交易密碼不在同一個頁面,那么還是使用兩個接口去校驗,但是第二個接口還必須將手機號 短信驗證碼還有交易密碼都傳入了一起校驗。

這樣用兩個接口校驗的好處:先校驗短信驗證碼了就可以避免用戶在短信驗證碼頁面輸錯了,自己還沒發現,繼續去輸入交易密碼,輸完了去提交校驗時候才發現短信驗證碼錯誤了,又用返回到上個頁面,這樣從用戶體驗角度考慮并不友好。

建議使用第二種方式,可擴展性更強一些。

前面說那么牛逼的壞蛋可能很少,那為什么還考慮這么多呢,我是想跟大家講一個后臺接口定義原則:外圍判定只能用作外圍校驗使用,不允許當作內部系統判斷標準。

什么意思?

可以把后臺之外的都當做外圍系統,比方說web前端,APP端等,就剛剛這個場景 校驗手機號和短信驗證碼 就是在判斷是否是本人,如果按我最開始的處理方式,我第一步校驗成功了去第二步操作,僅僅傳人交易密碼其實就是將前端得到的結果,現在操作用戶為本人這個結果直接給后臺,后臺直接使用了這個結果,沒有再去校驗一遍,就出問題啦!可能這里理解起來有點亂,不妨去想想當使用優酷APP看視頻,你去看VIP資源的時候,本來APP從登錄后就知道你是不是VIP,那后臺是不是就不用再校驗你是不是真的VIP呢,就寫這么多吧,慢慢體會!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,242評論 25 708
  • 1.背景 互聯網金融平臺賬戶進行開戶或者支付業務時,綁卡鑒權環節是必經之路。那么什么是綁卡鑒權?綁卡是將用戶銀行卡...
    蕭竹閱讀 14,109評論 0 28
  • 發現 關注 消息 iOS 第三方庫、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,229評論 4 61
  • 早上因一個電話影響一天的心情,當你拿著求回來的附身符送給我,內心??很感動,每次你都是那么細心的給予關心!但是因為...
    Mary妹善閱讀 197評論 0 0
  • 可惜的是你沒有聽我的勸言,沒有學到我身上的某些優點,我不是讓你完美,我是讓你更加讓你自己更加強大,作為兄弟,這也許...
    赤寧閱讀 230評論 0 0