對外接口的安全性


對外接口的安全性主要在於兩個方面,一個方面是保證數據在傳輸過程中的安全性,另一個方面是數據到達服務器端之后服務器端能夠識別出不安全的數據以防止被攻擊。

1.數據加密

我們知道,數據在傳輸的過程中是很容易被抓包的,如果直接傳輸,比如通過http協議,那么用戶傳輸的數據是可以被任何人獲取的,所以必須對數據進行加密。常見的做法是對關鍵字段加密,比如將用戶密碼直接通過md5加密,這樣就算數據被抓包了,抓包者也無法獲得用戶密碼的實際內容。而現在主流的做法則是使用https協議,在http和tcp協議之間添加一層加密層(ssl層),這一層負責數據的加密和解密。

實際上,主流的數據加密方式總體可以分為對稱加密和非對稱加密。

1.1對稱加密

對稱密鑰在加密和解密的過程中使用的密鑰是相同的,常見的對稱加密算法有DES和AES等。對稱加密的優點是計算速度快,缺點則是在數據傳送之前,發送方和接收方必須商定好密鑰並保存好,如果其中一方的密鑰被泄露的話,加密信息就不安全了。

1.2非對稱加密

非對稱加密的服務端會生成一對密鑰,私鑰放在服務器端,公鑰則可以發布給調用方使用。非對稱加密的優點是相比於對稱加密來說要更安全一些,缺點則是加解密的速度要比對稱加密要慢得多。非對稱加密廣泛使用的是RSA算法。

對稱加密和非對稱加密這兩種方式各有優缺點,而https的實現方式正好是結合了這兩種加密方式,整合了雙方的優點,因此在安全和性能方面都比較好。

2.數據加簽

所謂的數據加簽,就是由發送者產生一段無法偽造的字符/數字串,來保證數據在傳輸的過程中不會被惡意篡改。那么如果數據已經通過https加密了,還需要進行數據加簽嗎?事實上,因為數據在傳輸的過程中已經經過了https加密,理論上即使被抓包,也無法對數據進行篡改,但是這些加密的部分只是在外網,而現在很多的服務都是在內網中經過很多的服務跳轉,因此數據加簽可以有效防止在內網環境中的數據篡改。

數據加簽使用比較多的是md5算法,具體是將需要提交的數據和約定好的密鑰通過某種方式組合成一個字符串,然后通過md5生成一段加密的字符串,這段加密的字符串就是數據包的簽名,服務器會在接收請求的時候在后台根據約定好的組合方式在后台使用md5生成新的加密字符串,和數據包的簽名做比較,不匹配則視為非法請求。

3.時間戳機制

數據是很容易被抓包的,但是經過如上的加密和加簽處理,抓包者就算拿到數據也不是原始的數據。但是如果直接拿抓取的數據包進行惡意請求呢,因為抓包下來的數據包都是真實有效的,因此也可以請求成功。這時候為了防止這樣的情況,就可以使用時間戳機制,在每次的請求中加入當前的時間,服務器端就會拿到當前時間和消息中的時間做減法,看看結果是否在一個固定的時間范圍之內,比如五分鍾之內,如果不在則視為非法請求。因為惡意請求的數據包是無法更改里面的時間的,所以這種做法能在一定程度上限制惡意請求的影響。

4.appid機制

大部分的網站基本上都是需要用戶名和密碼才能登錄的,這實際上也是一種安全機制,而對外的接口也可以借用這一機制:需要使用接口的用戶在后台開通appid,然后系統提供給用戶相關的密鑰,在調用接口的時候需要提供appid+密鑰給服務器做相關的驗證,驗證通過才能正常調用,這就是appid機制。

一般來說生成一個唯一的appid,密鑰則使用字母、數字等特殊字符隨機生成即可。生成唯一的appid根據實際情況看是否需要全局唯一,但是不管是否全局唯一,最好是讓生成的id有如下屬性:

4.1趨勢遞增

這樣在保存appid到數據庫的時候,使用索引使性能更好。

4.2信息安全

盡量不要連續的,避免容易被發現規律。

更多的,生成全局唯一id的常見方式有類snowflake方式等。

5.限流機制

限流機制一般適用於這樣的場景:本來就是真實的用戶,並且開通了appid,但是出現了頻繁調用接口的情況,因此需要給相關的appid做限流處理。常見的限流算法有令牌桶、漏桶算法和計數器限流等。

5.1令牌桶算法

令牌桶算法的原理是系統以一定的速率向桶內放入令牌,填滿了就丟棄令牌。當請求到達時會先從桶中取出令牌,如果能取到令牌,則可以繼續完成請求,否則等待或者拒絕服務。令牌桶允許一定程度的突發流量,只要有令牌就可以處理,也支持一次拿多個令牌。

5.2漏桶限流

漏桶算法的原理是按照固定常量速率流出請求,流入請求速率任意,當請求數超過桶的容量的時候,新的請求就會等待或者被拒絕。可以看出漏桶算法可以強制限制數據的傳輸速度。

5.3計數器限流

計數器是一種比較簡單粗暴的算法,主要用於限制總並發數,比如數據庫連接池,線程池和秒殺的並發數,只要一定時間內的總請求數超過設定的閥值就進行限流。

6.黑名單機制

如果某個appid進行過很多的非法操作,或者說專門有一個中黑系統,網站分析之后可以直接將此appid列入黑名單,所有的請求都直接返回錯誤碼。

7.數據合法性校驗

數據合法性校驗可以說是每個系統都會有的處理機制,只有在數據是合法的情況下才會進行數據處理。一般來說每個系統都會有自己特定的驗證規則,當然也可能會有一些常規性的規則,比如身份證長度和組成,電話號碼長度和組成等。

數據合法性校驗大體上可以分為常規性校驗和業務校驗。

7.1常規性校驗

包括簽名校驗、必填校驗、長度校驗、類型校驗和格式校驗等。

7.2業務校驗

業務校驗就是每個系統的特定驗證規則,根據實際業務而定,比如訂單金額不能小於0等。

 

"真正的有錢人一般都是很低調的,比如說我,別看我每天都是騎着小黃車上下班,但是你們誰會想到我下班之后,晚上在家電風扇都是開三檔。"


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM