我們都知道,數(shù)據(jù)在網(wǎng)絡傳輸過程中,很容易被抓包。特別使用的是http協(xié)議(報文明文傳輸),用戶的數(shù)據(jù)就很容易被別人獲取。那么有哪些常見的保證接口數(shù)據(jù)安全的方案呢?
1.數(shù)據(jù)加密,防止報文明文傳輸。
1.1 什么是數(shù)據(jù)加密?
常見的實現(xiàn)方式,就是對關(guān)鍵字段加密。比如,你一個登錄的接口,你可以對密碼加密。一般使用對稱加密算法(常見DES、AES、RC5、Blowfish、IDEA)來加解密,或者哈希算法處理(常見MD5、SHA-1、SHA-256、SHA-X)。
對稱加密:加密和解密使用相同密鑰的加密算法。特點:加解密效率高,速度快,適合大數(shù)據(jù)量加解密。
非對稱加密:非對稱加密算法需要兩個密鑰(公開密鑰和私有密鑰)。公鑰與私鑰是成對存在的,如果用公鑰對數(shù)據(jù)進行加密,只有對應的私鑰才能解密。特點:算法復雜,加解密速度慢,但安全性高。一般與對稱加密結(jié)合使用(對稱加密通信內(nèi)容,非對稱加密對稱秘鑰)。
更安全的做法,就是用非對稱加密算法(常見RSA、DH、DSA、ECC),公鑰加密,私鑰解密。
如果需要對所有字段都加密,一般直接使用https協(xié)議。https采用的是非對稱加密與對稱加密結(jié)合使用的方式:
對稱加密通信內(nèi)容,非對稱加密對稱秘鑰。
2. 數(shù)據(jù)加簽驗簽
數(shù)據(jù)報文加簽驗簽,是保證數(shù)據(jù)傳輸安全的常用手段,它可以保證數(shù)據(jù)在傳輸過程中不被篡改。
2.1 什么是加簽驗簽呢?
-
數(shù)據(jù)加簽:用Hash算法(如
MD5,或者SHA-256
)生成原始請求參數(shù)報文摘要,然后用私鑰對摘要進行加密,得到報文數(shù)字簽名sign
(這個過程就是加簽)。通常來說,請求方會把數(shù)字簽名和報文原文一并發(fā)送給接收方。
-
驗簽:接收方拿到原始報文和數(shù)字簽名(
sign
)后,用同一個Hash算法生成報文摘要A.再用對方提供的公鑰對數(shù)字簽名進行解密,得到摘要B,對比A和B是否相同,就可以確定報文是否被被篡改。
3.token授權(quán)認證機制
日常開發(fā)中,我們的網(wǎng)站或者APP,都是需要用戶登錄的。那么如何確認用戶身份的呢?可以使用token授權(quán)機制。
3.1 token的授權(quán)認證方案
token的授權(quán)認證方案:用戶在客戶端輸入用戶名和密碼進行登錄,服務端會校驗密碼成功,并給客戶端返回一個唯一值token
,并將token
以鍵值對的形式存放在緩存(一般是Redis)中。后續(xù)客戶端對需要授權(quán)模塊的所有操作都要帶上這個token
,服務器端接收到請求后,先進行token
驗證,如果token
存在,才表明是合法請求。
token登錄授權(quán)流程圖如下:
-
用戶輸入用戶名和密碼,發(fā)起登錄請求
-
服務端校驗密碼,如果校驗通過,生成一個全局唯一的
token
。 -
將
token
存儲在redis
中,其中key
是token
,value
是userId
或者是用戶信息,設置一個過期時間。 -
把這個
token
返回給客戶端 -
用戶發(fā)起其他業(yè)務請求時,需要帶上這個
token
-
后臺服務會統(tǒng)一攔截接口請求,進行
token
有效性校驗,并從中獲取用戶信息,供后續(xù)業(yè)務邏輯使用。如果token
不存在,說明請求無效。
3.2 如何保證token的安全?t是不是拿到token就可以可以調(diào)用服務器端的任何接口?
可以從這幾個方面出發(fā)考慮:
-
token設置合理的有效期
-
使用https協(xié)議
-
token可以再次加密
-
如果訪問的是敏感信息,單純加token是不夠的,通常會再配置白名單
4. 時間戳timestamp超時機制
數(shù)據(jù)是很容易抓包的,假設我們用了https
和加簽,即使中間人抓到了數(shù)據(jù)報文,它也看不到真實數(shù)據(jù)。但是有些不法者,他根本不關(guān)心真實的數(shù)據(jù),而是直接拿到抓取的數(shù)據(jù)包,進行惡意請求(比如DOS攻擊),以搞垮你的系統(tǒng)。
我們可以引入時間戳超時機制,來保證接口安全。就是:用戶每次請求都帶上當前時間的時間戳timestamp
,服務端接收到timestamp
后,解密,驗簽通過后,與服務器當前時間進行比對,如果時間差大于一定時間 (比如3分鐘),則認為該請求無效。
5. timestamp+nonce方案防止重放攻擊
時間戳超時機制也是有漏洞的,如果是在時間差內(nèi),黑客進行的重放攻擊,那就不好使了。可以使用timestamp+nonce
方案。
nonce
指唯一的隨機字符串,用來標識每個被簽名的請求。我們可以將每次請求的nonce
參數(shù)存儲到一個“set集合”中,或者可以json格式存儲到數(shù)據(jù)庫或緩存中。每次處理HTTP請求時,首先判斷該請求的nonce
參數(shù)是否在該“集合”中,如果存在則認為是非法請求。
然而對服務器來說,永久保存nonce
的代價是非常大的??梢越Y(jié)合timestamp
來優(yōu)化。因為timstamp
參數(shù)對于超過3min
的請求,都認為非法請求,所以我們只需要存儲3min
的nonce
參數(shù)的“集合”即可。
6. 限流機制
如果用戶本來就是就是真實用戶,他惡意頻繁調(diào)用接口,想搞垮你的系統(tǒng)呢?這種情況就需要接入限流了。
可以使用Guava
的RateLimiter
單機版限流,也可以使用Redis
分布式限流,還可以使用阿里開源組件sentinel
限流。比如說,一分鐘可以接受多少次請求。
7. 黑名單機制
如果發(fā)現(xiàn)了真實用戶惡意請求,你可以搞個黑名單機制,把該用戶拉黑。一般情況,會有些競爭對手,或者不壞好意的用戶,想搞你的系統(tǒng)的。所以,為了保證安全,一般我們的業(yè)務系統(tǒng),需要有個黑名單機制。對于黑名單發(fā)起的請求,直接返回錯誤碼好了。
8. 白名單機制文章來源:http://www.zghlxwxcb.cn/news/detail-798157.html
有了黑名單機制,也可以搞個白名單機制。比如說企業(yè)微信、釘釘?shù)?,如果有外面的商戶要接入他們的系統(tǒng),則需要提前配置IP白名單,才可以訪問。文章來源地址http://www.zghlxwxcb.cn/news/detail-798157.html
到了這里,關(guān)于常見的保證接口數(shù)據(jù)安全8種方案的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!