儲存密碼的方式

主要是參考「Cryptographic Right Answers」這篇給的建議:

Password handling: As soon as you receive a password, hash it using scrypt or PBKDF2 and erase the plaintext password from memory.
Do NOT store users' passwords. Do NOT hash them with MD5. Use a real key derivation algorithm. PBKDF2 is the most official standard; but scrypt is stronger.
Please keep in mind that even if YOUR application isn't particularly sensitive, your users are probably re-using passwords which they have used on other, more sensitive, websites -- so if you screw up how you store your users' passwords, you might end up doing them a lot of harm.

其中 scrypt 是作者自己發展的演算法,這邊看看就好。

你可以用 PBKDF2 (RFC 2898)。這邊假設的前提是,你不需要常常重複計算使用者的密碼是否正確。在這個前提下,我們可以把演算法弄得很複雜,而且很耗時,要複雜到用硬體加速也無法產生實質上有效的攻擊。

如果你對密碼學這個領域並不熟,Colin Percival 這篇文章可以拿來當做起點,文章裡面告訴你,某些類型的問題會用某些工具解決。

WordPress plugins 安全性問題

TechCrunch 上看到 WordPress.org 強制所有 WordPress.org 的使用者更新密碼 (不是 WordPress.com):「WordPress.org Forces Password Resets Due To Compromised Plugins」。

起因是 AddThisWPtouch 以及 W3 Total Cache 這三個 plugin 有異常 commit 塞入 backdoor code。(瞬間就中兩槍)

這幾天有更新 plugin 的人最好趕快看一下... 慘啊 :/

Sony 密碼分析...

好像每次有密碼被流出來就會有人做類似的事情:「A Brief Sony Password Analysis」。

這次分析的內容中有個不一樣的部份,大概是因為有不少「資料」可以「參考」,所以就拿來交叉比對了:

67% of accounts on both Sony and Gawker use the same password.

oops... :(

關於重設密碼的步驟

這應該有很標準的程序,不過好像還是有很多站沒這樣做...

必要的步驟包括:

  • 如果使用者只記得 username,輸入後告知使用者「已經發送確認信至 username 當初所註冊的信箱」。
  • 如果使用者只記得 e-mail,輸入後告知使用者「已經發送確認信至該 e-mail」,如果該 e-mail 沒有被註冊也不要有不同的訊息,因為如果可以判斷 e-mail 有沒有不同的訊息,可以利用這個功能大致判斷某個人有沒有註冊這個服務。
  • 基本上都要加上 CAPTCHA 以及對 IP rate limit 避免有人利用這個行為惡搞。

要注意的是要透過「確認信」的步驟再改密碼,而不能在要求重設密碼時就馬上把密碼改掉,不然就可以惡搞使用者。