9. Security Considerations (セキュリティに関する考慮事項)
このセクションは、HTTP/1.1を展開する際に知られているセキュリティ上の制限について、開発者、情報提供者、およびユーザーに通知することを目的としています。
9.1. Establishing Authority (権限の確立)
HTTPは、URI authority (権限) コンポーネントの概念に依存しています。これには、オリジンサーバーのIPアドレスまたはホスト名、およびTCPポート番号が含まれます。
HTTP内でサーバー権限を確立するための信頼できるメカニズムの必要性により、HTTPSの開発が行われました (TLSを使用するHTTP)、[RFC2818] で定義されているとおりです。
9.2. Risks of Intermediaries (仲介者のリスク)
デフォルトでは、HTTPは基盤となるトランスポートプロトコルのセキュリティ属性に依存しています。TLSを使用することにより、HTTPはTLSに依存してIDを検証し、機密性と整合性保護を提供します。
ただし、TLSはトランスポート層でのみ保護を提供します。HTTPメッセージは、通信パスのエンドポイントではない仲介者によって読み取られたり、変更されたりする可能性があります。
9.3. Attacks Based on File and Path Names (ファイル名とパス名に基づく攻撃)
オリジンサーバーは、リソースの表現を保存するためにファイルシステムの階層構造を使用することが多く、その階層を提供するURI空間に反映させます。
実装は、URIをファイルシステムにマッピングする方法に注意する必要があります。
9.4. Attacks Based on Command, Code, or Query Injection (コマンド、コード、またはクエリインジェクションに基づく攻撃)
オリジンサーバーは、クライアントが提供する情報の一部として (URIまたはメッセージ本文で) パラメータを使用することが多く、これらのパラメータは内部クエリ、コマンド、またはコードを構築するために使用されることがあります。
実装は、すべての入力を検証およびサニタイズしなければなりません。
9.5. Attacks via Protocol Element Length (プロトコル要素の長さによる攻撃)
HTTPは、リクエスト行、ステータス行、ヘッダーフィールド、およびメッセージ本文の境界を含む、さまざまなプロトコル要素の境界をマークするために長さベースの区切り文字を使用するため、実装は、過度に大きなプロトコル要素を送信することによって攻撃者が過度なリソースを消費するのを防ぐ必要があります。
9.5.1. Request Smuggling (リクエストスマグリング)
リクエストスマグリング攻撃は、HTTPメッセージフレーミングの不一致または曖昧性を悪用します。
リクエストスマグリング攻撃を防ぐために、実装は次のことをしなければなりません:
- 特に Section 3.3.3 で定義されているメッセージ本文の長さ決定ルールに従い、メッセージフレーミングルールを厳格に遵守する
- 一貫性のない、または曖昧なフレーミング情報を含むメッセージを拒否する
9.5.2. Response Splitting (レスポンス分割)
レスポンス分割攻撃は、HTTPレスポンスを生成する際にアプリケーションが入力を適切に検証しないという脆弱性を悪用します。
実装は、すべての入力を検証しなければなりません。
9.6. Disclosure of Sensitive Information in URIs (URIでの機密情報の開示)
URIは、さまざまなシステムログ、ブラウザ履歴、およびリファラーヘッダーフィールドに記録されることが多いです。したがって、機密情報は、特にクエリ文字列でURIで送信すべきではありません。
9.7. Disclosure of Fragment after Redirects (リダイレクト後のフラグメントの開示)
フラグメント識別子はサーバーに送信されませんが、URIにフラグメントが含まれていて、そのURIが別のサイトにリダイレクトされた場合、元のフラグメントはリダイレクト後に新しいサイトに公開される可能性があります。
9.8. Disclosure of Product Information (製品情報の開示)
ServerおよびUser-Agentヘッダーフィールドには、通常、送信者のソフトウェアに関する情報が含まれています。これらの情報は統計目的や相互運用性の問題の識別に役立つかもしれませんが、攻撃者がソフトウェアの脆弱性を識別するためにも使用される可能性があります。
9.9. Browser Fingerprinting (ブラウザフィンガープリンティング)
ブラウザフィンガープリンティングは、Webサイトがさまざまな情報 (HTTPヘッダーフィールドを含む) を使用して、Cookieや他の明示的な追跡メカニズムを使用しなくても、ブラウザを一意に識別または追跡する技術です。