2012-08-03 73 views
1

我試圖通過SSL加密我的整個站點。但是,我沒有找到明確的方法來使用Django 1.4來做到這一點。有誰知道解決方案?在Django中強制https

回答

4

您可以使用中間件,例如django-secure中提供的中間件,或者您可以通過將所有HTTP請求重定向到HTTPS來處理Apache/Nginx/HAProxy級別的中間件。

+0

+1雖然,只是做它在服務器級別。 Django沒有理由參與這個過程。 – 2012-08-03 19:09:55

+0

如果你有一個HTTP和HTTPS的混合,那麼你很可能需要一個Django中間件,但如果一切都將是HTTPS,那麼你最好在服務器級別處理這個。 – 2012-08-03 19:20:56

+0

不是有爭議的,但即使如此,我還是會說在服務器級別做。例如,與大多數情況一樣,我的管理員僅通過HTTPS提供服務,但我網站的其餘部分是HTTP。在我的nginx conf中,我只需將任何請求重定向到位置/ admin /通過HTTP傳輸到HTTPS。 Django仍然沒有參與,也不需要。 – 2012-08-03 19:34:47

2

在Apache + Django的(1.6),這是可以做到的一些方法,但一個簡單的方法可以在.htaccess或httpd.conf文件做的是:

RewriteEngine On 
RewriteCond %{HTTPS} off 
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URL} 

下面是進一步信息的鏈接它:

http://wiki.apache.org/httpd/RewriteHTTPToHTTPS

可以肯定的會話和CSRF餅乾不是由客戶端通過普通的HTTP連接泄露你應該確保它們被設置爲「安全cookie」,只有客戶端通過HTTPS發送。這可以在你的settings.py文件如下:

CSRF_COOKIE_SECURE = True 
SESSION_COOKIE_SECURE = True 

的介紹到Django的安全性,包括SSL/HTTPS(必讀):

https://docs.djangoproject.com/en/1.6/topics/security/