那我們要如何對接口請求進行一個安全校驗或者攔截非法請求吶?
1圈浇、選擇攔截過濾器寥掐。
在請求的時候?qū)φ埱蠓椒ㄟM行一次攔截處理靴寂。比如非正常訪問的方法已經(jīng)注入插入可執(zhí)行語句參數(shù)驗證等在攔截中進行一次安全校驗保證
請求不是非法請求。
2召耘、數(shù)據(jù)加密百炬。我們知道目前大部分APP接口都是通過Http協(xié)議進行調(diào)用的容易被抓包攔截。
我們可以對客戶端和服務(wù)端都對數(shù)據(jù)傳輸?shù)臅r候進行一個加密處理污它。常用的MD5 AES等剖踊。
譬如:上一個項目做法比較簡單 對用戶與帳號密碼進行加密作為一個authcode。每次請求必須攜帶衫贬。這個方法與下邊說的方法3組合運用
客戶端:
1德澈、設(shè)置一個key(和服務(wù)器端相同)
2、根據(jù)上述key對請求進行某種加密(加密必須是可逆的固惯,以便服務(wù)器端解密)
3梆造、發(fā)送請求給服務(wù)器
服務(wù)器端:
1、設(shè)置一個key
2葬毫、根據(jù)上述的key對請求進行解密(校驗成功就是「信任」的客戶端發(fā)來的數(shù)據(jù)澳窑,否則拒絕響應(yīng))
3、處理業(yè)務(wù)邏輯并產(chǎn)生結(jié)果
4供常、將結(jié)果反饋給客戶端
3、簽名
根據(jù)用戶名或者用戶id鸡捐,結(jié)合用戶的ip或者設(shè)備號栈暇,生成一個token。在請求后臺箍镜,后臺獲取http的head中的token源祈,校驗是否合法(和數(shù)據(jù)庫或者Redis中記錄的是否一致,在登錄或者初始化的時候色迂,存入數(shù)據(jù)庫/redis)
在使用Base64方式的編碼后香缺,Token字符串還是有20多位,有的時候還是嫌它長了歇僧。由于GUID本身就有128bit图张,在要求有良好的可讀性的前提下,很難進一步改進了诈悍。那我們?nèi)绾萎a(chǎn)生更短的字符串呢祸轮?還有一種方式就是較少Token的長度,不用GUID侥钳,而采用一定長度的隨機數(shù)适袜,例如64bit,再用Base64編碼表示:
var rnd = new Random();
var tokenData = userIp+userId;
rnd.NextBytes(tokenData);
var token = Convert.ToBase64String(tokenData).TrimEnd('=');
由于這里只用了64bit舷夺,此時得到的字符串為Onh0h95n7nw的形式苦酱,長度要短一半售貌。這樣就方便攜帶多了。但是這種方式是沒有唯一性保證的疫萤。不過用來作為身份認證的方式還是可以的(如網(wǎng)盤的提取碼)颂跨。
4、使用第三方框架與技術(shù)整合支持比如spring的框架中的oauth模塊给僵。