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