浮華編思論-走在初創(chuàng)公司的那些事(3)

用戶都是一個(gè)公司的核心。本次我們討論用戶的問題。

創(chuàng)建簡單的用戶表。編號(hào)id,姓名,賬號(hào)密碼,創(chuàng)建初始時(shí)間,登錄時(shí)間,用戶狀態(tài)。這些都是很基本的一些狀態(tài)記錄。

互聯(lián)網(wǎng)都是虛擬網(wǎng)絡(luò),現(xiàn)在網(wǎng)絡(luò)賬號(hào)跟你本身身份并沒有很強(qiáng)的綁定,所以一般是手機(jī)號(hào)實(shí)名認(rèn)證,那么用手機(jī)號(hào)來代替你的賬號(hào)居多。

1.基本的手機(jī)號(hào)不能重復(fù)注冊,以及基本的手機(jī)號(hào)前端認(rèn)證是用對(duì)應(yīng)的正則匹配去實(shí)現(xiàn)

2.怎么去校驗(yàn)手機(jī)號(hào)的歸屬人是注冊人,那么就要利用短信驗(yàn)證,這里使用的是阿里大魚的短信驗(yàn)證,看需要包套餐可以便宜一些,例外注意申請需要一定時(shí)間,需要提前一些去申請,才不會(huì)拖到后面,匆匆忙忙被打回重新申請,對(duì)接也簡單就是對(duì)應(yīng)sdk引入,然后你在阿里的一些信息固定,進(jìn)行調(diào)用

3.手機(jī)賬號(hào)輸入時(shí)候,只要號(hào)碼符合正則就運(yùn)行進(jìn)行去阿里大魚短信校驗(yàn),那么問題來了,用戶如果胡亂輸入,只要通過短信前端正則校驗(yàn)就可以傳遞到后臺(tái)進(jìn)行阿里大魚校驗(yàn),只要經(jīng)過這一步到后端,就會(huì)讓你調(diào)用阿里接口,就開始計(jì)費(fèi)。

這里你需要考慮的是這幾方面的問題,1.手機(jī)號(hào)碼是否符合,首先是前端正則過濾一層,這個(gè)基本過濾亂試的一些,比如是111111,這種沒技術(shù)含量的

2.別人稍微帶惡意攻擊的,通過F12,找到你注冊賬號(hào),或者向用戶手機(jī)發(fā)送短信校驗(yàn)的接口,用python跟java也可以實(shí)現(xiàn),java可能利用httpclient,沒有python那么方便。應(yīng)對(duì),1.加上圖片校驗(yàn),需要滑動(dòng),然后圖片達(dá)成完整。這種杜絕很大部分無腦的。(后續(xù)是,這種對(duì)js有要求的,360兼容模式跟ie不是很支持,所以之后降級(jí)為就一劃到底的那種,別問,問就是不是做不到,而是要考慮用戶的電腦瀏覽器是不一樣的,你要做到符合大部分。當(dāng)然你也可以判斷用戶瀏覽器,然后分開判斷是選用拼湊成完整圖片還是一劃到底,不過二者對(duì)比效果差不多)。3.進(jìn)行ip的記錄,也就是對(duì)于同一個(gè)ip如果頻繁調(diào)用,就進(jìn)行ip禁止掉(實(shí)現(xiàn)方法,初級(jí)實(shí)現(xiàn)數(shù)據(jù)庫記載,你可以記錄xxip進(jìn)行xx手機(jī)號(hào)碼訪問,然后失敗了,每次ip過來查詢,都調(diào)用數(shù)據(jù)庫,查看某段時(shí)間內(nèi)這個(gè)ip發(fā)送的次數(shù),然后如果超過比如10次就禁止掉。這種注冊會(huì)頻繁調(diào)用數(shù)據(jù)庫,試想一下,如果某個(gè)ip發(fā)送很多數(shù)據(jù)過來,你本來是調(diào)用阿里大魚接口一次,現(xiàn)在變得需要頻繁調(diào)用數(shù)據(jù)。數(shù)據(jù)庫每秒最高不超過2000次查詢,這樣阿里大魚接口跟數(shù)據(jù)庫之間要崩潰一個(gè)。? 中級(jí) 引入redis中間件,拿redis當(dāng)緩存,某個(gè)ip進(jìn)行查詢,當(dāng)失敗稍后,進(jìn)行次數(shù)記錄,每次查詢前,先調(diào)用redis中獲取對(duì)應(yīng)ip的查詢次數(shù),可以設(shè)置過期時(shí)間,比如某個(gè)號(hào)碼在5分鐘內(nèi),如果發(fā)送10次+,就認(rèn)為是進(jìn)行惡意,那么壓力就到了redis,這種是比較合理的。 高級(jí),阿里大魚本身有針對(duì)號(hào)碼的設(shè)置,某個(gè)號(hào)碼是否可以頻繁發(fā)送,當(dāng)然這種只能針對(duì)號(hào)碼,無法針對(duì)ip,所以一般是使用中級(jí)的。 之所以說是高級(jí),是因?yàn)槭前⒗锎篝~本身提供的,總比自己的更穩(wěn)健不是 )【當(dāng)然如果某些惡意破壞,使用多ip進(jìn)行攻擊,這種當(dāng)初查找過資料,但是基本沒有很好的解決辦法。原因如下,一個(gè)是ip進(jìn)行攻擊,比較隨機(jī),你可以禁止某個(gè)手機(jī)號(hào)在短時(shí)間內(nèi)進(jìn)行校驗(yàn),也可以禁止某個(gè)ip進(jìn)行,但是不同ip進(jìn)行訪問,沒有辦法有效判斷,另外一半多ip也是需要花錢購買,小公司一般沒人那么搞你。另外一種就是人工,類似手機(jī)號(hào)碼的呼死你,發(fā)群里,然后一群人進(jìn)行注冊,這種防不住,模擬真實(shí)人工注冊,不過成本也很大。簡稱互相傷害吧】

