web-dev-qa-db-ja.com

基本アクセス認証は安全ですか?

Apacheを使用すると、基本的なアクセス認証を使用してユーザーに名前/パスワードを要求するページを設定し、何らかの方法でそれらの資格情報を使用して、そのユーザーにアクセスを許可するのは非常に簡単です。

クライアントとサーバー間の接続が安全であると想定して、これは安全ですか?

49
Nathan Osman

基本認証に関する懸念は、資格情報がクリアテキストとして送信され、パケットスニッフィングに対して脆弱であることです。その接続がTLS/SSLを使用して保護されている場合、暗号化を使用する他の方法と同じくらい安全です。

55
Chris Diver

これは古いスレッドであり、最も高い投票/選択された答えが正しいとは思いません。

@Nateowamiで述べたように、 セキュリティスタック交換スレッド は、基本認証に関する多くの問題の概要を示しています。

別のポイントを指摘したいと思います。パスワードの検証を正しく行っている場合、基本認証によってサーバーがサービス拒否に対して脆弱になります。どうして?昔は、ソルトハッシュはパスワードの検証に十分であると考えられていました。 それはもはや当てはまりません 。今日では、データベースが公開された場合にパスワードがブルートフォースで強制されることを防ぐために、遅い機能が必要であると言われています(これは非常に頻繁に発生します)。基本認証を使用している場合、すべてのAPI呼び出しでこれらの遅い計算をサーバーに実行させる必要があるため、サーバーに大きな負荷がかかります。この日付の付いた認証メカニズムを使用するだけで、DoSに対してより脆弱になります。

より一般的には、パスワードはセッションよりも価値があります。ユーザーパスワードの侵害により、ユーザーのアカウントが無期限にハイジャックされ、パスワードの再利用によりユーザーがアクセスする他のシステムがハイジャックされる可能性は言うまでもありません。一方、ユーザーセッションは時間制限があり、単一のシステムに限定されます。したがって、多層防御の問題として、パスワードなどの価値の高いデータは、必要がなければ繰り返し使用しないでください。基本認証は時代遅れのテクノロジーであり、非推奨にする必要があります。

15
TheGreatContini

ほとんどのサイトが基本認証よりもOAuth=を好む理由は、基本認証ではユーザーがサードパーティアプリでパスワードを入力する必要があるためです。このサードパーティアプリはパスワードをクリアテキストで保存する必要があります。唯一の方法アクセスを取り消すことは、ユーザーが自分のパスワードを変更することですが、これはすべてのサードパーティアプリのアクセスを取り消すことになるので、ここで問題を確認できます。

一方、OAuthにはWebフレームが必要です。ユーザーはこの特定のサイト自体のログインページでログイン情報を入力します。次に、サイトはアプリが認証に使用できるアクセストークンを生成します将来的にはそれ自体です。

  • アクセストークンを取り消すことができます
  • サードパーティのアプリはユーザーのパスワードを見ることができません
  • アクセストークンには特定のアクセス許可を付与できます(基本的な認証はすべてのコンシューマーを同等に扱います)。
  • サードパーティのアプリが安全でないことが判明した場合、サービスプロバイダーはその特定のアプリに対して生成されたすべてのアクセストークンを取り消すことを決定できます。
4
elslooo

盗聴可能な環境でのhttp経由の基本認証は、パスワードを簡単に逆にして再利用できるため、認証なしのようです。 ssl上のクレジットカードが「少し」安全であるという上記のぎこちないコメントに応えて、問題は、基本認証が同じチャネルで何度も何度も使用されることです。パスワードを一度侵害すると、単一のデータ属性だけでなく、そのチャネル上のすべてのトランザクションのセキュリティも侵害されます。

同じクレジットカード番号をWebセッションで繰り返し渡すことを知っている場合は、SSLに依存する以外に、クレジットカード番号が使用される可能性があるため、他のコントロールが考えられることを願っています。それはしばしば妥協されます...最終的には。

1
phydroxide

htpasswdを使用してパスワードを生成する場合は、htdigestに切り替えることを検討してください。

ダイジェスト認証は、暗号化されていない接続でも安全で、セットアップも簡単です。確かに、sslを使用する場合は基本認証で問題ありませんが、ダイジェスト認証を簡単に使用できるのに、なぜチャンスを利用するのでしょうか。

0
jwsample