チェックアウト/アカウントだけでなく、フロントエンドのすべてのページでHTTPSを強制する


10

バックエンドでは、[フロントエンドでセキュアなURLを使用する]を有効にしました。ただし、ユーザーは、チェックアウト/アカウントページを除き、非セキュアなURLを介してサイトにアクセスできます。

すべてのページに安全なURLを強制したい。私が今やっているのは、安全でないベースURLを「https:// ...」に変更することです。

動作しているようです。ユーザーがHTTPを使用している場合、ユーザーはhttpsにリダイレクトされます。しかし、これが正しい方法かどうか疑問に思います。副作用はありますか?


iveは、config.xmlでセキュアなルートを上書きするのが正しい方法であると聞いた

回答:


16

デフォルトの答えは、セキュアでないベースURLをhttps://に設定することです。これは、設定に応じて、ユーザーがhttp://を使用する場合のリダイレクトにはすでに十分です。

リクエストが最初にphpを通過するのを回避するため、おそらくWebサーバーレベルでのリダイレクトの方が良いでしょう。

また、本当に完全に安全なソリューションが必要な場合は、https://hstspreload.appspot.com/に Webサイトを追加する必要があります。しかし、これに注意してください。証明書を変更する必要がある場合、大きな問題が発生する可能性があります。ホスティング業者にこの部分を気にさせてください。


なぜ証明書を変更するのですか?HSTSは、ブラウザがHTTPSを介してのみページにアクセスすることを「のみ」行います。私はこのためのモジュールを作成しました:github.com/ikonoshirt/StrictTransportSecurity
Fabian Blechschmidt

1
多分私はこれを証明書のピン留めと少し混ぜました。プリロードには証明書のフィンガープリントも含まれると考えていました
Flyingmana

2
@Flyingmana:Chromiumソース実際のHSTSプリロードリストを見ると、エントリの大部分には証明書のフィンガープリントなどの種類が含まれておらず、ドメイン名のみが含まれています。
Leigh Brenecki

4

これは、Apacheの.htaccessで実行できます。次の行を使用します。

############################ 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
おっと、良いタイミング。昨日答えた。私はこれが答えであると信じています...少なくとも、それはApacheに触れることなくフロントエンドと管理者にhttpsを強制することです。現在選択されている回答はHTTPSを有効にしますが、この回答はhttpsを「強制」します。
ジョーフレッチャー

1
これはまさに、質問者が彼らが試みた、そしてそれが機能しなかったと言ったものです
Dom

2

以前の解決策を試しましたが、それらは機能しているように見えましたが、管理者パネルから締め出されました(理由は完全に理解できません)。

管理パネルに入るために、再び私はphpMyAdminを入ると、データベースのテーブルにに取得しなければならなかったcore_config_dataとの両方の変更パスウェブ/安全な/のuse_in_adminhtmlウェブを/保護されていない/ 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]

ソースを参照してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.