回答:
残念ながら、この問題の唯一の一般的な解決策は、ユーザーにhttps://唯一の権限を与え、ユーザーがそれだけを使用することを期待していることを確認することです。最終的にユーザーが期待どおりにSSL / TLSを使用していることを確認するのはユーザーの責任です。
他のソリューションは、WebサイトがSSL / TLS接続のみを受け入れる場合でも、中間者攻撃に対して脆弱です。攻撃者はhttp://example.com(example.comそのポートをリッスンしていなくても、ユーザーの要求に応じて)へのトラフィックを傍受し、への独自の接続を作成して置き換えることでhttps://example.com、ユーザーにプロキシで戻すことができます。
このため、自動リダイレクトに対するOWASPルールがありました。削除されました。おそらくリダイレクトがリスクを軽減するための悪い方法ではないためです(特に受動的な盗聴に対して)、しかし根本的な問題は解決していません。
ユーザーをHTTPSサイトに誘導するために使用できるさまざまな手法があり、それらを使用することは悪い考えではありません(ただし、アクティブなMITM攻撃者から保護することはできません)。
まず、WebサーバーでプレーンHTTPで提供する必要のあるものがまったくない場合は、ポート80をオフにします(Listen 80Apache Httpdの構成で削除するなど)。ユーザーはhttps://常に使用する必要があり、不便な場合があります。
次に、特定のパス(LocationまたはDirectory)のApache Httpd構成セクションで、SSLRequireSSLディレクティブを使用します。SSL/ TLSを使用する必要があります(実際に代替ポートで構成した場合でも)。他のWebサーバーには、おそらく同様のディレクティブがあります。
3番目に、mod_rewriteコードを使用して、またはコード内で(アプリケーションの場合)、リダイレクトを使用できます。特定の場所について、このようなことを行う必要があります(特別な変数を参照してくださいHTTPS。302も使用できますが、これをより永続的にするには、301の方が適しています)。
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(samples/.*)$ https://example.com/$1 [R=301,L]
さらに重要なことは、その安全なセクションへのすべてのリンクがを使用していることを確認してくださいhttps://。自動リダイレクトに頼って作業を行うことはありません。このため、開発段階ではまったく使用しないことをお勧めします。
しかし、私はまだ安全ではなくウェブサイトにアクセスできることに気づきました。の
http代わりに使用するhttps。
これはまた、あなたが両方に同じ設定を使用しているように聞こえるhttpとhttps。Apache Httpdを使用している場合は、構成を2つの異なるVirtualHostsに分割することをお勧めします。1つはポート80用で、もう1つはポート443用です。これらはまったく同じ構成である必要はありません。HTTPS専用のものを入れないでください。 HTTP仮想ホストで。
上記の問題を軽減する方法は、HTTP Strict Transport Securityをサポートするブラウザで使用することです(私の知る限り、ホスト全体に適用されます)。https://リダイレクトせずに使用しない場合、最初の接続がまだ公開されている可能性がありますが、とにかく(そしてHSTSが有効になっている)ことを期待し https://ているサイトの事前ロードされたリストを持つことが可能です。
https://mail.google.com。ユーザーとして、それがで動作するhttp://mail.google.comことがわかった場合、おそらく本物にリクエストをプロキシするMITMがありますhttps://mail.google.com。残念ながら、ユーザー自身がチェックしなければ、Gmailはそれについて多くを行うことができません。実生活と同じ原則:アリスがボブと話したいが、IDを確認せずに代わりにチャック(ボブであると主張している)と話しかける場合、ボブはこの会話を認識せず、行うことができません。それについて何か。それはアリスの責任です。
httpトラフィックをhttpsにリダイレクトするだけです- この記事「httpをhttpsにリダイレクトするApacheセキュア接続-HTTPS接続を強制する」を参照してください。
サブディレクトリの場合、これをディレクトリ自体のhtaccessファイルに配置します。
RewriteEngine on
RewriteCondition %{SERVER_PORT} !^443$
RewriteRule ^(.*)$ https://www.maindomain.com/directory/$1 [R=301,L]
サイトをMITM、snooper、PEBKACに対応させるために必要なステップであることに加えて、HTTPSを介してアクセスを強制することは実際に可能です。これはユーザーの責任ではありません。これは機能しません。代わりに安全なブラウザを使用するようユーザーに勧めます。
HTTPSの強制はHSTS(HTTP Strict-Transport-Security)を介して行われます。基本的なHSTSは、ユーザーがHTTPSを介してサイトに初めてアクセスした後は安全です(サポートされているすべてのブラウザー上。IEには機能がありません)。 プリロードされたHSTSは常に安全で、最新の高速リリースブラウザー(Chromiumおよび派生物、Firefox)をカバーしています。
HTTPセキュリティ(アドレス指定URL、リダイレクト、Cookie、および混合コンテンツ)のより完全な概要については、このHTTPS移行の方法を参照してください。HSTSは、漸進的な移行の最後のステップです。あなたのサイトが真新しい場合、あなたは実際に注文に従う必要はありません。
関連する標準:セキュアCookie(CookieがHSTSヘッダーよりも長く存続する場合に重要)、HttpOnly Cookie(Cookieを保護している間)、HPKP(最新のブラウザーやより機知に富んだ攻撃者向け)。