Florian Apolloner 發言主題爲 Django 安全,其中並未討論針對 SSL 協議的攻擊--由於那不在 Django 涉及範圍內。(如感興趣可參考 https://www.ssllabs.com/ssltest/)。php
如發現 Django 的安全漏洞,請參閱 https://djangoproject.com/security,並經過此郵箱與咱們聯繫:security@djangoproject.com。請勿將其公開,由於這會給漏洞修補形成極大的困難。 關於安全:參考 OWASP 十大網站安全隱患。如下是幾條安策略總結。html
基本規則是不要直接使用用戶輸入的內容。用戶在網站界面輸入的全部內容均應視做危險內容。若是你將用戶輸入的用戶名字符串直接注入數據庫,像這樣的語句 select * from auth_user where username=%s
,那就很容易被注入漏洞。固然若是使用 Django ,它能在內部進行轉義處理,從而下降風險。git
最好的方法是實現層級防護。若是給 URL 中的數值限制一個參數,並經過 ID 而不是字符串來選擇用戶,就預防了許多問題。一樣的道理也適用於操做系統交互。用 Django 組件代替你本身的數據存儲或郵箱,由於這些組件的安全性較高,若是沒有 Django 組件,例如 LDAP 認證,那就應該當心了,由於你只得靠本身。總之,不推薦字符串插入。github
總之千萬不要直接使用用戶輸入的全部內容,如 http 頭信息、上傳的文件名或內容類型等。web
基本規則:使用 Django 提供的功能。算法
Django 自己爲保證安全作了不少工做,密碼均爲加密保存,且採用多種算法,隨着多個版本的迭代,新版本又有各類新的算法。Django 從1.9版本開始有了密碼驗證功能,包括長度檢查、數字字符和通用字的驗證,此外還能夠自主增長驗證內容。所以使用1.9版本的要記得使用哦。數據庫
Django 容許使用密碼重置連接,其間服務器不須要儲存任何內容。這個連接發送給用戶,只能使用一次而且使用一次就能夠重置密碼。連接中包含用戶 ID、時間戳、用戶上次登陸時間的 HMAC 哈希值,以及其餘幾項內容。若是想啓用這個連接,能夠配置 django.core.signing.*
。django
Django 的自動轉義功能可阻止大量 XSS,但這僅適用於 HTML,它會用字符代替 < > ' "
,屬性都添加引號來進行標識。而 Javascript 則須要不一樣的轉義 !var mystr="{{ value|escapejs}}"
。json
典型的 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()
。
圖片連接基本採用這樣方式:<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?
原文連接:http://reinout.vanrees.org/weblog/2015/11/06/django-security.html 本文是 Florian Apolloner 在 2015 Django under the hood 大會的發言總結,系 OneAPM 工程師編譯整理。 本文轉自 OneAPM 官方博客