Django 安全策略的 7 條總結!
Florian Apolloner 發言主題為 Django 安全,其中並未討論針對 SSL 協議的攻擊--因為那不在 Django 涉及範圍內。(如感興趣可參考 https://www.ssllabs.com/ssltest/)。
如發現 Django 的安全漏洞,請參閱 https://djangoproject.com/security,並通過此郵箱與我們聯絡:security@djangoproject.com。請勿將其公開,因為這會給漏洞修補造成極大的困難。 關於安全:參考 OWASP 十大網站安全隱患。以下是幾條安策略總結。
SQL/SMTP/OS 注入
基本規則是不要直接使用使用者輸入的內容。使用者在網站介面輸入的所有內容均應視作危險內容。如果你將使用者輸入的使用者名稱字串直接注入資料庫,像這樣的語句 select * from auth_user where username=%s
,那就很容易被注入漏洞。當然如果使用 Django ,它能在內部進行轉義處理,從而降低風險。
最好的方法是實現層級防禦。如果給 URL 中的數值限制一個引數,並通過 ID 而不是字串來選擇使用者,就預防了許多問題。同樣的道理也適用於作業系統互動。用 Django 元件代替你自己的資料儲存或郵箱,因為這些元件的安全性較高,如果沒有 Django 元件,例如 LDAP 認證,那就應該小心了,因為你只得靠自己。總之,不推薦字串插入。
總之千萬不要直接使用使用者輸入的所有內容,如 http 頭資訊、上傳的檔名或內容型別等。
認證和會話管理
基本規則:使用 Django 提供的功能。
Django 本身為保證安全做了很多工作,密碼均為加密儲存,且採用多種演算法,隨著多個版本的迭代,新版本又有各種新的演算法。Django 從1.9版本開始有了密碼驗證功能,包括長度檢查、數字字元和通用字的驗證,此外還可以自主增加驗證內容。因此使用1.9版本的要記得使用哦。
Django 允許使用密碼重置連結,其間伺服器不需要儲存任何內容。這個連結傳送給使用者,只能使用一次並且使用一次就可以重置密碼。連結中包含使用者 ID、時間戳、使用者上次登入時間的 HMAC 雜湊值,以及其他幾項內容。如果想啟用這個連結,可以配置 django.core.signing.*
。
跨站指令碼攻擊(XSS)
Django 的自動轉義功能可阻止大量 XSS,但這僅適用於 HTML,它會用字元代替 < > ' "
,屬性都新增引號來進行標識。而 Javascript 則需要不同的轉義 !var mystr="{{ value|escapejs}}"
。
典型的 XSS 攻擊結果為 data="</script><script>alert('xss')'//"
。
如果想在在模板中插入json,那麼:
var json = JSON.parse('{{ data|escapejs }}');
或者使用 django -argonauts ,這樣:
var json = {{ data|json }};
如果想進行進一步的防禦,則要啟動 Django 的 XSS 保護,它所採用的 http 標頭能使瀏覽器更嚴格地選擇開啟的內容,阻止內聯 js 和事件處理器。
最關鍵的是要檢查你的庫以及程式碼,因為很多人僅僅是這樣配置 mark_safe(json.dumps()
。
跨站請求偽造(CSRF)
圖片連結基本採用這樣方式:<img src="mybank.com/t/?amount=1000&to=apollo13">
,該功能已預設啟用,可以防止攻擊者將一名使用者連同有害請求一同傳送給網站。Django 通過以下方法防禦該攻擊:在表格中隨機生成一個值,並在你的 cookie 中設定隨機值,如果直接進入表格並輸入該值,便能匹配;如資訊來自不同網站,則無法匹配。
未經驗證的重定向和轉發
像 /auth/login/?next=http://evil.com
這樣的請求,登入後即進入evil.com,而這顯然存在隱患,因此要配置使用 Django.utils.http.is_safe_url()
,其包含的註釋比程式碼還多,表明這是很難使用的程式碼。
檢驗安全列表
執行 manage.py check –deploy
,確保每一項配置都正確。該操作會檢查你可能遺漏的安全設定。
改進
如何改進 Django?
- 限制登入速率
- 雙重要素認證( TOTP 和 U2F 可作為參考實現方式)。
- CSRF 提升(#16859)。
- JSON 模板過濾器,未來將納入 Django 核心功能。
- SecurityMiddleware 增強(詳見此處)。
- 實現內容安全策略。
- 限制 POST/GET 資料長度。
原文連結:http://reinout.vanrees.org/weblog/2015/11/06/django-security.html 本文是 Florian Apolloner 在 2015 Django under the hood 大會的發言總結,系 OneAPM 工程師編譯整理。 本文轉自 OneAPM 官方部落格
相關文章
- Django model總結(上)Django
- 2年開發,我總結了7條經驗!
- django知識點總結Django
- 7月7日總結
- Django 報錯資訊總結Django
- centos7安全策略修改CentOS
- 2019年的面試條目總結面試
- dorado 7 使用總結
- 7 .30 ACM總結ACM
- 總結PHP 7新增加的特性PHP
- 總結 90 條寫 Python 程式的建議Python
- 11月7號總結
- 5月7日總結
- PTA7-8總結
- 2024/6/7 今日總結
- CentOS 7 systemctl 命令總結CentOS
- 總結幾種常見的/需要注意到的雲伺服器安全策略伺服器
- PTA題目集7、8的總結
- 總結Django一些開發經驗Django
- 600 條最強 Linux 命令總結Linux
- 工作總結!日誌列印的11條建議
- 每日總結3月7日
- 4月7日每日總結
- 每日總結6月7日
- 7/21日課堂總結
- 7-8次PTA總結
- 7-8次總結blog
- PTA作業7~8總結
- 大作業7-8總結
- 題目集7~8的總結性Blog
- 關於題目集7~8的總結
- Django筆記十七之group by 分組用法總結Django筆記
- 史上最全關於sorted函式的10條總結函式
- 7.Djnago過濾器總結Go過濾器
- 7、Linux 埠轉發特徵總結Linux特徵
- PTA第7~8次題目集的總結
- 主資料管理的7個實踐總結
- 運維7年,對Linux的經驗總結運維Linux
- 一個PHP開發者總結的九條建議PHP