4.用戶注冊成功了,那么用戶進(jìn)行操作時(shí)候,怎么確定是本人。最基本版本是你登錄了就驗(yàn)證一次,之后都不驗(yàn)證,一般就當(dāng)你是普通用戶了,這種會(huì)導(dǎo)致一些免費(fèi)功能被別人隨意使用,爬蟲難度系數(shù)極地,直接調(diào)用你接口就能用了,因?yàn)槟阒皇窃诘卿洉r(shí)候進(jìn)行校驗(yàn),在接口不設(shè)防

版本2.0 給用戶表加上一個(gè)token,每次登錄就更新token,然后調(diào)用接口時(shí)候,你的session中放值token,每次調(diào)用都對(duì)比數(shù)據(jù)庫token是否一致,如果一致認(rèn)為是當(dāng)前用戶,不一致就要求重新登錄,然后重新登錄獲取最新token。使用也是頻繁調(diào)用數(shù)據(jù)庫,同理,這種重復(fù)事情交給緩存,登錄之后對(duì)應(yīng)token放值到redis,并設(shè)置8小時(shí)的過期時(shí)間,redis主要解決一些頻繁使用的數(shù)據(jù)在一次會(huì)話中,可以拿來校驗(yàn)。這個(gè)大致可以滿足線上作用了。當(dāng)調(diào)用接口時(shí)候,對(duì)應(yīng)token去redis查詢是否存在,如果存在就放行?!緜蔚卿?,既然扯到登錄,這里可以設(shè)置一個(gè)偽登錄,用戶的賬號(hào)密碼是你可以看到賬號(hào)也就是手機(jī)號(hào)碼,但是密碼一般是經(jīng)過加密,數(shù)據(jù)庫不存放明文密碼,為了安全起見,你可以在head放置一個(gè)usertoken這樣的一個(gè)值,當(dāng)做這個(gè)值是某個(gè)特殊值時(shí)候,運(yùn)行跳過登錄密碼校驗(yàn),直接成功,同理也跳過接口調(diào)用驗(yàn)證。好處是某些用戶你可以進(jìn)行一些問題的場景重現(xiàn),壞處是開發(fā)團(tuán)隊(duì)的新人不要亂搞,數(shù)據(jù)已已經(jīng)是真實(shí)數(shù)據(jù)了,你的操作,會(huì)影響到用戶的真實(shí)體驗(yàn)】

版本3 后續(xù)的衍生 以上只是簡單的token拿來驗(yàn)證用戶身份,可以跟用戶角色進(jìn)行綁定,驗(yàn)證是否有操作權(quán)限,以及可以后續(xù)集成使用jwt,來進(jìn)一步讓token攜帶更多信息,不過這部分是了解到的技術(shù)拓展,并未應(yīng)用到線上。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容