次の方法で共有


メタデータに関するセキュリティに関する考慮事項

Windows Communication Foundation (WCF) でメタデータ機能を使用する場合は、サービス メタデータの公開、取得、および使用によるセキュリティへの影響を考慮してください。

メタデータを発行するタイミング

WCF サービスでは、既定ではメタデータは発行されません。 WCF サービスのメタデータを公開するには、メタデータ エンドポイントをサービスに追加してメタデータの公開を明示的に有効にする必要があります (メタデータ の公開を参照)。 メタデータの公開を無効のままにすると、サービスの攻撃対象領域が減少し、意図しない情報漏えいのリスクが軽減されます。 すべてのサービスがメタデータを公開する必要があるわけではありません。 メタデータを発行する必要がない場合は、オフのままにすることを検討してください。 ServiceModel メタデータ ユーティリティ ツール (Svcutil.exe) を使用して、サービス アセンブリからメタデータとクライアント コードを直接生成できることに注意してください。 Svcutil.exe を使用してメタデータをエクスポートする方法の詳細については、「 方法: Svcutil.exe を使用してコンパイル済みサービス コードからメタデータをエクスポートする」を参照してください。

セキュリティで保護されたバインドを使用したメタデータの公開

WCF が提供する既定のメタデータ バインディングは安全ではなく、メタデータへの匿名アクセスを許可します。 WCF サービスが公開するサービス メタデータには、サービスに関する詳細な説明が含まれており、機密情報が意図的または意図せずに含まれている可能性があります。 たとえば、サービス メタデータには、パブリックにブロードキャストすることを意図していないインフラストラクチャ操作に関する情報が含まれている場合があります。 承認されていないアクセスからサービス メタデータを保護するには、メタデータ エンドポイントのセキュリティで保護されたバインディングを使用できます。 メタデータ エンドポイントは、Secure Sockets Layer (SSL) を使用してメタデータをセキュリティで保護できる HTTP/GET 要求に応答します。 詳細については、「方法: メタデータ エンドポイントをセキュリティで保護する」を参照してください。

また、メタデータ エンドポイントをセキュリティで保護することで、要求者は改ざんやスプーフィングのリスクなしにサービス メタデータを安全に取得できます。

信頼されたメタデータのみを使用する

サービス メタデータを使用して、サービスの呼び出しに必要なランタイム コンポーネントを自動的に構築できます。 また、デザイン時にメタデータを使用してクライアント アプリケーションを開発したり、実行時にクライアントがサービスを呼び出すために使用するバインディングを動的に更新したりすることもできます。

サービス メタデータは、セキュリティで保護されていない方法で取得された場合に改ざんされたり、スプーフィングされたりする可能性があります。 改ざんされたメタデータは、クライアントを悪意のあるサービスにリダイレクトしたり、セキュリティ設定が侵害されたり、悪意のある XML 構造が含まれたりする可能性があります。 メタデータ ドキュメントは大きくなる可能性があり、頻繁にファイル システムに保存されます。 改ざんやスプーフィングから保護するには、セキュリティで保護されたバインディングを使用して、使用可能な場合にサービス メタデータを要求します。

メタデータを処理するための安全な手法の使用

サービス メタデータは、WS-MetadataExchange (MEX) などの標準化されたプロトコルを使用して、ネットワーク経由でサービスから頻繁に取得されます。 多くのメタデータ形式には、追加のメタデータを指す参照メカニズムが含まれます。 MetadataExchangeClient型は、Web サービス記述言語 (WSDL) ドキュメント、XML スキーマ、および MEX ドキュメントの参照を自動的に処理します。 取得したメタデータから作成されたMetadataSet オブジェクトのサイズは、使用されるMaximumResolvedReferences インスタンスのMetadataExchangeClient値と、そのMaxReceivedMessageSize インスタンスで使用されているバインドのMetadataExchangeClient値に直接比例します。 これらのクォータは、シナリオに応じて適切な値に設定します。

WCF では、サービス メタデータは XML として処理されます。 XML ドキュメントを処理する場合、アプリケーションは悪意のある XML 構造から自分自身を保護する必要があります。 XML を処理するときに適切なクォータで XmlDictionaryReader を使用し、 DtdProcessing プロパティを Prohibit に設定します。

WCF のメタデータ システムは拡張可能であり、メタデータ拡張をアプリケーション構成ファイルに登録できます ( メタデータ システムの拡張を参照)。 メタデータ拡張機能は任意のコードを実行できるため、アプリケーション構成ファイルを適切なアクセス制御リスト (ACL) で保護し、信頼されたメタデータ拡張機能の実装のみを登録する必要があります。

生成されたクライアントの検証

信頼されていないソースから取得したメタデータからクライアント コードを生成する場合は、生成されたクライアント コードを検証して、生成されたクライアントがクライアント アプリケーションのセキュリティ ポリシーに準拠していることを確認します。 検証動作を使用して、クライアント バインドの設定を確認したり、ツールによって生成されたコードを視覚的に検査したりできます。 動作を検証するクライアントを実装する方法の例については、「 クライアントの検証」を参照してください。

アプリケーション構成ファイルの保護

サービスのアプリケーション構成ファイルは、メタデータの発行方法や発行の可否を制御できます。 攻撃者がそのような設定を変更できないように、アプリケーション構成ファイルを適切なアクセス制御リスト (ACL) で保護することをお勧めします。

こちらも参照ください