2010-09-13 40 views
0

我有一個忘記密碼的頁面,我需要從用戶那裏詢問他的用戶ID,以便從數據庫提供他的密碼,並且它正在工作,但如果有人輸入任何錯誤,該怎麼辦用戶名。檢查數據庫中用戶ID的可用性

回答

1

您必須做SELECT檢查是否存在記錄,如果是,繼續。

1

只需返回一條消息,指出他們輸入了錯誤的用戶標識。

0
SELECT * FROM users WHERE username = inputhere 

if (mysql_num_rows($result) > 0) 
{ 
    // found it 
} 
else 
{ 
    // doesn't exist 
} 

這是你在找什麼?

1

如果你問你在做什麼,如果他們完全給你另一個用戶的有效ID,那麼我假設你正在做的事情與你正在恢復的密碼相當不安全(你不只是向他們展示密碼是你的嗎?) - 大多數這樣的系統會通過電子郵件向你發送密碼,至少可以保證只有相關的電子郵件帳戶才能獲得密碼。

2

請注意,在此有一定的風險度量。如果您總是回覆一條消息,指出用戶標識不正確,則可以用它來猜測系統中的用戶標識。攻擊者可以使用通用名稱的變體對此表單進行暴力破解,並最終獲得大量用戶名單。對於任何給定的帳戶,這爲他們提供了以該用戶身份登錄所需的一半信息。

我建議您顯示一條消息,指出已向該帳戶的電子郵件地址發送一封電子郵件,其中包含重置密碼(包括重置所需的時間敏感密鑰)的說明,無論用戶系統中是否存在ID。如果他們沒有收到電子郵件,他們總是可以再次嘗試(假設第一次嘗試在用戶標識中包含錯字)。如果他們實際上並不知道他們的用戶ID,可以通過輸入他們的電子郵件地址來恢復該表格(表現方式與此表格類似,總是在表格上顯示成功,並在適用的情況下發送電子郵件)。

2

您必須執行以下3個步驟來確保嚴密的安全。

1)基於用戶標識從數據庫中獲取用戶信息。如果信息爲空,則向用戶發送錯誤,表示無效的UserId。

2)a)如果您在用戶創建時註冊了EmailId,則將密碼發送到註冊郵件。 b)如果您沒有註冊EmailId,請詢問並匹配用戶註冊時選擇的安全問題。 3)如果可能的話,嘗試合併a)& b)點2)的點以獲得更高的安全性。