api-gateway实践(03)新服务网关 - 网关请求拦截检查
參考鏈接:http://www.cnblogs.com/jivi/archive/2013/03/10/2952829.html
一、為什么要攔截檢查請(qǐng)求?
防止重放攻擊、篡改重放,進(jìn)行使用規(guī)格檢查
1、請(qǐng)求可能是重放攻擊
重放攻擊的基本原理就是把以前竊聽到的數(shù)據(jù)原封不動(dòng)地重新發(fā)送給接收方。很多時(shí)候,網(wǎng)絡(luò)上傳輸?shù)臄?shù)據(jù)是加密過的,此時(shí)竊聽者無法得到數(shù)據(jù)的準(zhǔn)確意義。但如果他知道這些數(shù)據(jù)的作用,就可以在不知道數(shù)據(jù)內(nèi)容的情況下通過再次發(fā)送這些數(shù)據(jù)達(dá)到愚弄接收端的目的。
例如,有的系統(tǒng)會(huì)將鑒別信息進(jìn)行簡單加密后進(jìn)行傳輸,這時(shí)攻擊者雖然無法竊聽密碼,但他們卻可以首先截取加密后的口令然后將其重放,從而利用這種方式進(jìn)行有效的攻擊。
再比如,假設(shè)網(wǎng)上存款系統(tǒng)中,一條消息表示用戶支取了一筆存款,攻擊者完全可以多次發(fā)送這條消息而偷竊存款。
2、請(qǐng)求可能是篡改重放
網(wǎng)上有一些工具,如:IEC、fiddler,可以攔截IE表單請(qǐng)求,篡改請(qǐng)求報(bào)文數(shù)據(jù)后再提交給服務(wù)器。
- 實(shí)現(xiàn)攔截請(qǐng)求,篡改數(shù)據(jù)功能的方法有很多,如使用WINPCAP,直接從網(wǎng)卡截包然后篡改,或者HOOK住SEND函數(shù),或者其它相關(guān)的網(wǎng)絡(luò)API。
- 使用WINPCAP實(shí)現(xiàn)這個(gè)功能,有點(diǎn)牛刀殺雞了,而使用HOOK技術(shù),又不是太安全,基本上帶主動(dòng)防御,智能行為分析的殺軟,HOOK用到的幾個(gè)函數(shù)都是被嚴(yán)密監(jiān)控的。
- 我們還可以采用--代理攔截技術(shù),看到代理兩個(gè)字,稍稍有點(diǎn)計(jì)算機(jī)知識(shí)的人,第一時(shí)間反應(yīng)的詞語應(yīng)該都是代理服務(wù)器,是的,代理攔截技術(shù),正是基于代理服務(wù)器技術(shù)實(shí)現(xiàn)的。
一般的請(qǐng)求發(fā)送模式:
?
加入代理服務(wù)器后:
使用代理服務(wù)器后,所有的HTTP請(qǐng)求,都是先發(fā)到代理服務(wù)器,然后由代理服務(wù)器重新包裝后,再發(fā)給目標(biāo)(實(shí)際)服務(wù)器,響應(yīng)也是如此,
代理服務(wù)器先接收來自目標(biāo)(實(shí)際)服務(wù)器的響應(yīng),然后包裝后發(fā)給客戶機(jī)。
所以,實(shí)現(xiàn)一個(gè)代理服務(wù)器,就可以攔截請(qǐng)求,篡改數(shù)據(jù)了。?
如何實(shí)現(xiàn)一個(gè)代理服務(wù)器,參見:http://www.cnblogs.com/jivi/archive/2013/03/10/2952829.html
3、需要對(duì)客戶請(qǐng)求進(jìn)行使用規(guī)格限制
? ? ? ?同時(shí)在線請(qǐng)求控制
? ? ? ?時(shí)段訪問總量控制
? ? ? ? 。。。
二、網(wǎng)關(guān)控制
1、請(qǐng)求防攻擊,默認(rèn)關(guān)閉?
? ? ? ?timestamp檢查 & nonce檢查
1.1、timestamp檢查
?
1.2、nonce檢查
?
2、請(qǐng)求防篡改,簽名比對(duì)
為了對(duì)識(shí)別有效的客戶端,我們可以對(duì)請(qǐng)求進(jìn)行防篡改檢查,具體的做法就是客戶端對(duì)請(qǐng)求進(jìn)行簽名發(fā)送,服務(wù)端進(jìn)行簽名比對(duì)。
合法的客戶端是屬于某個(gè)開發(fā)者的,這個(gè)開發(fā)者申請(qǐng)使用某個(gè)api獲得服務(wù)提供者同意后,可以通過注冊(cè)中心綁定一對(duì)前端訪問密鑰,這對(duì)密鑰包括一個(gè)key和一個(gè)secret,開發(fā)者的客戶端使用secret對(duì)要發(fā)送的請(qǐng)求進(jìn)行簽名后,在請(qǐng)求中攜帶key和簽名,發(fā)送請(qǐng)求給網(wǎng)關(guān)。
網(wǎng)關(guān)會(huì)根據(jù)請(qǐng)求中攜帶的key在注冊(cè)中心找到對(duì)應(yīng)的secret,重新對(duì)請(qǐng)求進(jìn)行簽名,和請(qǐng)求中攜帶的簽名進(jìn)行比對(duì),一致則放行,不一致則認(rèn)為這個(gè)請(qǐng)求是被篡改過的。
2.1、客戶端簽名過程
以下是請(qǐng)求簽名Sign類中定義的網(wǎng)關(guān)側(cè)請(qǐng)求頭
2.2、簽名算法
?
- String secret:簽名密鑰DevClientSecret
- String uri:服務(wù)端用request.getUri()返回的內(nèi)容, 不帶參數(shù)
- String httpMethod:POST/GET/DELETE/PUT
- Map<String, String> headersToSign:要參與簽名的頭key列表,用英文逗號(hào)隔開
- Map<String, Object> paramsMap:如果是Get,所有參數(shù)列表,如果是post,url后面跟的參數(shù)列表
- byte[] inputStreamBytes:如果是post-bytes和put-bytes,就是body體的bytes;如果是post-form,字典序的參數(shù)列表串.getBytes()
2.3、簽名例子
3、請(qǐng)求使用規(guī)格檢查,默認(rèn)關(guān)閉,如果none認(rèn)證,也關(guān)閉
3.1、同時(shí)在線請(qǐng)求控制
3.2、時(shí)段訪問總量控制
三、補(bǔ)充說明
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的api-gateway实践(03)新服务网关 - 网关请求拦截检查的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JSP中使用iframe导致内层网页CS
- 下一篇: 大作业报告