Python Web 開發(fā)筆記(2)

登錄流程及防止跨域偽造攻擊

第 1 步

瀏覽器使用 POST 方法發(fā)送登錄請求瓶逃。

服務器收到瀏覽器發(fā)來的請求箩朴,Flask 框架在處理請求的時候芹缔,利用 Flask-WTF 插件生成一個隨機的字符串养匈,下圖所示:

40 位 16 進制的隨機字符串

這個就是 csrf_token 字段廉白,它會經過 A 令牌生成器生成一個令牌塞到響應 body 的表單的隱藏域里。

第 2 步

每個請求都由一個單獨的線程處理乖寒,這個線程會創(chuàng)建一個請求上下文對象,它有個 session 屬性院溺,屬性值是類字典對象楣嘁。

捎帶腳,這個「 csrf_token 字段及其值」會作為「請求上下文對象的 session 屬性值」的鍵值對珍逸,這個字典的鍵值對可能很多逐虚,例如 _id (它是根據 IP 地址和 USER_AGENT 生成的 128 位字符串)、_user_id 是用戶存在數據庫里的主鍵等等谆膳。

先瞎編一個字典:

然后有一個 B 令牌生成器將「請求對象的 session 屬性值」作為參數調用令牌生成器的 dumps 方法叭爱,就生成了一個字符串,它就是 session

這個 session 字符串會被扔到響應對象的頭部字典的 Set-Cookie 鍵中漱病,粗略代碼如下:

response.headers.add('Set-Cookie', b'session={}'.format(session))

響應對象傳回瀏覽器买雾,瀏覽器設置 Cookies 后,Cookies 鍵值對中就有了 session 字段杨帽。

額外說明:瀏覽器首次訪問網站時漓穿,Flask Web 應用也會在響應對象中提供一個 session ,如果響應 body 有表單注盈,也會在隱藏域中提供 csrf_token 晃危。

第 3 步

瀏覽器再次發(fā)送了一個請求,假設是帶表單的 POST 請求老客,修改用戶信息之類的操作僚饭。

這個請求對象里就攜帶了 cookies 和表單震叮,表單里有 csrf_token 的加密令牌。

服務器收到請求后鳍鸵,把表單隱藏域中的值拿出來使用 A 令牌生成器解密并賦值給一個變量苇瓣,我們假設它是 c1 。

把 cookies 里的 session 字段的值拿出來权纤,使用 B 令牌生成器解密得到字典:

然后從中拿出 csrf_token 字段的值跟 c1 比較钓简,就可以判斷這個請求了。

如果壞人使用「跨域偽造攻擊」汹想,可以得到用戶瀏覽器上的 cookies 外邓,也就得到了 session ,但它得不到表單隱藏域 csrf_token 古掏,這個 csrf_token 跟 session 是一套损话。

防止 CSRF 跨域偽造攻擊

  • 用戶訪問「某某銀行」的網站,登錄后槽唾,瀏覽器保存帶有 session 的 Cookies

  • 而 csrf_token 呢丧枪,它作為一個 40 位的字符串,會被加密成一個更復雜的字符串

  • 這個字符串被放到響應對象的 body 中的表單的隱藏域里頭庞萍,返回給瀏覽器

  • 也就是說只有包含表單的頁面才有這個 csrf_token 拧烦,下圖所示:

  • 現在攻擊者誘導用戶訪問釣魚網站,釣魚網站獲取用戶的 Cookie
  • 然后自動使用 POST 方法訪問地址钝计,這個地址就是轉賬請求恋博,這個請求會帶上偷來的 Cookie
  • 雖然有偷來的 Cookie ,但沒有表單的隱藏字段 csrf_token 私恬,所以請求會失敗
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末债沮,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子本鸣,更是在濱河造成了極大的恐慌疫衩,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,627評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件荣德,死亡現場離奇詭異闷煤,居然都是意外死亡,警方通過查閱死者的電腦和手機涮瞻,發(fā)現死者居然都...
    沈念sama閱讀 95,180評論 3 399
  • 文/潘曉璐 我一進店門曹傀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人饲宛,你說我怎么就攤上這事皆愉。” “怎么了?”我有些...
    開封第一講書人閱讀 169,346評論 0 362
  • 文/不壞的土叔 我叫張陵幕庐,是天一觀的道長久锥。 經常有香客問我,道長异剥,這世上最難降的妖魔是什么瑟由? 我笑而不...
    開封第一講書人閱讀 60,097評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮冤寿,結果婚禮上歹苦,老公的妹妹穿的比我還像新娘。我一直安慰自己督怜,他們只是感情好殴瘦,可當我...
    茶點故事閱讀 69,100評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著号杠,像睡著了一般蚪腋。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上姨蟋,一...
    開封第一講書人閱讀 52,696評論 1 312
  • 那天屉凯,我揣著相機與錄音,去河邊找鬼眼溶。 笑死悠砚,一個胖子當著我的面吹牛,可吹牛的內容都是我干的堂飞。 我是一名探鬼主播灌旧,決...
    沈念sama閱讀 41,165評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼酝静!你這毒婦竟也來了?” 一聲冷哼從身側響起羡玛,我...
    開封第一講書人閱讀 40,108評論 0 277
  • 序言:老撾萬榮一對情侶失蹤别智,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后稼稿,有當地人在樹林里發(fā)現了一具尸體薄榛,經...
    沈念sama閱讀 46,646評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,709評論 3 342
  • 正文 我和宋清朗相戀三年让歼,在試婚紗的時候發(fā)現自己被綠了敞恋。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,861評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡谋右,死狀恐怖硬猫,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤啸蜜,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布坑雅,位于F島的核電站,受9級特大地震影響衬横,放射性物質發(fā)生泄漏裹粤。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,196評論 3 336
  • 文/蒙蒙 一蜂林、第九天 我趴在偏房一處隱蔽的房頂上張望遥诉。 院中可真熱鬧,春花似錦噪叙、人聲如沸矮锈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽愕难。三九已至,卻和暖如春惫霸,著一層夾襖步出監(jiān)牢的瞬間猫缭,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評論 1 274
  • 我被黑心中介騙來泰國打工壹店, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留猜丹,地道東北人。 一個月前我還...
    沈念sama閱讀 49,287評論 3 379
  • 正文 我出身青樓硅卢,卻偏偏與公主長得像射窒,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子将塑,可洞房花燭夜當晚...
    茶點故事閱讀 45,860評論 2 361