メインコンテンツまでスキップ

6. セキュリティに関する考慮事項 (Security Considerations)

本節は、HTTP 認証に固有の既知のセキュリティ上の懸念を、開発者、情報提供者、およびユーザーに知らせることを目的としている。より一般的なセキュリティに関する考慮事項は、HTTP メッセージング [RFC7230] と意味論 [RFC7231] で扱われている。

HTTP 認証という話題に関するすべてがセキュリティ上の考慮事項であるため、以下の考慮事項のリストは網羅的ではない。さらに、これは一般的な認証フレームワークに関するセキュリティ上の考慮事項に限定されており、特定の認証スキームに関するすべての潜在的な考慮事項を論じるものではない (それらは各スキームを定義する仕様に文書化されるべきである)。さまざまな組織が、Web アプリケーションセキュリティに関する最新の研究 (例えば [OWASP]) への話題別の情報とリンクを維持しており、実際に見られる認証スキームを実装および使用する際の一般的な落とし穴も含まれている。

6.1 資格情報の機密性 (Confidentiality of Credentials)​

HTTP 認証フレームワークは、資格情報の機密性を維持するための単一のメカニズムを定義していない。代わりに、各認証スキームが送信前に資格情報をどのようにエンコードするかを定義する。これは将来の認証スキームの開発に柔軟性を与えるが、それ自体では機密性を提供しない既存のスキーム、またはリプレイ攻撃に対して十分に保護しない既存のスキームの保護には不十分である。さらに、サーバーが各個人ユーザーに固有の資格情報を期待する場合、それらの資格情報の交換は、資格情報内の内容が機密のままであったとしても、そのユーザーを識別する効果を持つ。

HTTP は、ヘッダーフィールドの機密性の高い送信を提供するために、基盤となるトランスポート層またはセッション層の接続のセキュリティ特性に依存している。言い換えれば、サーバーがこのフレームワークを使用して認証されたユーザーにアクセスを制限する場合、サーバーは、使用される認証スキームの性質に応じて接続が適切に保護されていることを保証する必要がある。例えば、個々のユーザー認証に依存するサービスは、資格情報を交換する前に TLS ("Transport Layer Security"、[RFC5246]) で接続を保護することをしばしば要求する。

6.2 認証資格情報とアイドル状態のクライアント (Authentication Credentials and Idle Clients)​

既存の HTTP クライアントとユーザーエージェントは、通常、認証情報を無期限に保持する。HTTP は、オリジンサーバーがクライアントに対してこれらのキャッシュされた資格情報を破棄するよう指示するメカニズムを提供していない。これは、プロトコルが資格情報がユーザーエージェントによってどのように取得または管理されるかを認識していないためである。資格情報を期限切れまたは失効させるメカニズムは、認証スキームの定義の一部として指定できる。

資格情報のキャッシュがアプリケーションのセキュリティモデルに干渉する可能性のある状況には、以下が含まれるが、これらに限定されない:

  • 長期間アイドル状態であったクライアント。その後、サーバーはクライアントに資格情報の再入力をユーザーに促させたいと望むかもしれない。

  • セッション終了の表示 (ページ上の "logout" や "commit" ボタンなど) を含むアプリケーション。その後にアプリケーションのサーバー側は、クライアントが資格情報を保持し続ける理由がもはや存在しないことを「認識」する。

資格情報をキャッシュするユーザーエージェントは、ユーザーの制御下でキャッシュされた資格情報を破棄するための、容易にアクセスできるメカニズムを提供することが推奨される。

6.3 保護空間 (Protection Spaces)​

保護空間を確立するために "realm" メカニズムのみに依存する認証スキームは、オリジンサーバー上のすべてのリソースに資格情報を露出させる。あるリソースに対して認証されたリクエストを成功させたクライアントは、同じオリジンサーバー上の他のリソースに対して同じ認証資格情報を使用できる。これにより、異なるリソースが他のリソース用の認証資格情報を収集することが可能になる。

これは、オリジンサーバーが同じ正規ルート URI (2.2 節) の下で複数の当事者のリソースをホストしている場合に特に懸念される。可能な緩和戦略には、認証資格情報への直接アクセスを制限すること (すなわち、Authorization リクエストヘッダーフィールドの内容を利用可能にしないこと)、および各当事者に異なるホスト名 (またはポート番号) を使用して保護空間を分離することが含まれる。