2011-12-12 95 views
8

我有用戶登錄,但用戶可以以不區分大小寫的方式登錄意味着如果您的密碼是'測試',那麼用戶可以用'TEST'密碼登錄。
我想在我的密碼字段中避免這種類型的身份驗證。如何使用區分大小寫的MySQL密碼字段?

回答

13

最簡單的方法是使用binary關鍵字查詢中使用:

SELECT /*fields*/ FROM table WHERE /* where clause */ BINARY password = "userpassword" 

OR

使用strcmp在PHP代碼:

你可以,如果你存儲使用,這也散列或加密的密碼,我推薦。

5

我想你是在清楚地存儲密碼。這不僅非常不安全,在大多數情況下也是不必要的。我的建議是密碼儲存在兩列,如:

password_salt VARCHAR(16) 
password_hash VARCHAR(40) 

存儲新密碼之前,採取由用戶($clear_password)提供的密碼,創建一個隨機字符串($salt),並同時使用,以創建哈希(sha1sum($salt . $clear_password)。存儲salt和hash並丟棄清除密碼。

要驗證密碼,請爲給定用戶檢索存儲的salt,生成散列並查看它是否與數據庫中的散列匹配。

該技術被稱爲salted passwords

+0

感謝您的快速響應,它的安全風險的好主意 – SKu

+1

@SKu請首先閱讀 - http://codahale.com/how-to-safely-store-a-password/。使用sha1是不夠的。 –

+0

有利於安全,但不必對問題做任何事情? – joel