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


10

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

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

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


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

Ответы:


16

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

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

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


Зачем менять сертификат? 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 #################

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


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]

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.