更新時間:2018-11-30 來源:黑馬程序員 瀏覽量:
請求合法性校驗指的就是指怎么樣去避免API被非法的調(diào)用,例如在系統(tǒng)里面有一個短信接口,就應(yīng)該要去考慮到怎樣避免這個短信接口不被短信轟炸機濫用,可以采用的方式有下面幾種:
1. 驗證碼,驗證碼目的是用于防范惡意注冊、惡意破解密碼、惡意灌水等非法操作,驗證碼可以使用Google的CAPTCHA解決方案。
2. Token令牌,Token主要用于自動登錄,也就是在不需要用戶頻繁登錄的情況下保證訪問的合法性。常見的流程是使用用戶名和密碼登陸后,服務(wù)端返回一個token,后續(xù)客戶端每次方法都帶上這個token,當(dāng)這個token超過一定的時間(token有效期)沒有被使用,則要求客戶端重新輸入用戶名和密碼重新獲取token,服務(wù)端也通過請求的IP地址等一些信息判斷客戶端的網(wǎng)絡(luò)環(huán)境和設(shè)備環(huán)境是否發(fā)生變化,如果發(fā)生變化,也要求客戶端重新輸入用戶名和密碼,重新獲取token。
3. IP、MAC地址限制,只允許某一個MAC地址、IP或IP段的客戶端進(jìn)行訪問請求,只能一定程度上起到防范作用。
4. User-Agent和Referer限制,只能一定程度上起到防范作用。
數(shù)據(jù)合法性校驗:
數(shù)據(jù)合法性的校驗主要是為了避免異常數(shù)據(jù)和注入攻擊。
1. 不依賴客戶端的數(shù)據(jù)校驗,不管客戶端有沒有進(jìn)行數(shù)據(jù)校驗,服務(wù)端都要做合法性校驗。
2. 用白名單的方式驗證數(shù)據(jù)合法性,也就是根據(jù)一系列已知的正確值或規(guī)則來驗證請求數(shù)據(jù),不嘗試檢驗?zāi)承┨囟ǖ腻e誤。
數(shù)據(jù)加密:
數(shù)據(jù)加密主要是指對敏感數(shù)據(jù)進(jìn)行加密,避免因網(wǎng)絡(luò)傳輸過程中的竊聽和抓包造成敏感數(shù)據(jù)泄露,常見方法主要由:
1. 使用HTTPS協(xié)議。
2. 對敏感數(shù)據(jù)采用秘鑰進(jìn)行加密和解密。
接口錯誤處理:
接口錯誤處理主要是值對接口的返回結(jié)果進(jìn)行編碼,制定統(tǒng)一的錯誤返回編碼,避免因接口錯誤和異常等原因造成堆棧信息泄露。
接口過載保護(hù):
接口過載保護(hù)是指對接口訪問頻率設(shè)置閾值,超出閾值后不予處理,直接返回錯誤碼,可以一定程度上防止CC攻擊,過載保護(hù)可以通過Web服務(wù)器進(jìn)行控制,也可以通過代碼進(jìn)行控制。
1. Nginx可以通過HttpLimitReqModul來限制單位時間內(nèi)連接數(shù)的模塊,使用
limit_req_zone和limit_req指令配合使用來達(dá)到限制。 一旦并發(fā)連接超過指定數(shù)量
,就會返回503錯誤。HttpLimitConnModul用來限制單個ip的并發(fā)連接數(shù),使用
limit_zone和limit_conn指令這兩個模塊的區(qū)別前一個是對一段時間內(nèi)的連接數(shù)限制
,后者是對同一時刻的連接數(shù)限制。
2. 可以通過代碼的方式來判斷,最好基于Redis計數(shù)器或者服務(wù)端緩存,避免對性能造成影響。
作者:黑馬程序員軟件測試培訓(xùn)學(xué)院
首發(fā):http://test.itheima.com/