Wymuś HTTPS na wszystkich stronach interfejsu, nie tylko w kasie / koncie

10

W backendie włączyłem opcję Użyj bezpiecznych adresów URL w interfejsie użytkownika . Ale użytkownicy nadal mogą odwiedzać moją witrynę za pomocą niezabezpieczonych adresów URL, z wyjątkiem stron kasy / konta.

Chcę wymusić bezpieczne adresy URL na wszystkich stronach. W tej chwili zmieniam niezabezpieczony podstawowy adres URL na „https: // ....”

Wydaje się, że działa. Jeśli użytkownicy używają HTTP, zostaną przekierowani na https. Ale zastanawiam się, czy to jest właściwy sposób, aby to zrobić. Jakieś skutki uboczne?

Shawn
źródło
słyszałem, że poprawnym sposobem jest zastąpienie bezpiecznej trasy w config.xml

Odpowiedzi:

16

Domyślna odpowiedź brzmi: ustaw niezabezpieczony podstawowy adres URL na https: // w zależności od konfiguracji, wystarczy to do przekierowania, jeśli użytkownicy spróbują użyć http: //

Być może przekierowanie na poziomie serwera jest lepsze, ponieważ pozwala uniknąć wniosków przechodzących najpierw przez php.

A jeśli chcesz naprawdę idealnie bezpiecznego rozwiązania, powinieneś dodać swoją stronę na https://hstspreload.appspot.com/ . Ale ostrożnie, jeśli musisz zmienić certyfikat, może to powodować duże problemy. Pozwól swojemu Hosterowi dbać o tę część.

Flyingmana
źródło
Po co zmieniać certyfikat? HSTS „tylko” sprawia, że ​​przeglądarka uzyskuje dostęp do strony odtąd tylko przez HTTPS. Zrobiłem moduł do tego: github.com/ikonoshirt/StrictTransportSecurity
Fabian Blechschmidt
1
Może trochę to pomieszałem z przypinaniem certyfikatu. Pomyślałem, że wstępne ładowanie będzie również zawierało odcisk palca dla certyfikatu
Flyingmana
2
@Flyingmana: Jeśli spojrzysz na rzeczywistą listę wstępnego ładowania HSTS w źródle Chromium , zdecydowana większość wpisów nie zawiera odcisku palca certyfikatu ani niczego w tym rodzaju, tylko nazwę domeny.
Leigh Brenecki,
4

możesz to zrobić za pomocą .htaccess w apache. Użyj tych linii:

############################ Force SSL ############################
RewriteCond %{HTTP_HOST} !^localhost$
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
############################ Force SSL ############################
Dom na plaży
źródło
4

Dla każdego, kto natknie się na to (tak jak ja)

Nie używaj htaccess. Pod administratorem przejdźStores -> General -> Web and change -> Use Secure URLs on Storefront -> Yes and Use Secure URLs in Admin -> Yes

Nie ma potrzeby edytowania żadnych plików.

Andrzej
źródło
1
Whoa, dobry moment. odpowiedział wczoraj. Uważam, że to powinna być odpowiedź ... przynajmniej wymusza dla mnie https w interfejsie użytkownika i administratora bez dotykania apache. Aktualnie wybrana odpowiedź włącza HTTPS, ale ta odpowiedź „wymusza” https.
Joe Fletcher
1
Właśnie to pytający powiedział, że wypróbowali i że to nie zadziałało
Dom
2

Wypróbowałem poprzednie rozwiązania i chociaż wydawały się działać, zablokowały mnie z panelu administracyjnego (nie do końca rozumiem powód).

Aby ponownie wejść do panelu administracyjnego, musiałem dostać się do phpmyadmin i dostać się do tabeli bazy danych core_config_data i zmienić obie ścieżki : web / secure / use_in_adminhtml i web / unsecure / base_url wracam do panelu administracyjnego. I nie zapomnij wyczyścić folderu pamięci podręcznej, jeśli musisz dokonać zmian w bazie danych ...

Zastosowałem więc następujące rozwiązanie .htaccess, które pozwoliło mi również zalogować się do administratora

# AFTER THIS SECTION
############################################
## workaround for HTTP authorization
## in CGI environment
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

# PUT THIS 
############# ALL PAGES HTTPS #################
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} !/admin/
RewriteCond %{REQUEST_URI} !/downloader/
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
############# ALL PAGES HTTPS #################

Mam nadzieję, że to komuś pomoże

GiorgosK
źródło