Wymuś całą witrynę https bez przekierowywania http na https

14

Było wiele dyskusji podczas gdy ja szukałem, jak zrobić całą moją stronę https. Większość odpowiedzi polegała na przekierowaniu http na https (plik .htaccess), co nie jest dobre, ponieważ nie jest dobrze wykonywać dwukrotnie tę samą pracę (dwa żądania). Ponadto „człowiek w środku” najpierw korzysta z http i chcę, aby moja strona działała bezpośrednio na https. Czy istnieje inny sposób, aby cała witryna była https i jak to zrobić? Na przykład, gdy użytkownik wpisze w example.com, ten example.com automatycznie przechodzi do https, bez przekierowywania z http lub czegokolwiek innego?

Marko Tamburic
źródło
jeśli nie chcesz, aby ludzie byli przekierowywani na https, co zamiast tego chcesz zrobić?
Michael Hampton
@MichaelHampton Może zadaję pytanie początkującym, ale chcę praktycznie „usunąć” http, a jedyną rzeczą, która istnieje, jest https. Lub jeśli nie jest to możliwe, mogę po prostu użyć przekierowania, jeśli jest to wystarczająco dobre dla bezpieczeństwa. Słyszałem, że przekierowanie http-> https nie jest tak dobre, ponieważ wciąż jest http i ruch może zostać przechwycony podczas przekierowania.
Marko Tamburic
Trwałe przekierowanie HTTP 301 jest Twoim przyjacielem, tylko nie zapomnij ustawić wygasania.
Marcel
Możesz po prostu usunąć http. Ale wtedy użytkownik otrzymuje tylko komunikat o odmowie połączenia, jeśli nie wchodzi na https: // W przypadku niektórych witryn jest to lepsze, ponieważ bezpieczeństwo jest wyższe. Jeśli dostępna jest wersja http, może się zdarzyć, że pliki cookie zostaną wysłane z pierwszym żądaniem niezaszyfrowanym. W przypadku firmowego systemu pocztowego tylko https + szkolenie użytkowników jest w porządku, w przypadku ogólnej witryny prawdopodobnie stracisz wielu odwiedzających.
Josef mówi Przywróć Monikę
Afaik stało się możliwe dzięki HTTP2, jednak nadal nie uniknie ataku rozbierania ssl (opisanego w odpowiedziach poniżej).
peterh - Przywróć Monikę

Odpowiedzi:

22

http://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security pozwala Twojemu serwerowi wskazać, że dostęp do domeny można uzyskać tylko przez HTTPS. Dotyczy to tylko kolejnych żądań, więc wystąpiłoby wstępne ładowanie HTTP, ale przyszłe żądania ładowałyby HTTPS, nawet gdyby ktoś wyraźnie wpisał HTTP.

IE jeszcze go nie obsługuje, ale wszystkie inne główne go obsługują.

ceejayoz
źródło
Nadal nie chroni przed pierwszym żądaniem.
Jenny D
3
@JennyD Powiedziałem już to dokładnie w mojej odpowiedzi.
ceejayoz
@JennyD Co rozumiesz przez „chronić”? MiM nie może nic zrobić przeciwko przekierowaniu http -> https, chyba że zadziała z lokalnym routerem dns / routing i sfałszuje całą domenę. W takim przypadku tak naprawdę nie ma znaczenia, co robisz, ponieważ twoje serwery nigdy nie są dostępne.
Red Alert
2
@JennyD Cóż, HSTS jest naprawdę lepszym rozwiązaniem niż twój post, który mówi „przekierowanie jest sposobem na to”. Przekierowanie może być MITMed w dowolnym momencie. Przekierowanie z HSTS może być MITMed tylko raz w roku na użytkownika + przeglądarkę (lub jakikolwiek czas ważności znajduje się w nagłówku) - za każdym razem nie jest to wymagane.
ceejayoz
1
@MarkoTamburic Nie ma powodu, aby nie łączyć tych dwóch elementów.
ceejayoz
7

