Мой первоначальный вопрос заключался в том, как включить HTTPS для страницы входа в Django, и единственный ответ, рекомендованный я - сделать весь сайт только HTTPS.
Учитывая, что я использую Django 1.3 и nginx, какой правильный способ сделать сайт HTTPS-only?
Один ответ упомянул промежуточное решение, но имел оговорку:
Django не может выполнять перенаправление SSL при сохранении данных POST. Пожалуйста, структурируйте свои представления, чтобы перенаправления возникали только во время GET.
Вопрос о сбое сервера о nginx переписывании в https, также упоминается проблемы с потерями данных POST, и я недостаточно знаком с nginx, чтобы определить, насколько хорошо решение работает.
И Рекомендация EFF для HTTPS-only, отмечает, что:
Приложение должно установить атрибут Secure в cookie, когда установив его. Этот атрибут указывает браузеру отправить файл cookie только через безопасный (HTTPS) транспорт, никогда небезопасный (HTTP).
У приложений, таких как Django-auth, есть возможность устанавливать cookie как Secure? Или мне нужно написать больше промежуточного программного обеспечения?
Итак, что лучше всего настроить сочетание Django/nginx для реализации HTTPS-only, в терминах:
- Безопасность
- сохранение данных POST
- cookies обработаны надлежащим образом
- взаимодействие с другими приложениями Django (например, Django-auth) работает нормально
- любые другие проблемы, о которых я не знаю:)
Изменить - еще одна проблема, которую я только что обнаружил, при тестировании нескольких браузеров. Скажем, у меня есть URL https://mysite.com/search/
, который имеет форму поиска/кнопку. Я нажимаю кнопку, обрабатываю форму в Django, как обычно, и делаю Django HttpResponseRedirect до http://mysite.com/search?results="foo"
. Nginx перенаправляет его на https://mysite.com/search?results="foo"
, если требуется.
Тем не менее - Opera имеет видимую вспышку, когда происходит перенаправление. И это происходит каждый поиск, даже для одного и того же поискового запроса (думаю, https действительно не кэширует:) Хуже, когда я тестирую его в IE, я сначала получаю сообщение:
Вы собираетесь перенаправить на небезопасное соединение - продолжить?
После нажатия "да", за этим сразу следует:
Вы собираетесь просматривать страницы через безопасное соединение - продолжить?
Хотя второе предупреждение IE имеет возможность отключить его - первое предупреждение не происходит, поэтому каждый раз, когда кто-то выполняет поиск и перенаправляется на страницу результатов, у них появляется хотя бы одно предупреждающее сообщение.