保護用戶數(shù)據(jù)是任何網(wǎng)站設計的重要部分。我們之前在文章web安全中解釋了一些更常見的安全威脅--本文提供了Django的內(nèi)置保護如何處理這些威脅的實際演示。
概述節(jié)web安全 主題提供一個概述,說明了網(wǎng)站安全對于服務器端設計的意義,以及以及一些需要應對的常見威脅。本文中包含一個關鍵的概念:如果網(wǎng)站信任任何來自瀏覽器的數(shù)據(jù),幾乎所有的攻擊方法都會成功。 重要提示: 切記,對于網(wǎng)站安全來說最重要一點就是“永遠不要相信瀏覽器端提交的數(shù)據(jù)”。 這些數(shù)據(jù)包括使用 對Django用戶來說,好消息是Django框架已經(jīng)處理了大量的常見威脅。請閱讀Django官方文檔中的"Security in Django"部分來了解Django的安全細節(jié),以及如何確?;贒jango的網(wǎng)站的安全。 常見威脅及保護節(jié)在本文中,我們將使用前面章節(jié)中的“本地圖書館”項目作為示范來演示一些Django的安全特性。 跨站腳本 (XSS)節(jié)XSS(英語:Cross site scripting,通常簡稱:XSS)是指一類惡意攻擊者將代碼通過網(wǎng)站注入到其他用戶瀏覽器中的攻擊方式。一般攻擊者會把惡意代碼作為普通數(shù)據(jù)放入到網(wǎng)站數(shù)據(jù)庫中,這樣其他用戶在獲取和展示數(shù)據(jù)的過程中就會受到攻擊。此外,攻擊者還可以通過引誘用戶點擊某些鏈接來執(zhí)行惡意的JavaScript代碼。 Django的模板系統(tǒng)可以幫您抵擋大部分的XSS攻擊,實現(xiàn)的方式在于轉(zhuǎn)義對于HTML來說比較“危險”的特殊字符(可參考官方文檔:escaping specific characters)?,F(xiàn)在,我們用Django Tutorial Part 9: Working with forms 這一章中的“創(chuàng)建作者”表單來做個演示,嘗試向我們的本地圖書館網(wǎng)站注入一些JavaScript腳本。
如果你有興趣閱讀下頁面的HTML源碼,則會發(fā)現(xiàn)危險的字符已被轉(zhuǎn)義成了無害的字符(例如:
Django的模板系統(tǒng)可以幫助抵御大部分的XSS攻擊。當然,XSS保護功能也可以被關閉,而且XSS保護一般對非用戶輸入的內(nèi)容不會自動進行防護(例如表單中字段的 XSS攻擊也可能來自于其他不可信的數(shù)據(jù)來源,例如cookies,Web服務或上傳的文件(實際上只要是未經(jīng)清洗的數(shù)據(jù)直接展示出來都會有被攻擊的可能)。如果你要顯示這些不可信來源的數(shù)據(jù),切記一定要自己做好數(shù)據(jù)清洗的工作。 防護跨站請求偽造 (CSRF) 節(jié)CSRF(英語:Cross-site request forgery,通常簡稱:CSRF或XSRF)攻擊可以讓惡意攻擊者在用戶不知情的情況下,使用用戶的身份來進行系統(tǒng)操作。舉個例子,現(xiàn)在有一名黑客想要在我們的本地圖書館中添加一些作者信息。 注意:這個示例里面的黑客沒有考慮對錢下手。而現(xiàn)實生活中的黑客則極有可能會產(chǎn)生更加危險的操作(例如,把錢轉(zhuǎn)入他們自己的賬戶中等等)。 為了實現(xiàn)這個目的,黑客可以創(chuàng)建一個類似于下面示例的HTML文件,這個文件包含了一個創(chuàng)建作者的表單(類似我們在之前章節(jié)中用過的),并且一旦加載完畢就會立即進行提交。隨后黑客可以將這個文件發(fā)送至所有的圖書管理員,并且引誘他們打開這個文件(文件中真的沒有啥有害的信息)。如果任何一個已登錄的圖書管理員不慎打開了這個文件,那么文件中的表單就會利用圖書管理員的身份來提交,隨后就會創(chuàng)建出一個新的作者來。
運行Django開發(fā)服務器,然后使用超級管理員賬號進行登錄。將上面的代碼貼到一個文件中,并在瀏覽器中打開這個文件,隨后你就會看到一個CSRF錯誤,這是因為Django的安全機制防護了此類的攻擊。 在表單定義的時候加入
Django生成這個用戶/瀏覽器關聯(lián)key的目的在于可以據(jù)此來拒絕那些不包含這個key的表單請求,也可以拒絕那些包含了錯誤了用戶/瀏覽器關聯(lián)key的表單請求。 有了這種保護機制后,攻擊者要發(fā)起攻擊就需要找到目標用戶的CSRF key。通過廣撒網(wǎng)給所有的圖書管理員發(fā)送惡意代碼文件的方式也很難奏效,因為CSRF key是和瀏覽器相關聯(lián)的。 Django的CSRF防御默認是開啟的。一定要在表單的位置使用 其他防護措施節(jié)Django還提供了很多其他形式的防護措施 (大部分不是很容易進行演示):
還有很多其他的安全措施及使用這些安全措施的注意事項我們沒有提到。我們這里僅僅提供了Django安全措施的一個概覽,更多的信息請參閱Django官方安全文檔。 總結(jié)節(jié)Django具備有效的防護措施,以對抗一些常見的威脅,包括 XSS 和 CSRF 攻擊。本文中,我們已經(jīng)使用本地圖書館網(wǎng)站來了演示Django如何處理一些特定的攻擊。我們也提供了關于其它保護措施的簡單概述。 但這僅僅是對網(wǎng)站安全的一個入門。我們強烈建議您閱讀 Django中的安全 以獲得更加深入的理解。 本Django教程的下一步,也是最后一步,是完成 評估任務。 參閱節(jié)
In this module節(jié)
|
|
來自: 寧靜致遠oj1kn5 > 《locallibrary》