.htaccessを使用してディレクトリをパスワードで保護することは、権限のないユーザーがファイルを見るのを防ぐ最良の方法ですか?ディレクトリのコンテンツを保護する代わりに、それを表示するために認証されたユーザーがアクセスできるようにする方法はありますか?
また、誰かが強引に侵入してサーバーに負担をかけることはできませんか?
注目すべきいくつかのこと:
メイン構成(または仮想ホスト構成)で<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