zouber / Fanshop

1 stars 0 forks source link

Python Session 參考 #479

Open zouber opened 10 years ago

zouber commented 10 years ago

https://github.com/maxcountryman/flask-login --> 一個 python flask 的 session 套件,可以去看看別人怎麼去實做 Session

加密的 lib: bcrypt --> 會產生難以還原的加密字串,且同一字串每次加密產生的字串都不同

zouber commented 10 years ago

目前對於 Session 初步的設計如下:

  1. 當使用者滿足授權時(授權頁面使用 https 所以就算傳輸的密碼為明碼也沒關係),後台會根據特殊的一段演算法算出一段 hash 值(例如:uid + base64(user_name) + system_time + ip 之類的, 為求安全起見, 計算結果每次登入都會不同),連同 uid 回傳到前端,這段 hash 值和uid 就會被存在 browser 的 cookie 中,會設定過期時間,同時也會被儲存在對應 user 的 db 欄位裡面(db 裡面同時也會儲存何時 session 過期)
  2. 只要使用者打開瀏覽器,後台基礎(被繼承的) handlers 程序就會自動去檢查使用者 cookie 裏頭是否帶有這段 hash 值和 uid,如果是,則去查找是否有 user 目前的 session 是這個的,如果有,又和 uid 吻合+ session 還沒過期的話,則認定 user 就是這個人; 否則就會認為使用者沒有登入,清掉他相關的 cookie(如果有的話)
  3. Cookie 過期則必須重新輸入帳號密碼,又恢復無登入狀態

如果有人盜用這個 hash 值,那他能夠盜用的時間就只有此 session 過期前,一旦過期就必須重新認證,那時就算 session 正確也不會通過身份認證

同理延伸到 api 的安全性,往後 api 也必須走這樣的機制,帶上 hash 值(類似 access token),且 hash 值要對應到正確的 user 才行(而不是像現在 uid 帶什麼我們就認為是誰),否則不執行操作

zouber commented 10 years ago

http://www.codecoffee.com/articles/session1.html