絡(luò)中惡意攻擊的這一特點,服務(wù)器對單個訪問端在一定時間段內(nèi)的訪問次數(shù)進(jìn)行統(tǒng)計,該一定時間段為預(yù)設(shè)統(tǒng)計時間。
[0052]在一實施例中,如圖2所示,所述統(tǒng)計訪問端在預(yù)設(shè)統(tǒng)計時間內(nèi)對接口服務(wù)的訪問次數(shù),包括如下步驟S112-S116。
[0053]在步驟S112中,當(dāng)訪問端訪問接口服務(wù)時,判斷當(dāng)前時間與統(tǒng)計的起始時間的時間間隔是否超過預(yù)設(shè)統(tǒng)計時間。
[0054]在步驟S114中,當(dāng)時間間隔沒有超過預(yù)設(shè)統(tǒng)計時間時,將訪問端對接口服務(wù)的訪問次數(shù)進(jìn)行計數(shù)。
[0055]在步驟S116中,當(dāng)時間間隔超過預(yù)設(shè)統(tǒng)計時間時,更新統(tǒng)計的起始時間為當(dāng)前時間,將訪問端對接口服務(wù)的訪問次數(shù)重新進(jìn)行計數(shù)。
[0056]舉例而言,采用變量LastStatisticTme來記錄本次統(tǒng)計的起始時間,采用變量AccessTimesPerIntervaI對訪問端在預(yù)設(shè)統(tǒng)計時間內(nèi)對接口服務(wù)的訪問次數(shù)進(jìn)行計數(shù)。當(dāng)檢測到訪問端訪問接口服務(wù)時,將當(dāng)前時間與變量LastStatisticTme中記錄的本次統(tǒng)計的起始時間相減,所得差值為當(dāng)前時間與本次統(tǒng)計的起始時間的時間間隔。判斷該時間間隔是否超過預(yù)設(shè)統(tǒng)計時間(例如,預(yù)設(shè)統(tǒng)計時間為I分鐘)。如果該時間間隔沒有超過預(yù)設(shè)統(tǒng)計時間,則將變量AccessTimesPerInterval中數(shù)值加I。如果該時間間隔超過預(yù)設(shè)統(tǒng)計時間,則將變量AccessTimesPerInterval中數(shù)值存儲到全局變量Times中,然后將變量AccessTimesPerInterval中數(shù)值置為0,并將變量LastStatisticTme中時間更新為當(dāng)前時間。如此,通過變量LastStatisticTme和變量AccessTimesPerInterval完成對訪問端在預(yù)設(shè)統(tǒng)計時間內(nèi)對接口服務(wù)的訪問次數(shù)的統(tǒng)計。上述變量LastStatisticTme和變量AccessTimesPerInterval針對訪問端ID進(jìn)行創(chuàng)設(shè),即訪問端具有對應(yīng)的變量LastStatisticTme和變量AccessTimesPerlnterval,用于針對該訪問端,進(jìn)行預(yù)設(shè)統(tǒng)計時間內(nèi)對接口服務(wù)的訪問次數(shù)的統(tǒng)計。
[0057]在一實施例中,所述方法還包括:在統(tǒng)計訪問端在預(yù)設(shè)統(tǒng)計時間內(nèi)對接口服務(wù)的訪問次數(shù)前,判斷是否已存儲對應(yīng)于接口服務(wù)和訪問端的結(jié)構(gòu)體,該結(jié)構(gòu)體包括記錄訪問端在預(yù)設(shè)統(tǒng)計時間內(nèi)對接口服務(wù)的訪問次數(shù)的變量;當(dāng)沒有存儲對應(yīng)于接口服務(wù)和訪問端的結(jié)構(gòu)體時,創(chuàng)建對應(yīng)于接口服務(wù)和訪問端的結(jié)構(gòu)體,將結(jié)構(gòu)體中變量進(jìn)行初始化,并存儲結(jié)構(gòu)體。
[0058]其中,判斷是否已存儲對應(yīng)于接口服務(wù)和訪問端的結(jié)構(gòu)體,具體包括:根據(jù)接口服務(wù)和訪問端確定關(guān)健值key ;判斷內(nèi)存中是否已存儲對應(yīng)于關(guān)健值key的結(jié)構(gòu)體。
[0059]進(jìn)一步地,所述統(tǒng)計訪問端在預(yù)設(shè)統(tǒng)計時間內(nèi)對接口服務(wù)的訪問次數(shù),包括:使用結(jié)構(gòu)體中變量對訪問端在預(yù)設(shè)統(tǒng)計時間內(nèi)對接口服務(wù)的訪問次數(shù)進(jìn)行統(tǒng)計。
[0060]舉例而言,針對接口服務(wù)和訪問端創(chuàng)建結(jié)構(gòu)體LimitValue,結(jié)構(gòu)體LimitValue中可包括用于記錄訪問端在預(yù)設(shè)統(tǒng)計時間內(nèi)對接口服務(wù)的訪問次數(shù)的變量AccessTimesPerlnterval,此外,結(jié)構(gòu)體LimitValue中還可包括:用于記錄本次統(tǒng)計的起始時間的變量LastStatisticTme,用于記錄對訪問端的訪問開始統(tǒng)計的時間的變量StartTime,以及用于記錄訪問端訪問總次數(shù)的變量SumAccessTimes。采用鍵值對(key-value)的方式,對應(yīng)于接口服務(wù)和訪問端存儲結(jié)構(gòu)體LimitValue。例如,根據(jù)接口服務(wù)和訪問端ID生成關(guān)鍵值key (例如,以訪問端IP為訪問端ID,根據(jù)接口服務(wù)service和訪問端IP生成key),或根據(jù)接口服務(wù)service和接口秘鑰appkey生成關(guān)鍵值key,對應(yīng)關(guān)鍵值key存儲結(jié)構(gòu)體LimitValue。在統(tǒng)計訪問端在預(yù)設(shè)統(tǒng)計時間內(nèi)對接口服務(wù)的訪問次數(shù)前,根據(jù)接口服務(wù)和訪問端生成key,查找key對應(yīng)的value,如果value不為空,則說明已經(jīng)存儲針對接口服務(wù)和訪問端的結(jié)構(gòu)體LimitValue。如果value為空,則倉ll建對應(yīng)于接口服務(wù)和訪問端的結(jié)構(gòu)體LimitValue,對應(yīng)key存儲結(jié)構(gòu)體LimitValue。
[0061]然后,使用結(jié)構(gòu)體LimitValue中變量對訪問端的訪問次數(shù)進(jìn)行統(tǒng)計。在第一次統(tǒng)計訪問端的訪問時,將變量StartT ime的值置為當(dāng)前時間,將變量LastStat isti cTme的值置為當(dāng)前時間,將變量AccessTimesPerlnterval和變量SumAccessTimes中數(shù)值分別置為I。之后,在每次檢測到訪問端訪問時,將當(dāng)前時間與變量LastStatisticTme中記錄的本次統(tǒng)計的起始時間相減,所得差值為當(dāng)前時間與本次統(tǒng)計的起始時間的時間間隔。判斷該時間間隔是否超過預(yù)設(shè)統(tǒng)計時間,如果該時間間隔沒有超過預(yù)設(shè)統(tǒng)計時間,則將變量AccessTimesPerlnterval中數(shù)值加1,將變量SumAccessTimes中數(shù)值加I ;如果該時間間隔超過預(yù)設(shè)統(tǒng)計時間,則將變量SumAccessTimes中數(shù)值加1,將變量AccessTimesPerlnterval中數(shù)值存儲到全局變量Times中,然后將變量AccessTimesPerlnterval中數(shù)值置為0,并將變量LastStatisticTme中時間更新為當(dāng)前時間。如此,不但通過變量LastStatisticTme和變量AccessTimesPerlnterval完成對訪問端在預(yù)設(shè)統(tǒng)計時間內(nèi)對接口服務(wù)的訪問次數(shù)的統(tǒng)計;而且對訪問端對接口服務(wù)的訪問的總次數(shù)和起始時間進(jìn)行統(tǒng)計,以便在必要時被使用。
[0062]在步驟S120中,將訪問次數(shù)與預(yù)設(shè)限制閾值進(jìn)行比較,判斷訪問次數(shù)是否超過預(yù)設(shè)限制閾值。
[0063]舉例而言,當(dāng)時間間隔超過預(yù)設(shè)統(tǒng)計時間時,讀取全局變量Times中數(shù)值,將數(shù)值與預(yù)設(shè)限制閾值進(jìn)行比較,判斷該數(shù)值是否超過預(yù)設(shè)限制閾值。
[0064]也可以是在每次檢測到訪問時,將統(tǒng)計的訪問次數(shù)與預(yù)設(shè)限制閾值進(jìn)行比較,判斷訪問次數(shù)是否超過預(yù)設(shè)限制閾值。例如,每次檢測到訪問時,判斷該時間間隔是否超過預(yù)設(shè)統(tǒng)計時間。如果該時間間隔沒有超過預(yù)設(shè)統(tǒng)計時間,則將訪問端對接口服務(wù)的訪問次數(shù)進(jìn)行計數(shù),將計數(shù)的數(shù)值與預(yù)設(shè)限制閾值進(jìn)行比較,判斷計數(shù)的數(shù)值是否超過預(yù)設(shè)限制閾值。如果該時間間隔超過預(yù)設(shè)統(tǒng)計時間,則將訪問端對接口服務(wù)的訪問次數(shù)重新進(jìn)行計數(shù),在重新進(jìn)行計數(shù)前,將計數(shù)的數(shù)值與預(yù)設(shè)限制閾值進(jìn)行比較,判斷計數(shù)的數(shù)值是否超過預(yù)設(shè)限制閾值。
[0065]在步驟S130中,當(dāng)訪問次數(shù)超過預(yù)設(shè)限制閾值時,禁止接口服務(wù)對訪問端進(jìn)行服務(wù)。
[0066]舉例而言,當(dāng)訪問次數(shù)超過預(yù)設(shè)限制閾值時,向接口服務(wù)發(fā)送包括訪問端ID的禁止服務(wù)指令,使得接口服務(wù)接收到該禁止服務(wù)指令后,對具有該訪問端ID的訪問端禁止提供服務(wù)。
[0067]在一實施例中,本發(fā)明中方法還包括:當(dāng)訪問次數(shù)超過預(yù)設(shè)限制閾值時,向訪問端發(fā)送包括訪問次數(shù)已超過限制的提示的通知信息。
[0068]例如,向訪問端發(fā)送通知信息,通知訪問端“您已超過訪問限制”。
[0069]在一實施例中,本發(fā)明中方法還包括:當(dāng)訪問次數(shù)沒有超過預(yù)設(shè)限制閾值時,允許接口服務(wù)對訪問端進(jìn)行服務(wù)。
[0070]本發(fā)明中實施例,解決了網(wǎng)絡(luò)中惡意程序?qū)涌诜?wù)惡意攻擊而導(dǎo)致接口服務(wù)癱瘓,無法為用戶提供正常服務(wù)的問題;取得了能夠檢測出對接口服務(wù)的惡意攻擊,進(jìn)而防止網(wǎng)絡(luò)中惡意程序?qū)涌诜?wù)進(jìn)行惡意攻擊的有益效果。
[0071]圖3示出了根據(jù)本發(fā)明一個實施例的應(yīng)用場景的示意圖,如圖3所示,提供接口服務(wù)的服務(wù)器與訪問端間通過網(wǎng)絡(luò)連接。訪問端可以為終端設(shè)備也可以為網(wǎng)絡(luò)中另一服務(wù)器,網(wǎng)絡(luò)連接可以是有線網(wǎng)絡(luò)連接,也可以是無線網(wǎng)絡(luò)連接,對此沒有特別限制。圖4示出了根據(jù)本發(fā)明一個實施例的防止對接口服務(wù)進(jìn)行惡意攻擊的方法的流程圖。該方法用于各種提供接口服務(wù)的服務(wù)器,如圖4所示,該方法包括如下步驟。
[0072]在步驟S402中,當(dāng)訪問端訪問接口服務(wù)時,根據(jù)接口服務(wù)和訪問端確定關(guān)健值key。
[0073]例如,根據(jù)以訪問端IP為訪問端ID,根據(jù)接口服務(wù)service和訪問端IP生成key,或根據(jù)接口服務(wù)service和接口秘鑰appkey生成key。
[0074]在步驟S404中,判斷內(nèi)存中是否已存儲對應(yīng)于關(guān)健值key的結(jié)構(gòu)體。
[0075]例如,采用函數(shù)get Limi