国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

工作記錄 >> 登錄短信驗(yàn)證碼防刷解決思路

whataa / 2903人閱讀

摘要:不過(guò)今天寫(xiě)的沒(méi)有上面說(shuō)的那么高大,只是一個(gè)小小的防刷解決思路。這是工作中經(jīng)常遇到的在此僅做一個(gè)記錄,以便回顧。同一個(gè)限制一分鐘最多獲取次超過(guò)次則鎖定小時(shí),鎖定期間獲取短信需加圖片驗(yàn)證碼收到這個(gè)需求利用做了簡(jiǎn)單的限流防刷功能。

一、寫(xiě)在前面

在互聯(lián)網(wǎng)的發(fā)展史上,安全總是一個(gè)繞不開(kāi)話題, 你有安全盾、我有破盾矛。所謂道高一尺、魔高一丈,不過(guò)互聯(lián)網(wǎng)安全也正是在這種攻防中慢慢的發(fā)展起來(lái)的。

不過(guò)今天寫(xiě)的沒(méi)有上面說(shuō)的那么高大,只是一個(gè)小小的防刷解決思路。

這是工作中經(jīng)常遇到的、在此僅做一個(gè)記錄,以便回顧。

如有不嚴(yán)謹(jǐn)或者不完善的地方,歡迎指正 ~謝謝~

二、場(chǎng)景引入、問(wèn)題凸顯

場(chǎng)景: 在我們給 xx 做的區(qū)塊鏈共享出行平臺(tái)中區(qū)塊鏈瀏覽器系統(tǒng)的登錄是以用戶(hù)的手機(jī)號(hào)+驗(yàn)證碼來(lái)登錄的。

因是內(nèi)部用戶(hù)使用、在登錄這塊也沒(méi)做特殊的安全處理,導(dǎo)致在測(cè)試時(shí)被我們的測(cè)試小哥給刷爆了(在這給測(cè)試小哥點(diǎn)個(gè)贊)。

到這我們必然的收到一個(gè)bug了,業(yè)務(wù)期望。

1: 同一個(gè)ip限制一分鐘最多獲取5次

2: 超過(guò)5次則鎖定1小時(shí),鎖定期間獲取短信需加圖片驗(yàn)證碼

收到這個(gè)需求、利用Redis做了簡(jiǎn)單的限流防刷功能。

三、解決方案

首先分析需求,

1: 對(duì)同一IP做限制

2: 對(duì)單位時(shí)間內(nèi)次數(shù)做限制

利用Redis來(lái)實(shí)現(xiàn)思路

1: 一個(gè)獲取短信驗(yàn)證碼請(qǐng)求過(guò)來(lái)我們首先的判斷此IP是否已經(jīng)被鎖定(單位時(shí)間內(nèi)超過(guò)了限定的訪問(wèn)次數(shù))

2: 如果未被鎖定則判斷此IP是否是首次訪問(wèn),如果是則給此IP加個(gè)生命周期以及記錄訪問(wèn)次數(shù)。

3: 如果不是首次訪問(wèn),則判斷單位時(shí)間內(nèi)是否符合限制要求。

完成這三不我們需要在 redis 中定義三個(gè)KEY

msg_lock_key_{ip} 記錄次IP已被鎖定

msg_time_key_{ip} 記錄單位時(shí)間內(nèi)IP

msg_counter_key_{ip} 記錄單位時(shí)間內(nèi)IP訪問(wèn)次數(shù)

到這就直接上一段代碼吧,

public boolean checkMsgFrequency(String remotIp) {
        String romteIpString = remotIp.replace(".", "");

        // 1: 判斷此ip是否已經(jīng)被限制
        String msgLockKey = Constants.API_MSG_LOCK_KEY + romteIpString;
        if (jedis.exists(msgLockKey)) {
            // 此ip已經(jīng)被鎖住
            logger.info("此Ip[{}]以超過(guò)規(guī)定訪問(wèn)頻率key:{}", remotIp, msgLockKey);
            return false;
        }

        // 2: 判斷此ip是否在規(guī)定的時(shí)間內(nèi)訪問(wèn)過(guò)
        String msgTimeKey = Constants.API_MSG_TIME_KEY + romteIpString;
        String msgCounterKey = Constants.API_MSG_COUNTER_KEY + romteIpString;
        // key 不存在
        if (!jedis.exists(msgTimeKey)) {
            // 加入緩存
            jedis.setEx(msgTimeKey, "0", imageCode.getLimitTime());
            jedis.setEx(msgCounterKey, "1", imageCode.getLimitTime());
        }

        if (jedis.exists(msgTimeKey) && (jedis.incrBy(msgCounterKey, 1) > imageCode.getLimitCounter())) {
            logger.info("此Ip[{}]以超過(guò)規(guī)定訪問(wèn)頻率、進(jìn)行枷鎖key:{}", remotIp, msgTimeKey);
            jedis.setEx(msgLockKey, "0", imageCode.getLimitlockTime());
            return false;
        }
        return true;
    }

這是一個(gè)簡(jiǎn)單的代碼實(shí)現(xiàn), 邏輯就是這個(gè)邏輯,實(shí)現(xiàn)方式很多種。

