1. 程式人生 > >python簡易實現的 csrf防護

python簡易實現的 csrf防護

上一篇講的是用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資料庫.同時還能查詢出使用者資訊.進行後續操作.