Jak powiedzieli inni, nie można zmusić użytkowników do wyboru właściwego protokołu. Ale kiedy użytkownik próbuje użyć HTTP, co należy zrobić? Przekierowanie jest również niewystarczające, ponieważ atakujący siedzący między tobą a klientem może przechwycić przekierowanie, więc klient nigdy go nie widzi. Klient będzie nadal wysyłał zwykły HTTP, a atakujący usunie warstwę SSL z serwera ( atak polegający na usunięciu SSL ).

Jedynym pewnym sposobem, aby temu zapobiec, jest w ogóle nie obsługiwać HTTP . Nie odpowiadaj na porcie 80, może z wyjątkiem wyświetlenia zwykłej strony tekstowej, w której użytkownik powinien spróbować ponownie za pomocą HTTPS (ale nie podaje linku, którym atakujący mógłby manipulować). Zmusi to użytkownika do wpisania się https://w przeglądarce, więc zainicjuje połączenie za pomocą protokołu SSL i zapobiegnie atakowi MITM.

Andrew Schulman
źródło
3
Jest to jednak kompromis, ponieważ większość użytkowników nie zamierza pisać https://. Zamiast tego powiedzą „huh, witryna jest zepsuta” i odejdą. Najlepszym scenariuszem może być www.example.comodpowiedź zarówno na HTTP, jak i HTTPS, ale sama aplikacja działa na czymś takim jak admin.example.comtylko HTTPS.
ceejayoz
Zgoda. W praktyce prawie nikt tego nie robi.
Andrew Schulman
Naprawdę nie rozumiem, w jaki sposób byłoby to bardziej odporne na MiM. Jeśli środkowy człowiek może zmodyfikować hiperłącze, aby wskazywał w innym miejscu, oznacza to, że kontroluje przychodzące pakiety użytkownika. Może równie łatwo przekierować na swoją stronę lub dodać dowolne hiperłącze, niezależnie od tego, jak powinna wyglądać strona.
Red Alert
Ale nie teoretycznie, jeśli klient zainicjuje połączenie za pomocą protokołu SSL.
Andrew Schulman
3
to prawda - ale jeśli klient inicjuje za pomocą protokołu SSL, OP nie ma problemu. Jego problem polega na tym, że inicjują się bez SSL, i nie ma sposobu, aby rzetelnie przenieść je na SSL, jeśli MiM aktywnie to sabotuje.
Red Alert
1

ceejayoz ma najlepszą odpowiedź, aby zapobiec konkretnie wspomnianemu atakowi tutaj, ale chcę również zwrócić uwagę na to, że brakuje tutaj wielu ludzi, a mianowicie, że HTTP ma już ustaloną drugą część. Chcesz wykonać stałe przekierowanie 301. Mówi to klientowi, aby wysyłał dalsze żądania na nowy adres. Tak więc, jeśli ktoś wpisze niewłaściwy adres URL, złoży 2 żądania, ALE w przyszłości dobry klient powinien wykryć żądania do tego adresu URL i zamiast tego złożyć prawidłowe żądanie, aby zapobiec dalszym zmarnowanym żądaniom. Problem polega na tym, że dotyczy to tylko tego dokładnego adresu URL. HSTS ulepsza ten schemat, mówiąc również: „przez następne n sekund nie zezwalaj również na żadne niezabezpieczone połączenia z tej domeny”.

Użytkownicy nie powinni odwiedzać wrażliwych witryn w niepewnych lokalizacjach. W szczególności nie powinni zapisywać się na nie w niepewnych lokalizacjach. Są to podstawowe zasady bezpieczeństwa użytkowników, których należy uczyć: „nie otwieraj załączników z niezaufanych źródeł”. Które są naprawdę najlepszą odpowiedzią na zapobieganie atakom MiM na strony, które nigdy nie były odwiedzane.

Na marginesie, niektóre przeglądarki poprawiają to, mówiąc, że niektóre znane strony zawsze używają HSTS. Niestety nie możesz łatwo po prostu dodać się do tej listy.

Dalsza lektura: http://coderrr.wordpress.com/2010/12/27/canonical-redirect-pitfalls-with-http-strict-transport-security-and-some-solutions/

http://dev.chromium.org/sts

krowe
źródło