bootstrap+django搭建防跨站點攻擊登陸系統

環境:win10+mysql8.0+django2.0+bootstrap3.7

源碼已經上傳至我的github,歡迎修改使用:django2.0登錄系統

最終顯示結果:

bootstrap+django搭建防跨站點攻擊登陸系統

bootstrap+django搭建防跨站點攻擊登陸系統

bootstrap+django搭建防跨站點攻擊登陸系統


設計的主要邏輯從以下幾個方面來考慮:

1.登錄:分為get與post兩種情況,post即為提交請求,此時進行數據驗證,使用django自帶的抽象authentication類,使用login和logout類進行登入與登出。

2.註冊:填寫信息,與models層相結合,將數據存入數據庫。

3.進行頁面跳轉。

具體內容如下:

bootstrap+django搭建防跨站點攻擊登陸系統

總目錄如圖,其中app--mysite的文件內容為:

bootstrap+django搭建防跨站點攻擊登陸系統

這兩個目錄應該不需要解釋,django的基本操作。不太清楚的話,可以看我專欄的其他文章。

編寫model層(models.py)

bootstrap+django搭建防跨站點攻擊登陸系統

這裡需要說明以下,我編寫model層,並不是直接繼承的model.Model,而是繼承的django自帶的登錄系統中的AbstractUse類,這是django為了方便做登陸系統,而高度抽象出來的一個基類,查看源碼可以發現,其中已經包括了username,password,email等字段,所以你只需要再編寫你所需要的字段即可。當然你也可以重寫基類,根據python繼承的原則,子類與父類相同的屬性,父類會被子類給覆蓋。

從圖中可以看見,我在User類中,定義了一個子類class Meta,它的作用從名稱中就可看出來,是詳細的名稱verbosename是具體名稱,下面一個是複數,至於他們的作用,就是在admin後臺管理系統中能夠顯示verbose的內容,比如當我輸入的verbosename為666時,在admin.py中註冊之後的站點表名(model類名)為666,而self.name,則是點擊進入之後,你所想要顯示的提示,比如我是self.name的話,那麼他會顯示為我每天記錄的name字段。

bootstrap+django搭建防跨站點攻擊登陸系統

繼續點擊進入即可看見,每個記錄的詳細內容:

bootstrap+django搭建防跨站點攻擊登陸系統

編寫forms.py表單層:

bootstrap+django搭建防跨站點攻擊登陸系統

注意,表單層使用widget來添加表單屬性,繼承django.forms類,即可使用。

比如,如果你需要輸入的是密碼,那麼,只需要在widget中加入forms.PassInput(attrs=({"class":""},{"id":""}))。

編寫視圖層(views.py)

bootstrap+django搭建防跨站點攻擊登陸系統

bootstrap+django搭建防跨站點攻擊登陸系統

bootstrap+django搭建防跨站點攻擊登陸系統

bootstrap+django搭建防跨站點攻擊登陸系統

視圖函數這裡,有幾點需要注意,一是,我使用的是django的通用類視圖,也就是繼承了dajngo.views.generic中的View,generic中還有許多其他的類,它們都是基於View的。

編寫url.py

bootstrap+django搭建防跨站點攻擊登陸系統

什麼叫跨站點攻擊呢? 簡單來說,就是跨站點請求偽造,當你登錄一個網站時,會在你的瀏覽器上保存一個cookie,如果此時,你正好又去點擊了一個不良網站,後臺人員,便可以使用保存在你瀏覽器上的cooike以你的身份去做一些事情。

那麼dajngo如何來防止這種,情況呢?

dajngo使用偽隨機數來完成這個操作,使用起來很簡單,只需要在表單只能加入{{csrf_token}},如

bootstrap+django搭建防跨站點攻擊登陸系統

這時當我們在登錄的時候,如下圖,便會出現一串偽隨機數。可以杜絕99%的csrf。

bootstrap+django搭建防跨站點攻擊登陸系統


今天就說這麼多啦~

歡迎大家訪問我的博客:Echor's blog

更多優質內容請關注微信公眾號:生物信息與python


分享到:


相關文章: