15. Security Considerations (セキュリティに関する考慮事項)
このセクションでは、HTTP/1.1プロトコルのセキュリティに関する考慮事項について議論します。
15.1 Personal Information (個人情報)
HTTPクライアントは通常、大量の個人情報(ユーザーの氏名、所在地、メールアドレス、パスワード、暗号化キーなど)にアクセスできます。意図しない漏洩を防ぐため、これらの情報は慎重に扱う必要があります。
主なリスク:
- User-Agent、Referer、Fromヘッダがユーザーのプライバシーを漏洩する可能性があります
- URIのクエリ文字列に機密情報が含まれる可能性があります
- ログファイルに機密データが記録される可能性があります
15.2 Abuse of Server Log Information (サーバーログ情報の悪用)
サーバー運用者は、HTTPログファイルにユーザーの個人情報が含まれていることを認識し、他の機密情報と同じレベルの保護を行う必要があります。
15.3 Transfer of Sensitive Information (機密情報の転送)
他の汎用データ転送プロトコルと同様、HTTPは転送するデータの内容を規制できず、特定のリクエストの機密性を事前に判断することもできません。
推奨事項:
- HTTPS (HTTP over TLS/SSL) を使用して機密情報を転送する
- URIに機密情報を含めない(記録される可能性があります)
- 機密フォームデータの送信にはGETではなくPOSTを使用する
15.4 Encoding Sensitive Information in URI's (URIへの機密情報のエンコーディング)
URIの出所は信頼できない可能性があるため、HTTPクライアントはURIに機密データを含める際には注意が必要です。特に、URIにパスワードやその他の認証情報が含まれている場合です。
15.5 Location Headers and Spoofing (Locationヘッダとなりすまし)
単一のサーバーが複数の組織をサポートしている場合、そのサーバーはLocationおよびContent-Locationヘッダの値をチェックして、攻撃者がサーバーを使用して別の組織から来たように見えるレスポンスを生成できないようにする必要があります。
15.6 Authentication Credentials (認証資格情報)
既存のHTTPクライアントとユーザーエージェントは、通常、認証情報を無期限に保持します。HTTP/1.1は、オリジンサーバーがクライアントにこれらのキャッシュされた資格情報を破棄するよう指示する方法を提供していません。
セキュリティ推奨事項:
- セッションタイムアウトメカニズムを使用する
- 明示的なログアウト機能を提供する
- URIで資格情報を渡すことを避ける
15.7 Proxies and Caching (プロキシとキャッシング)
HTTPプロキシは中間者であり、潜在的なセキュリティリスクをもたらす可能性があります。組織は、プロキシアクセスのプライバシーとセキュリティへの影響を考慮する必要があります。
重要な問題:
- プロキシは転送されるすべてのデータを見ることができます
- キャッシュは機密情報を保存する可能性があります
- プロキシログはユーザーアクティビティを記録する可能性があります
キャッシュのセキュリティ対策:
- 共有キャッシュを防ぐためにCache-Control: privateを使用する
- あらゆるキャッシュを防ぐためにCache-Control: no-storeを使用する
- キャッシュのセキュリティ設定を検証する
15.8 DNS Spoofing (DNSなりすまし)
HTTPクライアントは、ホスト名をIPアドレスに解決するためにDNSに依存しています。DNSなりすまし攻撃により、クライアントが間違ったサーバーに接続する可能性があります。
防護措置:
- DNSSECを使用してDNSレスポンスを検証する
- HTTPSを使用してサーバーのIDを確認する
15.9 Attacks Based On File and Path Names (ファイル名とパス名に基づく攻撃)
実装は、悪意のあるクライアントがHTTPを介してアクセスすべきでないリソースにアクセスするのを防ぐため、Request-URIを慎重に処理する必要があります。
一般的な攻撃:
- パストラバーサル攻撃(
../../../etc/passwd) - 特殊ファイルへのアクセス
- シンボリックリンク攻撃
防護措置:
- すべてのパスを正規化する
- アクセス可能なディレクトリを制限する
- ファイル権限を検証する
要約
HTTP/1.1のセキュリティは以下に依存しています:
- トランスポート層セキュリティ - TLS/SSL (HTTPS) を使用する
- 正しい実装 - セキュリティのベストプラクティスに従う
- 適切な設定 - 機密情報の露出を制限する
- ユーザーの意識 - セキュリティリスクを認識するようユーザーを教育する
重要な注意事項:HTTP自体はステートレスプロトコルであり、組み込みのセキュリティメカニズムを提供していません。セキュリティは、HTTPS、適切な認証メカニズム、およびセキュアなコーディング実践を使用することによって実現する必要があります。