淺談API安全設(shè)計

一、簡述

安全是恒久的話題,如果不注意防范,會帶來很嚴(yán)重的后果。比如:

1.接口被大規(guī)模調(diào)用消耗系統(tǒng)資源,影響系統(tǒng)的正常訪問,甚至系統(tǒng)癱瘓

2.數(shù)據(jù)泄露

3.偽造(篡改)數(shù)據(jù),制造垃圾數(shù)據(jù)

4.App被仿制…

那么我們設(shè)計API時,就要保證RESTful API的安全性,主要包括三大方面:

a) 對受限資源的登錄授權(quán)

b) 對請求做身份認(rèn)證,并且防止篡改,重放攻擊

c) 對敏感的數(shù)據(jù)做加密

二、受限資源的登錄授權(quán)

此流程不是本文重點,不贅述,基本流程如下:

1. 客戶端提交賬號信息(用戶名+密碼)到服務(wù)端

2.? 服務(wù)端驗證成功,返回AccessToken給客戶端存儲

3.訪問受限資源時,客戶端帶入AccessToken就可訪問。

三、請求認(rèn)證

如果不對請求進(jìn)行簽名認(rèn)證,那么可以簡單的通過fiddler等工具輕易抓包拿到數(shù)據(jù),并進(jìn)行篡改,提交,大規(guī)模批量調(diào)用,則會使系統(tǒng)產(chǎn)生大量垃圾數(shù)據(jù),系統(tǒng)資源被大量消耗,甚至無法正常使用(另說,當(dāng)然可以通過GateWay進(jìn)行限流),因而我們需要對請求進(jìn)行簽名認(rèn)證。

URL格式

URL:schema://domain/path?query&imei&timestamp&sign

參數(shù)說明


簽名方法


sign=signature(path?query&imei&timetamp&SIGN_KEY)

驗證過程


認(rèn)證邏輯

1、初始時,服務(wù)端存有各App版本的SIGN_KEY,客戶端存有對應(yīng)版本的SIGN_KEY

2、當(dāng)要發(fā)送請求之前,通過簽名方法加密,得到一個sign

3、發(fā)送請求的時候,連同sign一起發(fā)送給服務(wù)器端

4、服務(wù)器端首先驗證時間戳timestamp是否有效,比如是服務(wù)器時間戳5分鐘之前的請求視為無效;

5、然后取對應(yīng)版本的SIGN_KEY驗證sign是否合法

6、為了防止重放攻擊,需要檢查sign是否在redis中存儲,如不存在則存入redis(緩存5分鐘)

如何防止數(shù)據(jù)篡改

這里通過簽名參數(shù)中包含原有請求的所有參數(shù),改動任意參數(shù),sign值都會不同,因此無法篡改。

如何防止重放攻擊

由于簽名算法中還有imei(設(shè)備唯一Id)、timestamp參數(shù),且簽名算法為不可逆算法(如md5或sha1),因而對于正常的每個請求sign值不會重復(fù)。此時服務(wù)端可以存儲5分鐘的sign值,來做重放攻擊時的驗證過濾,超過5分鐘的請求則直接被timestamp校驗過濾。

總結(jié)

如此便實現(xiàn)了請求認(rèn)證,防止數(shù)據(jù)篡改,重放攻擊,但是需要確保App密鑰(SIGN_KEY)的安全保存,其優(yōu)點是容易理解與實現(xiàn),缺點是需要承擔(dān)安全保存密鑰和定期更新密鑰的負(fù)擔(dān)。

四、敏感據(jù)加密

1)、部署SSL基礎(chǔ)設(shè)施(即HTTPS),敏感數(shù)據(jù)的傳輸全部基于SSL。

2)、僅對部分敏感數(shù)據(jù)做加密(例如賬號+密碼),并加入某種隨機(jī)數(shù)作為加密鹽,以防范數(shù)據(jù)被篡改。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 這篇文章介紹了Mobile BI(移動商務(wù)智能)使用過程中涉及的各種身份認(rèn)證的方式,主要目的是對這些方式的原理進(jìn)行...
    雨_樹閱讀 2,076評論 1 2
  • 原文地址 http://blog.csdn.net/u012409247/article/details/4985...
    0fbf551ff6fb閱讀 3,582評論 0 13
  • 方案一 (客戶端token方式)客戶端生成token傳給服務(wù)端校驗,一致就通過用戶驗證。 通過時間戳+用戶唯一標(biāo)識...
    RobinYu閱讀 2,175評論 0 1
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,991評論 19 139
  • 我挺喜歡文字,從小學(xué)開始就是如此。但是后來慢慢長大后玩性大過了看書的這個愛好,在初二那年輟學(xué)。出去工作一兩年以后我...
    再見了小時候懵懂的我閱讀 226評論 0 0