亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

怎么保證對外暴露接口的安全性(調用頻率限制)

怎么保證對外暴露接口的安全性(調用頻率限制)

紅糖糍粑 2018-10-05 11:39:00
如何限制接口調用者對接口的調用頻率?問題:對某個對外暴露的接口加一個限制:調用者一分鐘之內調用次數不能超過100次,如果超過100次就直接返回給調用者失敗的信息。給調用者一個SECRET,每次調用者需要調用接口的時候,都需要把這個SECRET帶過來(為了安全需要對key進行一系列加密的措施)一個SECRET就代表一個調用者,把相應的SECRET的調用次數放入緩存中(必須確保次數增加的原子性),并且把SECRET當做緩存的SECRET(這里如果區分方法的話,可以把方法和KEY做一次加密)。這里主要的難點就是,如何判斷調用者1分鐘之內調用次數是否超過100?也就是很難確實這個1分鐘的開始時間。我現在的想法是:分別把當前秒調用的次數存入緩存。比如說,當前調用者調用次數為3,那么我就往緩存中加入KEY=SECRET_1,VALUE=3;然后調用者在第二秒調用的次數為4,那么就往緩存中加入KEY=SECRET_2,VALUE=3;如此循環,當循環到61秒的時候替換KEY=SECRET_1中得VAALUE,每次調用的時候計算SECRET_1~SECRET_60的值來判斷調用次數,是否超過100次。(這里具體一秒鐘調用幾次,需要通過時間戳來算出是第幾秒。這里以60秒為時間周期,并且以秒為一個時間單位,當然如果要求不是很準確的話,時間單位可以調大一點)問題 請問有沒有別的更好方法或者想法可以實現這個調用頻率的限制?Update:基于令牌桶的開放平臺限流框架:limiter,持續開發中...
查看完整描述

2 回答

?
守著星空守著你

TA貢獻1799條經驗 獲得超8個贊

為每個secret維護一個長度為100的隊列
當隊列長度為100的時候,取出隊列頭
判斷時間是否超過1分鐘,則accept
如果不足1分鐘則deny
然后shift和push隊列即可

查看完整回答
反對 回復 2018-10-14
?
達令說

TA貢獻1821條經驗 獲得超6個贊

nginx的limit_req_zone就符合你想要的這種需求,它是使用令牌桶算法的.具體你可以看一下.

https://img1.sycdn.imooc.com//5bc2f6360001ea2607620500.jpg

查看完整回答
反對 回復 2018-10-14
  • 2 回答
  • 0 關注
  • 1938 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號