如何在 Django 中防止會話劫持?


會話劫持或會話偽造是大多數網站容易受到攻擊的另一個安全問題。在本文中,我們將進一步瞭解這種攻擊以及如何保護您的網站免受其侵害。

這是一類廣泛的使用者會話資料攻擊,而不是具體的攻擊。它有多種形式,如下所述。

  • 中間人攻擊發生在攻擊者攔截網路上傳輸的會話資料時。

  • Cookie 偽造攻擊是另一種型別,其中攻擊者會更改儲存在 Cookie 中的看似只讀資料。儲存了諸如 IsLoggedIn=1 或 LoggedInAsUser=ram 之類的 Cookie 的網站有著悠久的歷史。利用這些 Cookie 易如反掌。

    因此,您永遠不應該相信儲存在 Cookie 中的任何內容;您永遠不知道誰一直在挖掘它們。

  • 攻擊者可以使用會話固定來欺騙使用者更改或重置其會話 ID。

    例如,PHP 允許使用會話識別符號。這些會話 ID 必須在 URL 中給出(例如,http://exg.com/?PHPSESSID=gja65k02n93a32)

  • 攻擊者使用可能透過中間人攻擊獲得的會話 ID 來假裝成另一個使用者。

    例如,在購物中心,攻擊者可能會使用商店的無線網路來捕獲會話 Cookie。然後,她可以使用該 Cookie 模仿原始使用者。

  • 當用戶被誘騙點選包含硬編碼會話 ID 的連結時,該會話會被使用者獲取。網路釣魚攻擊利用會話固定來欺騙使用者將其個人資訊輸入到攻擊者控制的帳戶中。他稍後可以透過登入該帳戶來檢索資訊。

  • 攻擊者將潛在的危險材料注入使用者的會話中,這被稱為會話中毒。這通常透過使用者填寫以設定會話資料的 Web 表單來完成。

以上是一些會話可能被偽造的方式。現在我們將瞭解如何克服會話劫持的威脅。

會話劫持的解決方案

有一些廣泛的指南可以幫助您避免這些攻擊 -

允許會話資訊包含在 URL 中從來都不是一個好主意。Django 中的會話機制根本不允許將會話包含在 URL 中。

不要直接將資料儲存在 Cookie 中,而是儲存一個與後端維護的會話資料相對應的會話 ID。如果您使用 Django 的內建會話框架 request.session,則會自動為您處理此問題。會話框架僅使用單個會話 ID Cookie。資料庫儲存所有會話資料。

如果您想在模板中顯示會話資料,請記住對其進行轉義。

在任何可能的情況下,阻止攻擊者欺騙會話 ID。儘管檢測到劫持了會話 ID 的人幾乎是不可能的,但 Django 具有針對暴力破解會話攻擊的內建保護。會話 ID 儲存為雜湊值而不是連續整數,以防止暴力破解攻擊,如果使用者嘗試不存在的會話 ID,她將始終獲得一個新的會話 ID,從而防止會話固定。

這些概念或技術都不能防止中間人攻擊。識別此類攻擊幾乎是不可能的。如果登入使用者可以訪問您網站上的敏感資料,則應始終透過 HTTPS 提供服務。

最後,如果您啟用了 SSL 的站點,請將 SESSION COOKIE SECURE 設定為 True;這將強制 Django 僅透過 HTTPS 傳輸會話 Cookie。

透過這些方式,可以控制和監控會話劫持。

更新於: 2022-09-05

930 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.