API介面手工防禦被惡意呼叫和介面被攻擊

2022-09-23 18:15:10 字數 2160 閱讀 7255

通常情況下的api介面防護有如下幾種:

使用https防止抓包,使用https至少會給破解者在抓包的時候提高一些難度

介面引數的加解密,通過md5加密資料+時間戳+隨機字串(salt),然後將md5加密的資料和時間戳、原資料均傳到後台,後台規定乙個有效時長,如果在該時長內,且解密後的資料與原資料一致,則認為是正常請求;也可以採用aes/des之類的加密演算法,還可以加入客戶端的本地資訊作為判斷依據

本地加密混淆,以上提到的加解密資料和演算法,不要直接放在本地**,因為很容易被反編譯和破解,建議放到獨立模組中去,並且函式名稱越混淆越難讀越安全。

user-agent 和 referer 限制

api防護的登入驗證,包括裝置驗證和使用者驗證,可以通過檢查session等方式來判斷使用者是否登入

api的訪問次數限制,限制其每分鐘的api呼叫次數,可以通過session或者ip來做限制

定期監測,檢查日誌,偵查異常的介面訪問

在開發web端程式時,如果你的服務是放在外網的,你是無法完全阻止別人模擬客戶端來呼叫你的web api的。因為你的所有前端**使用者都能直接或間接的看到。

而在開發小程式專案時,前端的小程式**是上傳到微信伺服器的,其他人想要直接看到或拿到源**的難度較大,因此小程式端相對安全些;

為什麼要做介面防護和許可權校驗

有時候,黑客通過抓包或者其他方式即可獲得到後台介面資訊,如果不做許可權校驗,黑客就可以隨意呼叫後台介面,進行資料的篡改和伺服器的攻擊。因此,為了防止惡意呼叫,後台介面的防護和許可權校驗非常重要。

小程式如何進行介面防護

要進行小程式的介面防護,首先需要了解小程式的登入過程,如下圖所示

整個的流程如下:

小程式端通過wx.login()獲取到code後傳送給後台伺服器

後台伺服器使用小程式的appid、appsecret和code,呼叫微信介面服務換取session_key和openid(openid可以理解為是每個使用者在該小程式的唯一識別號)

後台伺服器自定義生成乙個3rd_session,用作openid和session_key的key值,後者作為value值,儲存乙份在後台伺服器或者redis或者mysql,同時向小程式端傳遞3rd_session

小程式端收到3rd_session後將其儲存到本地快取,如wx.setstoragesync(key,data)

後續小程式端傳送請求至後台伺服器時均攜帶3rd_session,可將其放在header頭部或者body裡

後台伺服器以3rd_session為key,在保證3rd_session未過期的情況下讀取出value值(即openid和session_key的組合值),通過openid判斷是哪個使用者傳送的請求,再和傳送過來的body值做對比(如有),無誤後呼叫後台邏輯處理

返回業務資料至小程式端

ps:會話金鑰session_key 是對使用者資料進行加密簽名的金鑰。為了應用自身的資料安全,開發者伺服器不應該把會話金鑰下發到小程式,也不應該對外提供這個金鑰。

session_key主要用於wx.getuserinfo介面資料的加解密,如下圖所示

什麼是sessionid

在微信小程式開發中,由wx.request()發起的每次請求對於服務端來說都是不同的一次會話。啥意思呢就是說區別於瀏覽器,小程式每一次請求都相當於用不同的瀏覽器發的。即不同的請求之間的sessionid不一樣(實際上小程式cookie沒有攜帶sessionid)。

如下圖所示:

實際上小程式的每次wx.request()請求中沒有包含cookie資訊,即沒有sessionid資訊。

那麼我們能否實現類似瀏覽器訪問,可以將session儲存到後台伺服器呢

答案是肯定的。我們可以在每次wx.request()中的header裡增加

##j**a的寫法,jsessionid只是tomcat的對sessionid的叫法,其實就是sessionid

header:

##thinkjs3.0的寫法

header:

效果如下圖所示:

在thinkjs3.0的後台**中,sessionid被儲存到了cookie裡,可以通過

constsession_id=this.cookie('thinkjs')提取到sessionid的值

具體thinkjs的實現**

首先建立sever端的**,如下圖所示(

cd到根目錄,執行:

thinkjsnewserver建立後台**

防止API被惡意呼叫

一 身份鑑定。這個可以使用oauth2.0規範,或者帶有不對稱金鑰加密的token,選擇jwt等形式,配合身份鑑定系統來保證。二 內容防篡改。可以使用數字簽名演算法來進行雜湊校驗,強制https通訊。最新的系統可以考慮http 2。三 ddos 攻擊。通過設定防火牆,控制api呼叫頻.率,例如協議的...

防止惡意呼叫API介面

1 驗證碼 最簡單有效的防護 採用點觸驗證,滑動驗證或第三方驗證碼服務,普通驗證碼很容易被破解 2 頻率,限制同裝置,同ip等傳送次數,單點時間範圍可請求時長 3 歸屬地,檢測ip所在地是否與手機號歸屬地匹配 ip所在地是否是為常在地 4 可疑使用者,對於可疑使用者要求其主動發簡訊 或其他主動行為 ...

如何防止公開介面被惡意呼叫?

今年組長給了幾個任務,其中有兩個是關於對外介面的安全控制 前端驗證元件 利用瀏覽器js加密的技術訪問介面,防止惡意使用者越過瀏覽器直接訪問我們的介面。人機識別 在介面端再做一層檢測,區分呼叫者來自普通使用者還是工具模擬,進一步防止惡意打介面的行為。主要研究的方向在於如何提取使用者行為,因為工具模擬是...