web-dev-qa-db-ja.com

.htaccessパスワード保護はどの程度安全ですか?

.htaccessを使用してディレクトリをパスワードで保護することは、権限のないユーザーがファイルを見るのを防ぐ最良の方法ですか?ディレクトリのコンテンツを保護する代わりに、それを表示するために認証されたユーザーがアクセスできるようにする方法はありますか?

また、誰かが強引に侵入してサーバーに負担をかけることはできませんか?

40
Steve

注目すべきいくつかのこと:

メイン構成(または仮想ホスト構成)で<Directory>命令を使用することにより、.htaccessなしで常に.htaccessにセキュリティを追加できます。 (AllowOverride Noneを使用して.htaccessのサポートを完全に削除した場合)速くなり、誰かが.htaccessを変更するリスクがなくなります。

.htaccessファイルにセキュリティを追加する方法はいくつかあります。これらの方法の1つは、.htpasswdファイルで基本HTTP認証を使用することです。これらの.htpasswdファイルは、Webディレクトリのルートにあるべきではありません。他の可能性の1つは、 HTTPダイジェスト認証 を使用することです。ただし、非常に古いブラウザーではサポートされません(IE6など)。

通常、HTTP Basic認証が発生します。これは、その動作方法が理由で、非常に弱い保護です。最初のリクエストで拒否された場合、ブラウザはパスワードとログインを要求し、リクエストされたWebサーバーのこのパスワードログインアソシエーションを記憶します。その後、ブラウザを閉じるまでこのWebサーバーに送信されるすべてのリクエストは、リクエストヘッダーにログインとパスワードが追加されます暗号化されていない。文字列 'Yourlogin:Yourpassword'に単純にbase64エンコードが適用され、純粋なASCII7文字列のように見え、エンコードの問題を防ぎます。

そのため、リクエスト(wifiホットスポット、中間者、ローカルネットワーク、エコースイッチなど)を盗聴する人は、パスワードとログインを知っています。悪い。ルールは「:

接続がHTTPS(SSL)でない場合は、基本HTTP認証を使用しないでください。

Webサーバーが完全にHTTPSで問題ない場合(下部の編集を参照)、クリアテキスト/パスワードはSSLによって暗号化されます。

ブルートフォースの問題について(そして、はい、一部の人々はログイン/パスワードをブルートフォースしようとすることができますが、それを防ぐために mod_securityモジュール を調整する場合を除きます) htpasswdページのセキュリティの考慮 は非常に明確です:

Crypt()アルゴリズムを使用する場合、パスワードの最初の8文字のみがパスワードの形成に使用されることに注意してください。指定されたパスワードが長い場合、余分な文字は静かに破棄されます

そして:

WindowsおよびMPEプラットフォームでは、htpasswdで暗号化されたパスワードの長さは255文字以下に制限されています。長いパスワードは255文字に切り捨てられます。

したがって、SHA エンコーディング パスワードのハッシュ(ソルトされていない場合でも)。

認証されたユーザーがディレクトリのコンテンツを閲覧できるようにする別の方法は、アプリケーション内でディレクトリのリストとファイルのアップロードを処理することです(PHP、Tomcatなど)ではなくApache自動リスト。セキュリティの観点からすると、自動リストモジュール(mod_autoindex)は、実行中のApacheにあるべきではないものです。

編集

一部のURLのみをHTTP認証で保護する場合、完全なHTTPSサーバーは必要ありません。本当に必要なのは、これらすべての保護されたURLがhttpsにあることです、保護されていないURLがhttpドメインにある場合、認証ヘッダーはありませんこれは別のドメインであるため使用されます(および認証ヘッダーはドメインによって送信されます)。したがって、これらのURLの基本的なリダイレクトルールをhttpドメインに追加できます。

RedirectMatch 301 ^/secure/(.*)$ https://www.example.com/secure/$1
66
regilero