你可以使用spring AOP + 自定義注解對(duì)邏輯進(jìn)行分裝。

也可以使用Redis + lua腳本對(duì)上述三步邏輯進(jìn)行分裝。

這個(gè)就看個(gè)人,重要的的理解實(shí)現(xiàn)的思路, 實(shí)現(xiàn)方式千萬(wàn)種總有一種是適合你的。

四、總結(jié)

對(duì)稀有資源的限流防刷,一般對(duì)單位時(shí)間的訪問(wèn)頻率或者次數(shù)的限制。

我們主要是理解其解決問(wèn)題的思路, 而不是記住實(shí)現(xiàn)代碼。

主要思路:

1: 查看針對(duì)次請(qǐng)求(IP 或者 uid) 對(duì)當(dāng)前請(qǐng)求資源是否已被鎖定。

2: 如果沒(méi)有被鎖定,則給此請(qǐng)求加生命周期(也就是一個(gè)限制時(shí)間單位),同時(shí)記錄訪問(wèn)次數(shù)。

3: 則判斷此請(qǐng)求是否達(dá)到鎖定條件

大致思想就是這三步。

此記錄為加深自己記憶,同時(shí)以便溫故,若能幫到你,萬(wàn)分高興。

如有不對(duì)的地方歡迎留言指正 謝謝!

如您有更好的思路歡迎交流

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/74705.html

相關(guān)文章

  • 無(wú)間盾反欺詐系統(tǒng)UIW正式上線

    摘要:產(chǎn)品簡(jiǎn)介無(wú)間盾是一款驗(yàn)證碼產(chǎn)品,提供了拖動(dòng)點(diǎn)選兩種形式的驗(yàn)證碼。計(jì)費(fèi)周期服務(wù)點(diǎn)數(shù)具有年有效期,以最近次購(gòu)買(mǎi)次數(shù)為準(zhǔn)。【產(chǎn)品簡(jiǎn)介】無(wú)間盾是一款驗(yàn)證碼產(chǎn)品,提供了拖動(dòng)、點(diǎn)選兩種形式的驗(yàn)證碼。基于生物的行為特征,結(jié)合人工智能技術(shù),在降低用戶(hù)操作的難度的同時(shí),有效防范羊毛黨、垃圾注冊(cè)、刷單、惡意評(píng)論、撞庫(kù)等業(yè)務(wù)風(fēng)險(xiǎn),保障業(yè)務(wù)的安全性,降低黑產(chǎn)團(tuán)伙、自動(dòng)化工具等欺詐行為帶來(lái)的業(yè)務(wù)損失。【應(yīng)用場(chǎng)景】1、...

    ernest.wang 評(píng)論0 收藏0
  • 當(dāng)我們談?wù)?em>驗(yàn)證碼時(shí),我們到底在談?wù)撌裁矗?/b>

    摘要:在次失敗后,第四次請(qǐng)求,就返回錯(cuò)誤文案驗(yàn)證碼連續(xù)錯(cuò)誤三次,請(qǐng)重新獲取短信驗(yàn)證碼還有一個(gè)需要思考的維度。一般來(lái)說(shuō),短信驗(yàn)證碼會(huì)有分鐘的有效期。 前言: 現(xiàn)如今登錄用手機(jī)驗(yàn)證碼登錄是越來(lái)越常見(jiàn)了。雖然會(huì)增加成本,不過(guò)對(duì)用戶(hù)體驗(yàn)的提升還是很有幫助的。那么,當(dāng)產(chǎn)品經(jīng)理對(duì)開(kāi)發(fā)說(shuō),來(lái)按照這個(gè)原型給我搞個(gè)短信驗(yàn)證碼登錄的時(shí)候。我們作為研發(fā),應(yīng)該想些什么?showImg(https://upload-...

    妤鋒シ 評(píng)論0 收藏0
  • 大話后端開(kāi)發(fā)的奇淫技巧大集合

    摘要:,大家好,很榮幸有這個(gè)機(jī)會(huì)可以通過(guò)寫(xiě)博文的方式,把這些年在后端開(kāi)發(fā)過(guò)程中總結(jié)沉淀下來(lái)的經(jīng)驗(yàn)和設(shè)計(jì)思路分享出來(lái)模塊化設(shè)計(jì)根據(jù)業(yè)務(wù)場(chǎng)景,將業(yè)務(wù)抽離成獨(dú)立模塊,對(duì)外通過(guò)接口提供服務(wù),減少系統(tǒng)復(fù)雜度和耦合度,實(shí)現(xiàn)可復(fù)用,易維護(hù),易拓展項(xiàng)目中實(shí)踐例子 Hi,大家好,很榮幸有這個(gè)機(jī)會(huì)可以通過(guò)寫(xiě)博文的方式,把這些年在后端開(kāi)發(fā)過(guò)程中總結(jié)沉淀下來(lái)的經(jīng)驗(yàn)和設(shè)計(jì)思路分享出來(lái) 模塊化設(shè)計(jì) 根據(jù)業(yè)務(wù)場(chǎng)景,將業(yè)務(wù)...

    CloudwiseAPM 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<