python簡易實現的 csrf防護
阿新 • • 發佈:2018-12-07
上一篇講的是用flask-wtf這個庫實現csrf防護
https://blog.csdn.net/he93007/article/details/79980956
這篇講一下手動實現.
按業務流程來講
1 使用者發起了登入請求
{username:xxxx,passwd:xxxx}
2 後端查詢資料庫 使用者名稱密碼是否正確,是否存在使用者
3 存在使用者且密碼正確,我們則需要返回一個token.
查資料庫or快取檢視token(我們這裡只生成一次,所以檢視token,你也可以每次都生成新的)
有token返回它.,
如果已經過期或者沒有token.
則生成一個新的token
python 有 uuid模組
import uuid
# 方法指定一個32個字元構成的字串來建立一個UUID物件
token=uuid.uuid1().hex
4 儲存token,一般來說儲存在mysql/postgresql 的使用者表裡的token欄位就可以了,為了高併發你也可以儲存在
redis(快取還能設定有效期) 比如 token_userid_123: xxxxxx
5 前端收到token
{code:200,msg:'登入成功',token:'xxxxxxx'}
6 前端儲存這個token
html5標準中一個亮點就是提供了瀏覽器本地儲存的功能.除了cookie
我們還可以存在localStorage裡面.並且有瀏覽器的同源策略的保護.
7 登入狀態實現
前端訪問需要登入的api時,可以先訪問瀏覽器localStorage,獲取token
將token放入請求中
{token:'xxxxx',adb:'abc',xyz:'xyz'}
8 後端api驗證----需要登入的api
獲取到前端的token.查詢快取or資料庫.同時還能查詢出使用者資訊.進行後續操作.