web-dev-qa-db-ja.com

httpをhttpsにリダイレクトせずにサイト全体を強制する

サイト全体をhttpsにする方法を調査している間、たくさんの議論がありました。ほとんどの答えは、httpをhttps(.htaccessファイル)にリダイレクトすることでしたが、同じジョブを2回(2つの要求)行うのはよくないため、これは適切ではありません。また、「真ん中の男」が最初にhttpを引き受けるので、自分のサイトを直接httpsに移動させたい。サイト全体をhttpsにする別の方法はありますか?たとえば、ユーザーがexample.comに入力すると、そのexample.comは最初にhttpなどからリダイレクトすることなく、自動的にhttpsに移動しますか?

14
Marko Tamburic

いいえ。訪問者のブラウザに適切なプロトコルを魔法のように選択させることはできません。リダイレクトはそれを行う方法です。

20
Jenny D

http://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security サーバーは、ドメインにHTTPS経由でのみアクセスする必要があることを示すことができます。これは後続のリクエストにのみ適用されるため、最初のHTTPロードがありますが、誰かが明示的にHTTPを入力した場合でも、将来のリクエストはHTTPSをロードします。

IEはまだサポートしていませんが、他のすべてのメジャーはサポートしています。

22
ceejayoz

他の人が言ったように、ユーザーに正しいプロトコルを選択させることはできません。しかし、ユーザーがHTTPを使用しようとすると、どうしますか?リダイレクトも不十分です。ユーザーとクライアントの間に座っている攻撃者がリダイレクトを傍受し、クライアントがリダイレクトを見ることはないためです。クライアントは引き続きプレーンHTTPを送信し、攻撃者はサーバーからSSLレイヤーを取り除きます( SSLストリッピング攻撃 )。

これを防ぐ唯一の確実な方法は、HTTPをまったく提供しないことです。ユーザーにHTTPSで再試行するように指示するプレーンテキストページを提供する場合を除いて、ポート80で応答しないでください(ただし、リンクを提供するnot、攻撃者が操作する可能性があります)。これにより、ユーザーはhttps://をブラウザに追加して、SSLで接続を開始し、MITM攻撃を防ぎます。

7
Andrew Schulman

ここで具体的に言及された攻撃を防ぐにはceejayozが最良の答えですが、ここで多くの人々が見逃しているものも指摘したいと思います。つまり、基本的にHTTPには他の部分がすでにわかっています。永続的な301リダイレクトを実行したい。これは、クライアントに新しいアドレスにさらに要求を出すように伝えます。ですから、誰かが間違ったURLを入力すると、2つのリクエストが行われますが、将来的には、優れたクライアントがそのURLへのリクエストを検出し、代わりに正しいリクエストを行い、無駄なリクエストを防ぐことになっています。問題は、これがその正確なURLに対してのみであることです。 HSTSは、「次のn秒間もこのドメインからの非セキュア接続を許可しない」とも言って、このスキームを改善します。

ユーザーは、安全でない場所にある機密サイトにアクセスしないでください。彼らは特に安全でない場所で彼らのためにサインアップすべきではありません。これらは、「信頼できないソースからの添付ファイルを開かないでください」のように教える必要がある基本的なユーザーセキュリティプリンシパルです。これは、アクセスしたことのないサイトに対するMiM攻撃を防ぐための最良の答えです。

余談ですが、一部のブラウザーは、特定の既知のサイトが常にHSTSを使用すると言ってこれを改善しています。残念ながら、このリストに簡単に追加することはできません。

さらに読む: http://coderrr.wordpress.com/2010/12/27/canonical-redirect-pitfalls-with-http-strict-transport-security-and-some-solutions/

http://dev.chromium.org/sts

1
krowe

完全に真実ではない: DNS /ホスト名を使用する方法、または特定のIPに解決する他の方法:ポート

方法はありますが、ほとんどのブラウザはrfc2782を実装していません。

1
Marcel