2009-11-15 78 views
2

所以我有這個黑匣子認證方法,從帳戶的人傳給我,基本上相當於ldap_bind($connection, $username, $password)。但是,當然,我希望我的用戶能夠一次登錄30天。我應該如何將用戶的LDAP密碼存儲在cookie中?

天真但不安全的方式要處理這個問題,是將用戶名和密碼存儲在純文本cookie中,然後每次用戶訪問時使用我的黑盒驗證這些。

通常有效但不會因爲我的黑匣子的方式是將用戶的密碼存儲在數據庫中(或存儲它散列?),並將散列版本存儲在cookie中,然後比較值。這在這裏不起作用,因爲我的黑匣子要求實際密碼,而不是散列密碼。

我目前的想法是某種加密(而不是哈希)。但是,由於這顯然是一個常見問題,我認爲我最好首先問一下,看看是否有更好的解決方案,或者如果不是的話,你會爲加密/解密方法提出什麼建議。

回答

8

這不會真的回答你的問題,但你不應該存儲你的用戶密碼,甚至不加密。

如果你確實需要這樣做,並且用戶知道你在做這件事。然後將密碼存儲在應用程序的數據庫中(當然是加密的),然後向用戶發送包含散列的cookie。當用戶想要登錄時,將散列與您存儲的內容進行比較,然後僅將未加密的密碼發送到ldap。切勿將密碼(甚至未加密)發送到用戶的機器。

再次,這是一個非常糟糕的做法。如果ldap不允許存儲會話/密碼,那麼這可能是一個很好的理由。

+0

這不太好,因爲我不想保留用戶名/密碼數據庫---這是LDAP的工作。我只想驗證用戶發送給我的用戶名/密碼組合是否經過了LDAP驗證,如果是,請讓他們保持登錄狀態一段時間。 在cookie中加密的密碼是一個巨大的安全問題? – Domenic 2009-11-15 18:50:22

+0

Cookie中令人遺憾加密的密碼是一個很大的安全問題,所以你不應該這樣做。 但是,我想你誤解了我。你不會在你的應用中驗證用戶名和密碼。您將存儲加密密碼+用戶名和密碼+用戶名的散列。發送散列作爲cookie。然後,如果用戶未登錄獲取cookie值,請檢查密碼/用戶名的散列,如果一切正常,則將它們發送到ldap。同樣,如果LDAP不支持自動登錄,那麼您就可以執行所有操作。 (或告訴用戶使用瀏覽器的「保存密碼」..) – 2009-11-16 08:50:11

0

當用戶登錄時,給他們一個隨機產生的「會話cookie」(不是嚴格意義上的會話cookie,因爲它會持續更長的時間比瀏覽會話)和儲存元組:

USER_ID | cookie_id

然後連接cookie_id將user_id加入您的用戶表中,然後關閉。

相關問題