Paksa HTTPS di semua halaman di frontend, bukan hanya Checkout / Akun

10

Di backend, saya telah mengaktifkan Gunakan URL Aman di Frontend . Tetapi pengguna masih dapat mengunjungi situs saya melalui URL yang tidak aman, kecuali untuk halaman checkout / akun.

Saya ingin memaksakan URL aman di semua halaman. Apa yang saya lakukan sekarang adalah mengubah URL basis tidak aman ke "https: // ...."

Sepertinya berhasil. Jika pengguna menggunakan HTTP, mereka akan diarahkan ke https. Tetapi saya bertanya-tanya apakah ini cara yang benar untuk melakukannya. Adakah efek samping?

Shawn
sumber
Saya mendengar bahwa cara yang benar adalah menimpa rute aman di config.xml

Jawaban:

16

Jawaban defaultnya adalah, atur url basis tidak aman ke https: // tergantung pada pengaturan Anda ini sudah cukup untuk pengalihan jika pengguna mencoba menggunakan http: //

Mungkin redirect pada tingkat server web lebih baik, karena menghindari permintaan melalui php terlebih dahulu.

Dan jika Anda menginginkan solusi yang benar-benar aman, Anda harus menambahkan situs web Anda di https://hstspreload.appspot.com/ . Tapi hati-hati dengan ini, jika Anda perlu mengubah sertifikat Anda, ini dapat menyebabkan masalah besar. Biarkan Hoster Anda peduli dengan Bagian ini.

Flyingmana
sumber
Mengapa mengganti sertifikat? HSTS "hanya" membuat, bahwa browser mengakses halaman mulai sekarang hanya melalui HTTPS. Saya membuat modul untuk ini: github.com/ikonoshirt/StrictTransportSecurity
Fabian Blechschmidt
1
Mungkin saya sedikit mencampuradukkan ini dengan pinning sertifikat. Kupikir preloading juga akan berisi sidik jari untuk sertifikat
Flyingmana
2
@Flyingmana: Jika Anda melihat daftar pramuat HSTS aktual di sumber Chromium , sebagian besar entri tidak mengandung sidik jari sertifikat atau semacamnya, hanya nama domain.
Leigh Brenecki
4

Anda dapat melakukan ini dengan .htaccess di apache. Gunakan garis-garis ini:

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

Bagi siapa pun yang tersandung di ini (seperti saya lakukan)

Jangan gunakan htaccess. Di bawah admin goStores -> General -> Web and change -> Use Secure URLs on Storefront -> Yes and Use Secure URLs in Admin -> Yes

Tidak perlu mengedit file apa pun.

Andrew
sumber
1
Wah, waktunya bagus. dijawab kemarin. Saya percaya ini harus menjadi jawabannya ... setidaknya, ini memaksa https di frontend dan admin untuk saya tanpa menyentuh apache. Jawaban yang saat ini dipilih mengaktifkan HTTPS, tetapi jawaban ini "memaksa" https.
Joe Fletcher
1
Ini persis seperti apa yang dikatakan penanya yang mereka coba dan tidak berhasil
Dom
2

Saya telah mencoba solusi sebelumnya dan meskipun tampaknya berhasil, mereka mengunci saya di panel admin (tidak sepenuhnya mengerti alasannya).

Untuk masuk ke panel admin lagi saya harus masuk ke phpmyadmin dan masuk ke tabel database core_config_data dan mengubah kedua jalur : web / secure / use_in_adminhtml dan web / unsecure / base_url kembali ke panel admin lagi. Dan jangan lupa menghapus folder cache jika Anda harus mengedit di database ...

Jadi saya menerapkan solusi .htaccess berikut sebagai gantinya yang membiarkan saya masuk ke admin juga

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

Semoga ini bisa membantu seseorang

GiorgosK
sumber