Nie przyjmuję jeszcze odpowiedzi, więc pomyślałem, że odpowiedzi mogą nie odpowiadać wystarczająco dobrze.
Anonimowe użycie przez http jest w porządku. Ale chcę wyłączyć logowanie przez http.
Jak rozumiem, masz następujący przypadek użycia:
Niektóre osoba odwiedza Twoją stronę internetową jako anonimowego użytkownika, używany jest protokół http. Ta osoba otwiera formularz logowania i loguje się, formularz jest wysyłany przez https. Zalogowany użytkownik kontynuuje przeglądanie witryny za pośrednictwem protokołu https.
Jeśli formularz logowania zostanie przekierowany do bezpiecznej wersji, użytkownik będzie kontynuował przeglądanie witryny w trybie https (o ile wszystkie inne łącza nie są agnostyczne w stosunku do używanego protokołu).
<form action="https://your.domain/path/to/login/" method="post">
Jeśli aplikacja używasz do uwierzytelniania użytkowników zdrowo jest napisane, można skonfigurować settings.LOGIN_URL
, jeszcze będzie potrzebne, aby to zrobić w formie szablonów.
Zalecam zezwolenie na wysyłanie plików cookie sesji za pośrednictwem protokołu https przy użyciu adresu settings.SESSION_COOKIE_SECURE
. Przy tym ustawieniu użytkownik nadal będzie mógł wysyłać żądania http, ale plik cookie sesji nie zostanie wysłany (a użytkownik będzie traktowany jako anonimowy użytkownik).
Proszę się upewnić, że w widoku logowania akceptowane są tylko bezpieczne żądania pocztowe (w przeciwnym razie użytkownik może wysłać hasło za pomocą protokołu innego niż https). Można to osiągnąć w kodzie Django (jak sugeruje John Moutafis ze swoim MyLoginView
) lub na poziomie serwera produkcyjnego, odrzucając żądania HTTPS dla adresu URL logowania.
-
Czy możesz zapewnić dostęp do repozytorium z kodem?
Dlaczego nie przekierować całego ruchu do https? –
Cóż, jest to jedna strona logowania jako HTTPS, ale co jest z ciasteczkami po uwierzytelnieniu użytkownika? IMHO powinno się wyświetlać tylko HTTPS, a nie tylko wtedy, gdy użytkownik chce się zalogować. – Thomas
@ user1 Do tej pory nie myślałem o tym szczególe. – guettli