Принудительно использовать HTTPS на всех страницах веб-интерфейса, а не только на Checkout / Account

10

В бэкэнде я включил использование безопасных URL-адресов во внешнем интерфейсе . Но пользователи все равно могут посещать мой сайт по незащищенным URL-адресам, за исключением страниц оформления заказа / учетной записи.

Я хочу использовать безопасные URL на всех страницах. Сейчас я изменяю незащищенный базовый URL-адрес на «https: // ....».

Кажется, работает. Если пользователи используют HTTP, они будут перенаправлены на https. Но мне интересно, если это правильный способ сделать это. Есть ли побочные эффекты?

Шон
источник
я слышал, что правильный путь - переопределить безопасный маршрут в config.xml

Ответы:

16

Ответ по умолчанию: установите небезопасный базовый URL-адрес на https: //, в зависимости от ваших настроек, этого уже достаточно для перенаправления, если пользователи пытаются использовать http: //

Возможно, перенаправление на уровне веб-сервера лучше, так как это позволяет избежать запросов, проходящих сначала через php.

И если вы хотите действительно безопасное решение, вы должны добавить свой сайт по адресу https://hstspreload.appspot.com/ . Но будьте осторожны с этим, если вам нужно изменить свой сертификат, это может вызвать большие проблемы. Пусть ваш Хостер позаботится об этой Части.

Flyingmana
источник
Зачем менять сертификат? HSTS «только» делает так, что браузер отныне получает доступ к странице только через HTTPS. Я сделал для этого модуль: github.com/ikonoshirt/StrictTransportSecurity
Фабиан Блехшмидт,
1
Возможно я немного перепутал это с закреплением сертификата. Думал, что предварительная
загрузка
2
@Flyingmana: Если вы посмотрите на фактический список предзагрузки HSTS в источнике Chromium , то подавляющее большинство записей не содержат отпечаток сертификата или что-либо в этом роде, а только доменное имя.
Ли Бренецки
4

Вы можете сделать это с .htaccess в Apache. Используйте эти строки:

############################ Force SSL ############################
RewriteCond %{HTTP_HOST} !^localhost$
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
############################ Force SSL ############################
Пляжный домик
источник
4

Для всех, кто споткнулся через это (как я сделал)

Не используйте htaccess. Под админкой зайтиStores -> General -> Web and change -> Use Secure URLs on Storefront -> Yes and Use Secure URLs in Admin -> Yes

Там нет необходимости редактировать какие-либо файлы.

Эндрю
источник
1
Вау, хорошее время. ответил вчера. Я считаю, что это должен быть ответ ... по крайней мере, он заставляет https на веб-интерфейс и админ для меня, не касаясь Apache. Текущий выбранный ответ включает HTTPS, но этот ответ «вызывает» https.
Джо Флетчер
1
Это именно то, что спрашивающий сказал, что они пытались, и что это не сработало
Dom
2

Я пробовал предыдущие решения и, хотя они, казалось, работали, они заблокировали меня из админ-панели (не совсем понимаю причину).

Чтобы снова войти в панель администратора, мне нужно было войти в phpmyadmin и войти в таблицу базы данных core_config_data и изменить оба пути : web / secure / use_in_adminhtml и web / unsecure / base_url снова вернуться в панель администратора. И не забудьте очистить папку кеша, если вам нужно внести изменения в базу данных ...

Поэтому я применил следующее решение .htaccess, которое позволило мне также войти в систему с правами администратора.

# 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 #################

Надеюсь, это поможет кому-то

GiorgosK
источник
0

Большинство подходов к .htaccess перенаправляют большинство страниц на дом при доступе через http.

Пример: http://www.mystore.com/productA.html => http://www.mystore.com/

вместо https://www.mystore.com/productA.html

Я решил это с помощью следующего .htaccess переписать (только Apache, конечно):

#Force SSL
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

Смотрите источник .

Рикардо Мартинс
источник