一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

拒絕接口裸奔!開(kāi)放API接口簽名驗(yàn)證!

 西北望msm66g9f 2021-02-14

接口安全問(wèn)題

  • 請(qǐng)求身份是否合法?

  • 請(qǐng)求參數(shù)是否被篡改?

  • 請(qǐng)求是否唯一?

AccessKey&SecretKey (開(kāi)放平臺(tái))


請(qǐng)求身份

為開(kāi)發(fā)者分配AccessKey(開(kāi)發(fā)者標(biāo)識(shí),確保唯一)和SecretKey(用于接口加密,確保不易被窮舉,生成算法不易被猜測(cè))。

防止篡改

參數(shù)簽名

  • 按照請(qǐng)求參數(shù)名的字母升序排列非空請(qǐng)求參數(shù)(包含AccessKey),使用URL鍵值對(duì)的格式(即key1=value1&key2=value2…)拼接成字符串stringA;

  • 在stringA最后拼接上Secretkey得到字符串stringSignTemp;

  • 對(duì)stringSignTemp進(jìn)行MD5運(yùn)算,并將得到的字符串所有字符轉(zhuǎn)換為大寫(xiě),得到sign值。

請(qǐng)求攜帶參數(shù)AccessKey和Sign,只有擁有合法的身份AccessKey和正確的簽名Sign才能放行。這樣就解決了身份驗(yàn)證和參數(shù)篡改問(wèn)題,即使請(qǐng)求參數(shù)被劫持,由于獲取不到SecretKey(僅作本地加密使用,不參與網(wǎng)絡(luò)傳輸),無(wú)法偽造合法的請(qǐng)求。

重放攻擊

雖然解決了請(qǐng)求參數(shù)被篡改的隱患,但是還存在著重復(fù)使用請(qǐng)求參數(shù)偽造二次請(qǐng)求的隱患。

timestamp+nonce方案

nonce指唯一的隨機(jī)字符串,用來(lái)標(biāo)識(shí)每個(gè)被簽名的請(qǐng)求。通過(guò)為每個(gè)請(qǐng)求提供一個(gè)唯一的標(biāo)識(shí)符,服務(wù)器能夠防止請(qǐng)求被多次使用(記錄所有用過(guò)的nonce以阻止它們被二次使用)。

然而,對(duì)服務(wù)器來(lái)說(shuō)永久存儲(chǔ)所有接收到的nonce的代價(jià)是非常大的。可以使用timestamp來(lái)優(yōu)化nonce的存儲(chǔ)。

假設(shè)允許客戶端和服務(wù)端最多能存在15分鐘的時(shí)間差,同時(shí)追蹤記錄在服務(wù)端的nonce集合。當(dāng)有新的請(qǐng)求進(jìn)入時(shí),首先檢查攜帶的timestamp是否在15分鐘內(nèi),如超出時(shí)間范圍,則拒絕,然后查詢攜帶的nonce,如存在已有集合,則拒絕。否則,記錄該nonce,并刪除集合內(nèi)時(shí)間戳大于15分鐘的nonce(可以使用redis的expire,新增nonce的同時(shí)設(shè)置它的超時(shí)失效時(shí)間為15分鐘)。

實(shí)現(xiàn)

請(qǐng)求接口:http://api./test?name=hello&home=world&work=java

客戶端

    • 生成當(dāng)前時(shí)間戳timestamp=now和唯一隨機(jī)字符串nonce=random

    • 按照請(qǐng)求參數(shù)名的字母升序排列非空請(qǐng)求參數(shù)(包含AccessKey)
      stringA='AccessKey=access&home=world&name=hello&work=java&timestamp=now&nonce=random';

    • 拼接密鑰SecretKey
      stringSignTemp='AccessKey=access&home=world&name=hello&work=java&timestamp=now&nonce=random&SecretKey=secret';

    • MD5并轉(zhuǎn)換為大寫(xiě)
      sign=MD5(stringSignTemp).toUpperCase();

    • 最終請(qǐng)求
      http://api./test?name=hello&home=world&work=java&timestamp=now&nonce=nonce&sign=sign;

