IOS開(kāi)發(fā)中如何設(shè)計(jì)短信驗(yàn)證碼防刷機(jī)制
最近遇到一個(gè)關(guān)于防止短信驗(yàn)證碼被刷的產(chǎn)品設(shè)計(jì)問(wèn)題,后來(lái)在面試一個(gè)前來(lái)應(yīng)聘JAVA開(kāi)發(fā)的程序員的時(shí)候,他也提到了他以前公司的系統(tǒng)也遭遇過(guò)這個(gè)被刷短信的問(wèn)題。因此,就“如何設(shè)計(jì)短信驗(yàn)證碼防刷機(jī)制”作一個(gè)總結(jié)和分享。
1、時(shí)間限制:60秒后才能再次發(fā)送
從發(fā)送驗(yàn)證碼開(kāi)始,前端(客戶端)會(huì)進(jìn)行一個(gè)60秒的倒數(shù),在這一分鐘之內(nèi),用戶是無(wú)法提交多次發(fā)送信息的請(qǐng)求的。這種方法雖然使用得比較普遍,但是卻不是非常有用,技術(shù)稍微好點(diǎn)的人完全可以繞過(guò)這個(gè)限制,直接發(fā)送短信驗(yàn)證碼。
2、手機(jī)號(hào)限制:同一個(gè)手機(jī)號(hào),24小時(shí)之內(nèi)不能夠超過(guò)5條
對(duì)使用同一個(gè)手機(jī)號(hào)碼進(jìn)行注冊(cè)或者其他發(fā)送短信驗(yàn)證碼的操作的時(shí)候,系統(tǒng)可以對(duì)這個(gè)手機(jī)號(hào)碼進(jìn)行限制,例如,24小時(shí)只能發(fā)送5條短信驗(yàn)證碼,超出限制則進(jìn)行報(bào)錯(cuò)(如:系統(tǒng)繁忙,請(qǐng)稍后再試)。然而,這也只能夠避免人工手動(dòng)刷短信而已,對(duì)于批量使用不同手機(jī)號(hào)碼來(lái)刷短信的機(jī)器,這種方法也是無(wú)可奈何的。
3、短信驗(yàn)證碼限制:30分鐘之內(nèi)發(fā)送同一個(gè)驗(yàn)證碼
網(wǎng)上還有一種方法說(shuō):30分鐘之內(nèi),所有的請(qǐng)求,所發(fā)送的短信驗(yàn)證碼都是同一個(gè)驗(yàn)證碼。第一次請(qǐng)求短信接口,然后緩存短信驗(yàn)證碼結(jié)果,30分鐘之內(nèi)再次請(qǐng)求,則直接返回緩存的內(nèi)容。對(duì)于這種方式,不是很清楚短信接口商會(huì)不會(huì)對(duì)發(fā)送緩存信息收取費(fèi)用,如果有興趣可以了解了解。
4、前后端校驗(yàn):提交Token參數(shù)校驗(yàn)
這種方式比較少人說(shuō)到,個(gè)人覺(jué)得可以這種方法值得一試。前端(客戶端)在請(qǐng)求發(fā)送短信的時(shí)候,同時(shí)向服務(wù)端提交一個(gè)Token參數(shù),服務(wù)端對(duì)這個(gè)Token參數(shù)進(jìn)行校驗(yàn),校驗(yàn)通過(guò)之后,再向請(qǐng)求發(fā)送短信的接口向用戶手機(jī)發(fā)送短信。
5、唯一性限制:微信產(chǎn)品,限制同一個(gè)微信ID用戶的請(qǐng)求數(shù)量
如果是微信的產(chǎn)品的話,可以通過(guò)微信ID來(lái)進(jìn)行識(shí)別,然后對(duì)同一個(gè)微信ID的用戶限制,24小時(shí)之內(nèi)最多只能夠發(fā)送一定量的短信。
6、產(chǎn)品流程限制:分步驟進(jìn)行
例如注冊(cè)的短信驗(yàn)證碼使用場(chǎng)景,我們將注冊(cè)的步驟分成2步,用戶在輸入手機(jī)號(hào)碼并設(shè)置了密碼之后,下一步才進(jìn)入驗(yàn)證碼的驗(yàn)證步驟。
7、圖形驗(yàn)證碼限制:圖形驗(yàn)證通過(guò)后再請(qǐng)求接口
用戶輸入圖形驗(yàn)證碼并通過(guò)之后,再請(qǐng)求短信接口獲取驗(yàn)證碼。為了有更好的用戶體驗(yàn),也可以設(shè)計(jì)成:一開(kāi)始不需要輸入圖形驗(yàn)證碼,在操作達(dá)到一定量之后,才需要輸入圖形驗(yàn)證碼。具體情況請(qǐng)根據(jù)具體場(chǎng)景來(lái)進(jìn)行設(shè)計(jì)。
8、IP及Cookie限制:限制相同的IP/Cookie信息最大數(shù)量
使用Cookie或者IP,能夠簡(jiǎn)單識(shí)別同一個(gè)用戶,然后對(duì)相同的用戶進(jìn)行限制(如:24小時(shí)內(nèi)最多只能夠發(fā)送20條短信)。然而,Cookie能夠清理、IP能夠模擬,而且IP還會(huì)出現(xiàn)局域網(wǎng)相同IP的情況,因此,在使用此方法的時(shí)候,應(yīng)該根據(jù)具體情況來(lái)思考。
9、短信預(yù)警機(jī)制,做好出問(wèn)題之后的防護(hù)
以上的方法并不一定能夠完全杜絕短信被刷,因此,我們也應(yīng)該做好短信的預(yù)警機(jī)制,即當(dāng)短信的使用量達(dá)到一定量之后,向管理員發(fā)送預(yù)警信息,管理員可以立刻對(duì)短信的接口情況進(jìn)行監(jiān)控和防護(hù)。
以上所說(shuō)到的方式,或許不是很完美,但是可以通過(guò)多個(gè)方式結(jié)合著來(lái)作使用,通過(guò)多個(gè)規(guī)則來(lái)降低短信被刷的風(fēng)險(xiǎn)。
相關(guān)文章
IOS 開(kāi)發(fā)之查看大圖的實(shí)現(xiàn)代碼
這篇文章主要介紹了IOS 開(kāi)發(fā)之查看大圖的實(shí)現(xiàn)代碼的相關(guān)資料,希望通過(guò)本文能幫助到大家,需要的朋友可以參考下2017-10-10iOS中json解析出現(xiàn)的null,nil,NSNumber的解決辦法
在iOS開(kāi)發(fā)過(guò)程中經(jīng)常需要與服務(wù)器進(jìn)行數(shù)據(jù)通訊,Json就是一種常用的高效簡(jiǎn)潔的數(shù)據(jù)格式,通過(guò)本文給大家介紹iOS中json解析出現(xiàn)的null,nil,NSNumber的解決辦法,感興趣的朋友參考下2016-01-01iOS11.3以下modal中input光標(biāo)錯(cuò)位的解決方法
這篇文章主要介紹了iOS11.3以下modal中input光標(biāo)錯(cuò)位的解決方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-12-12iOS中利用UIBezierPath + CAAnimation實(shí)現(xiàn)心跳動(dòng)畫(huà)效果
這篇文章主要給大家介紹了關(guān)于iOS中利用UIBezierPath + CAAnimation實(shí)現(xiàn)心跳動(dòng)畫(huà)效果的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的日常開(kāi)發(fā)具有一定的參考學(xué)習(xí),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2017-10-10iOS實(shí)現(xiàn)自定義購(gòu)物車角標(biāo)顯示購(gòu)物數(shù)量(添加商品時(shí)角標(biāo)抖動(dòng) Vie)
本文主要介紹了iOS實(shí)現(xiàn)自定義購(gòu)物車及角標(biāo)顯示購(gòu)物數(shù)量(添加商品時(shí)角標(biāo)抖動(dòng) Vie)的相關(guān)知識(shí)。具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧2017-04-04iOS開(kāi)發(fā)驗(yàn)證判斷語(yǔ)句之正則表達(dá)式小結(jié)
最近在公司接手重構(gòu)一個(gè)項(xiàng)目,發(fā)現(xiàn)之前的開(kāi)發(fā)在驗(yàn)證格式這塊寫(xiě)的太亂了,到處都有相關(guān)的驗(yàn)證代碼,所以就有了這篇文章,供自己收藏也分享給有需要的朋友們參考借鑒,下面跟著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2016-12-12淺談iOS開(kāi)發(fā)中static變量的三大作用
下面小編就為大家?guī)?lái)一篇淺談iOS開(kāi)發(fā)中static變量的三大作用。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-03-03IOS等待時(shí)動(dòng)畫(huà)效果的實(shí)現(xiàn)
查詢時(shí)間有長(zhǎng)有短,為了增強(qiáng)用戶體驗(yàn)度,目前用的比較多的手段之一是查詢等待時(shí)添加一個(gè)動(dòng)態(tài)等待效果,這篇文章主要介紹IOS等待時(shí)動(dòng)畫(huà)效果的實(shí)現(xiàn),有需要的朋友可以參考下2015-08-08