就是在一個前臺注冊頁面上,我假如就只有一個手機號框,一個驗證碼框,然后我要注冊,驗證碼驗證用阿里的介面,當我點擊獲取驗證碼的時候然后發過來我的手機上,這時我還沒點注冊,當我在去修改手機號的時候,這時就出現安全漏洞了,這個問題應該具體點怎么求解,我稍微有一點不知道具體在哪里改,也就是說這時手機號就必定跟驗證碼系結在一起了,但我確實不知道在哪里判定,判定的地方還是有一點模糊的,有大神指點一下嗎
uj5u.com熱心網友回復:
肯定是在資料庫進行系結了uj5u.com熱心網友回復:
注冊的時候怎么保證手機號和驗證碼是系結的,這個是主要的解決問題,因為測驗的時候是只要驗證碼是對的,手機號只要通過了正則驗證就可以隨便輸
uj5u.com熱心網友回復:
首先,第一次驗證碼,也是后臺進行呼叫,用你輸入的正確的手機號去獲取,此時需要記錄驗證碼和對應的手機號。uj5u.com熱心網友回復:
接著,用戶第二次提交注冊,此時提交了一個修改后的手機號碼,以及方才發送的正確的驗證碼,你需要和剛才你保存的手機號碼和驗證碼進行匹配比較,全部一致,才能進行注冊,不一致提示相應的提示資訊即可。uj5u.com熱心網友回復:
用的那個form標簽里的onsubmit=return 方法()這種方式,這個方法的回傳布林值決定是否提交,那應該在那里去進行系結匹配呢
uj5u.com熱心網友回復:
我應該在用戶點擊獲取驗證碼的時候就將手機號和驗證碼系結記錄下來嗎,然后點擊注冊的時候進行驗證手機號嗎,我的判斷全部是前臺用js進行判斷的,好像后臺只有添加的功能
uj5u.com熱心網友回復:
都是前端判斷,像你說的有漏洞,所以需要交給服務器來記錄和判斷。
uj5u.com熱心網友回復:
雖然你呼叫的是阿里的驗證碼獲取,但是你還可以寫一個私有的介面,保存你獲取驗證碼的手機號+回傳的驗證碼存到資料庫,注冊提交的時候,先去自己的資料庫查詢驗證碼+手機是否存在,存在才能進行保存操作。uj5u.com熱心網友回復:
接著,用戶第二次提交注冊,此時提交了一個修改后的手機號碼,以及方才發送的正確的驗證碼,你需要和剛才你保存的手機號碼和驗證碼進行匹配比較,全部一致,才能進行注冊,不一致提示相應的提示資訊即可。
我應該在用戶點擊獲取驗證碼的時候就將手機號和驗證碼系結記錄下來嗎,然后點擊注冊的時候進行驗證手機號嗎,我的判斷全部是前臺用js進行判斷的,好像后臺只有添加的功能
都是前端判斷,像你說的有漏洞,所以需要交給服務器來記錄和判斷。
我好像突然懂你說的了,我可以在發送驗證碼的時候同時回傳給前端一個驗證碼和手機號,然后前端提交的時候在判斷手機號和驗證碼同時成立才能提交,否則在前端給出相應的錯誤提示資訊
uj5u.com熱心網友回復:
為什么搞這么復雜?發送短信成功后,代碼session.setAttribute(phoneNumber,code)。。就是已phonenumber作為key把code保存到session中。。驗證的時候同時把phoneNumber和驗證碼提交到后臺驗證,session.getAttribute(phoneNumber)。。如果phoneNumber改變了,自然取出來的資料為空,自然驗證不成功。
uj5u.com熱心網友回復:
為什么搞這么復雜?
發送短信成功后,代碼session.setAttribute(phoneNumber,code)。。就是已phonenumber作為key把code保存到session中。。驗證的時候同時把phoneNumber和驗證碼提交到后臺驗證,session.getAttribute(phoneNumber)。。如果phoneNumber改變了,自然取出來的資料為空,自然驗證不成功。
如果是html頁面,因為我的是html頁面,就只能在js里面驗證了,發送驗證碼的時候用post請求訪問后臺,然后回傳手機號和驗證碼給前端,但因為是表單,所以我在form標簽里面用了onsubmit:return 方法名(),這個方法的回傳布林值確定提不提交表單
uj5u.com熱心網友回復:
為什么搞這么復雜?
發送短信成功后,代碼session.setAttribute(phoneNumber,code)。。就是已phonenumber作為key把code保存到session中。。驗證的時候同時把phoneNumber和驗證碼提交到后臺驗證,session.getAttribute(phoneNumber)。。如果phoneNumber改變了,自然取出來的資料為空,自然驗證不成功。
但我發現不能用兩個普通型別裝手機號和驗證碼,因為第二次點第二次注冊按鈕它就又提交了,感覺可以用一個物件來把手機號碼和驗證碼封裝起來,然后在比較手機號和驗證碼就估計應該可以了,用普通型別還不行。
uj5u.com熱心網友回復:
為什么搞這么復雜?
發送短信成功后,代碼session.setAttribute(phoneNumber,code)。。就是已phonenumber作為key把code保存到session中。。驗證的時候同時把phoneNumber和驗證碼提交到后臺驗證,session.getAttribute(phoneNumber)。。如果phoneNumber改變了,自然取出來的資料為空,自然驗證不成功。
如果是html頁面,因為我的是html頁面,就只能在js里面驗證了,發送驗證碼的時候用post請求訪問后臺,然后回傳手機號和驗證碼給前端,但因為是表單,所以我在form標簽里面用了onsubmit:return 方法名(),這個方法的回傳布林值確定提不提交表單
uj5u.com熱心網友回復:
肯定是在資料庫進行系結了
注冊的時候怎么保證手機號和驗證碼是系結的,這個是主要的解決問題,因為測驗的時候是只要驗證碼是對的,手機號只要通過了正則驗證就可以隨便輸
這種場景的系結關系 大多數是發送短信時 手機號作為key 驗證碼作為val 存盤到redis 或其他DB,接下來是提交驗證碼部分 過了手機號正則之后 緊接著 是一個 if(!rediss.haskey(mobile))return "操作非法"; 這個判斷就可以防止 題主說的那種 發過短信后 更改手機號的操作 緊接著 else{在這個位置判斷 手機號存在的狀況下 驗證碼是否正確} 大致思路就是這樣
uj5u.com熱心網友回復:
還是感徑訓沒去搞這個東西,之后再去測驗一下,就在js里面驗證uj5u.com熱心網友回復:
用戶填上手機號,點擊發送驗證碼,這個程序在后臺,你用redis存一下就可以了...鍵是手機號,值是驗證碼...用戶點注冊到后臺,你根據用戶傳過來的手機號去redis查,如果根據手機號查不出來,就證明手機號不對,或者是驗證碼已經過期失效了...給前臺回傳錯誤資訊就可以了...如果手機號和驗證碼正確,并能成功從redis庫中取到,那就成功把注冊資訊入庫就可以,成功后給前臺一個狀態表示成功就OK了唄僅供參考
uj5u.com熱心網友回復:
噢噢redis這個方法還不錯,可是已經快成功了就沒有存到redis里面,就存到了資料庫里面??轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/110230.html
標籤:Java EE
上一篇:計算機二級公共基礎知識
下一篇:mysql舊表資料移到新表
