SSL接続なしでWebサイトへのアクセスを防ぐ方法は?


11

SSL証明書がインストールされているWebサイトを持っているので、https代わりにhttpを使用してWebサイトにアクセスすると、安全な接続を使用して接続できます。

しかし、私はまだ安全ではなくウェブサイトにアクセスできることに気づきました。のhttp代わりに使用するhttps

安全でない方法でWebサイトを使用するのを防ぐにはどうすればよいですか?

私がウェブサイトにディレクトリを持っている場合、例えば。samples/、このディレクトリへの安全でない接続を防ぐことはできますか?

回答:


12

残念ながら、この問題の唯一の一般的な解決策は、ユーザーにhttps://唯一の権限を与え、ユーザーがそれだけを使用することを期待していることを確認することです。最終的にユーザーが期待どおりにSSL / TLSを使用していることを確認するのはユーザーの責任です。

他のソリューションは、WebサイトがSSL / TLS接続のみを受け入れる場合でも、中間者攻撃に対して脆弱です。攻撃者はhttp://example.comexample.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

これはまた、あなたが両方に同じ設定を使用しているように聞こえるhttphttps。Apache Httpdを使用している場合は、構成を2つの異なるVirtualHostsに分割することをお勧めします。1つはポート80用で、もう1つはポート443用です。これらはまったく同じ構成である必要はありません。HTTPS専用のものを入れないでください。 HTTP仮想ホストで。


上記の問題を軽減する方法は、HTTP Strict Transport Securityをサポートするブラウザで使用することです(私の知る限り、ホスト全体に適用されます)。https://リダイレクトせずに使用しない場合、最初の接続がまだ公開されている可能性がありますが、とにかく(そしてHSTSが有効になっている)ことを期待し https://ているサイトの事前ロードされたリストを持つことが可能です。


良い情報、Gmailはこれをどのように行うのですか?-彼らがhttpsを強制するものの外観から。
toomanyairmiles

3
彼らはリダイレクトを使用します。これは、ユーザーが期待するとおりに、あなたが提供した場合に問題なく機能しますhttps://mail.google.com。ユーザーとして、それがで動作するhttp://mail.google.comことがわかった場合、おそらく本物にリクエストをプロキシするMITMがありますhttps://mail.google.com。残念ながら、ユーザー自身がチェックしなければ、Gmailはそれについて多くを行うことができません。実生活と同じ原則:アリスがボブと話したいが、IDを確認せずに代わりにチャック(ボブであると主張している)と話しかける場合、ボブはこの会話を認識せず、行うことができません。それについて何か。それはアリスの責任です。
ブルーノ

HTTPSで接続されているかどうかを確認し、SSLを使用していない場合はHTTPSアドレスにリダイレクトするPHPスクリプトをいくつか見ました。もちろん、あなたが今サイトを構築しているのでなければ、これは簡単な作業ではありません。
匿名ペンギン

@AnnonomusPerson、それはまったく同じ原理であり、それがHTTPからHTTPSへの書き換えルールが行うことです。プログラムで行うか、構成で行うかは問題ではありませんが、それでもプレーンHTTPでの最初の要求によるリダイレクトであり、同じ問題が発生します。
ブルーノ

3

httpトラフィックをhttpsにリダイレクトするだけです- この記事「httpをhttpsにリダイレクトするApacheセキュア接続-HTTPS接続を強制する」を参照してください

サブディレクトリの場合、これをディレクトリ自体のhtaccessファイルに配置します。

RewriteEngine on
RewriteCondition %{SERVER_PORT} !^443$
RewriteRule ^(.*)$ https://www.maindomain.com/directory/$1 [R=301,L] 

これを特定のサブディレクトリでのみ実行できますか?
CJ7 2012

@CraigJ申し訳ありませんが、サブディレクトリ部分を逃し、回答を更新しました。
toomanyairmiles

3
これはリスクをわずかに減らしますが、アクティブなMITM攻撃者に対しては機能しません。
ブルーノ

0

サイトを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(最新のブラウザーやより機知に富んだ攻撃者向け)。

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