Forçar HTTPS em todas as páginas do front-end, não apenas no Google Checkout / Conta

10

No back-end, ativei Usar URLs seguros no front-end . Mas os usuários ainda podem visitar meu site por meio de URLs não seguros, exceto nas páginas de checkout / conta.

Quero forçar URLs seguros em todas as páginas. O que faço agora é alterar o URL de base não seguro para "https: // ...."

Parece funcionar. Se os usuários usarem HTTP, eles serão redirecionados para https. Mas eu me pergunto se essa é a maneira correta de fazer isso. Algum efeito colateral?

Shawn
fonte
ive ouviu que maneira correta é substituir rota segura no config.xml

Respostas:

16

A resposta padrão é: defina o URL de base não seguro como https: //, dependendo da sua configuração, isso já é suficiente para um redirecionamento se os usuários tentarem usar http: //

Talvez um redirecionamento no nível do servidor da web seja melhor, pois evita solicitações que passam pelo php primeiro.

E se você deseja uma solução perfeitamente segura, adicione seu site em https://hstspreload.appspot.com/ . Mas cuidado com isso, se você precisar alterar seu certificado, isso pode causar grandes problemas. Deixe seu Hoster se importar com esta parte.

Flyingmana
fonte
Por que mudar o certificado? O HSTS "apenas" faz com que o navegador acesse a página a partir de agora somente via HTTPS. Eu fiz um módulo para isso: github.com/ikonoshirt/StrictTransportSecurity
Fabian Blechschmidt
1
Talvez eu tenha misturado isso um pouco com a fixação de certificados. Pensei que o pré-carregamento também conteria impressão digital para o certificado
Flyingmana
2
@ Flyinglying: Se você olhar para a lista de pré-carregamento real do HSTS na fonte do Chromium , a grande maioria das entradas não contém uma impressão digital de certificado ou qualquer coisa do tipo, apenas o nome do domínio.
Leigh Brenecki
4

você pode fazer isso com .htaccess no apache. Use estas linhas:

############################ Force SSL ############################
RewriteCond %{HTTP_HOST} !^localhost$
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
############################ Force SSL ############################
Beachhouse
fonte
4

Para quem tropeçar nisso (como eu fiz)

Não use o htaccess. Em admin, váStores -> General -> Web and change -> Use Secure URLs on Storefront -> Yes and Use Secure URLs in Admin -> Yes

Não há necessidade de editar nenhum arquivo.

Andrew
fonte
1
Whoa, bom momento. respondeu ontem. Eu acredito que essa deve ser a resposta ... pelo menos, está forçando https no frontend e admin para mim sem tocar no apache. A resposta atualmente selecionada ativa HTTPS, mas esta resposta "força" https.
Joe Fletcher
1
Este é exatamente o que o interlocutor disse que seu experimentado e que não funcionou
Dom
2

Tentei as soluções anteriores e, embora parecessem funcionar, me bloquearam do painel de administração (não entendo completamente o motivo).

Para entrar no painel de administração novamente, tive que entrar no phpmyadmin e entrar na tabela core_config_data do banco de dados e alterar os dois caminhos : web / secure / use_in_adminhtml e web / unsecure / base_url para voltar ao painel de administração. E não se esqueça de limpar a pasta de cache se precisar fazer edições no banco de dados ...

Então, apliquei a seguinte solução .htaccess, que também permite que eu faça o login no admin

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

Espero que ajude alguém

GiorgosK
fonte