服務(wù)端


Token&AppKey(APP)

在APP開(kāi)放API接口的設(shè)計(jì)中,由于大多數(shù)接口涉及到用戶的個(gè)人信息以及產(chǎn)品的敏感數(shù)據(jù),所以要對(duì)這些接口進(jìn)行身份驗(yàn)證,為了安全起見(jiàn)讓用戶暴露的明文密碼次數(shù)越少越好,然而客戶端與服務(wù)器的交互在請(qǐng)求之間是無(wú)狀態(tài)的,也就是說(shuō),當(dāng)涉及到用戶狀態(tài)時(shí),每次請(qǐng)求都要帶上身份驗(yàn)證信息。

Token身份驗(yàn)證

  • 用戶登錄向服務(wù)器提供認(rèn)證信息(如賬號(hào)和密碼),服務(wù)器驗(yàn)證成功后返回Token給客戶端;

  • 客戶端將Token保存在本地,后續(xù)發(fā)起請(qǐng)求時(shí),攜帶此Token;

  • 服務(wù)器檢查T(mén)oken的有效性,有效則放行,無(wú)效(Token錯(cuò)誤或過(guò)期)則拒絕。

安全隱患:Token被劫持,偽造請(qǐng)求和篡改參數(shù)。


Token+AppKey簽名驗(yàn)證

與上面開(kāi)發(fā)平臺(tái)的驗(yàn)證方式類似,為客戶端分配AppKey(密鑰,用于接口加密,不參與傳輸),將AppKey和所有請(qǐng)求參數(shù)組合成源串,根據(jù)簽名算法生成簽名值,發(fā)送請(qǐng)求時(shí)將簽名值一起發(fā)送給服務(wù)器驗(yàn)證。這樣,即使Token被劫持,對(duì)方不知道AppKey和簽名算法,就無(wú)法偽造請(qǐng)求和篡改參數(shù)。再結(jié)合上述的重發(fā)攻擊解決方案,即使請(qǐng)求參數(shù)被劫持也無(wú)法偽造二次重復(fù)請(qǐng)求。

實(shí)現(xiàn)

登陸和退出請(qǐng)求

后續(xù)請(qǐng)求

客戶端
和上述開(kāi)放平臺(tái)的客戶端行為類似,把AccessKey改為token即可。

服務(wù)端

Joker_Coding

blog.csdn.net/qq_18495465/article/details/79248608

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    国产精品一级香蕉一区| 久久本道综合色狠狠五月| 国产成人亚洲欧美二区综| 亚洲欧美黑人一区二区| 国产又大又黄又粗又免费| 空之色水之色在线播放| 亚洲精品福利入口在线| 欧美大胆美女a级视频| 欧美日韩国产综合特黄| 又色又爽又黄的三级视频| 麻豆精品在线一区二区三区| 91精品国自产拍老熟女露脸| 国产精品激情在线观看| 国产精品欧美一区两区| 麻豆一区二区三区在线免费| 日韩欧美高清国内精品| 大胆裸体写真一区二区| 黑人粗大一区二区三区| 久久这里只有精品中文字幕| 精品国产亚洲区久久露脸| 天海翼精品久久中文字幕| 91欧美一区二区三区| 亚洲欧美日韩熟女第一页| 99久久精品免费看国产高清| 日本加勒比在线观看一区| 激情五月激情婷婷丁香| 久久天堂夜夜一本婷婷| 国产精品视频一区二区秋霞 | 老司机这里只有精品视频| 国产精品一区二区三区激情| 99久久精品免费精品国产| 亚洲精品福利入口在线| 午夜视频成人在线免费| 欧美一区二区三区不卡高清视| 亚洲精品小视频在线观看| 91欧美日韩国产在线观看| 亚洲国产av国产av| 色哟哟精品一区二区三区| 亚洲熟女少妇精品一区二区三区| 精品人妻一区二区四区| 久久91精品国产亚洲|