註冊帳號,不要儲存密碼到資料庫

最近做帳號註冊的功能,偶然想到,為什麼以往老是在資料表放一個 password 欄位呢?那麼,如果不要 password 欄位,該怎麼做?

資料表定義:用 postgres 的 SQL 寫,

create table member (ID serial primary key, account text, salt int default floor(random() * 1000000), auth_code char(32));

註冊的 SQL :先填帳號,並取回 salt

insert into member (account) values (user@hello.com) returning ID;

再補 auth_code 進去:假設 password = ‘123‘ , ID = 20

update member set auth_code = md5(123 || to_char(salt, '999999')) where ID = 20;

登入時的認證:須提供帳號與密碼,然後,

select * from member where account = user@hello.com and auth_code = md5(123 || to_char(salt, '999999'));

以上這樣,不會在資料庫中看到密碼。而假如使用者忘記密碼,就設計更換密碼的流程給他囉。

廣告

About 黃耀賢 (Yau-Hsien Huang)

熱愛 Erlang ,並且有相關工作經驗。喜歡程式語言。喜歡邏輯。目前用 Python 工作。
本篇發表於 Web Programming 並標籤為 。將永久鏈結加入書籤。

One Response to 註冊帳號,不要儲存密碼到資料庫

  1. 黃耀賢 (Yau-Hsien Huang) 說道:

    得知「我的密碼沒加密」網站 http://plainpass.com ,值得參考。

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s