Sicherheitsüberlegungen für MetadatenSecurity Considerations with Metadata

Wenn Sie die Metadaten-Features in Windows Communication Foundation (WCF) verwenden, sollten Sie die Sicherheitsaspekte bei der Veröffentlichung, abrufen und Verwenden von Dienstmetadaten.When using the metadata features in Windows Communication Foundation (WCF), consider the security implications of publishing, retrieving, and using service metadata.

Veröffentlichen von MetadatenWhen to Publish Metadata

Standardmäßig veröffentlichen WCF-Diensten keine Metadaten an.WCF services do not publish metadata by default. Zum Veröffentlichen von Metadaten für einen WCF-Dienst müssen Sie ausdrücklich Veröffentlichen von Metadaten durch Hinzufügen von metadatenendpunkten zu Ihrem Dienst aktivieren (siehe Veröffentlichungsmetadaten).To publish metadata for a WCF service you must explicitly enable metadata publishing by adding metadata endpoints to your service (see Publishing Metadata). Wird das Veröffentlichen von Metadaten nicht aktiviert, bietet der Dienst eine geringere Angriffsfläche, und auch das Risiko der ungewollten Preisgabe von Informationen ist geringer.Leaving metadata publishing disabled reduces the attack surface for your service and lowers the risk of unintentional information disclosure. Metadaten müssen nicht von allen Diensten veröffentlicht werden.Not all services must publish metadata. Wenn keine Metadaten veröffentlicht werden müssen, können Sie die Funktion auch deaktiviert lassen.If you do not have to publish metadata, consider leaving it turned off. Beachten Sie, dass Sie weiterhin Metadaten und den Client direkt aus Ihrem Dienstassemblys mit generieren können die ServiceModel Metadata Utility Tool (Svcutil.exe).Note that you can still generate metadata and client code directly from your service assemblies using the ServiceModel Metadata Utility Tool (Svcutil.exe). Weitere Informationen zur Verwendung von Svcutil.exe zum Exportieren von Metadaten finden Sie unter wie: Verwenden von Svcutil.exe zum Exportieren von Metadaten aus den kompilierten Dienstcode.For more information about using Svcutil.exe to export metadata, see How to: Use Svcutil.exe to Export Metadata from Compiled Service Code.

Veröffentlichen von Metadaten unter Verwendung einer sicheren BindungPublishing Metadata Using a Secure Binding

Die Metadaten-Bindungen, die WCF bietet einen nicht sicher sind, und sie zulassen anonymen Zugriff auf die Metadaten.The default metadata bindings that WCF provides are not secure and they allow anonymous access to the metadata. Die Metadaten des Diensts, die ein WCF-Dienst veröffentlicht enthält eine ausführliche Beschreibung des Diensts und kann absichtlich oder unabsichtlich vertrauliche Informationen enthalten.The service metadata that a WCF service publishes contains a detailed description about the service and may intentionally or unintentionally contain sensitive information. So können in den Dienstmetadaten beispielsweise Informationen zu Infrastrukturvorgängen enthalten sein, die nicht für eine Veröffentlichung bestimmt sind.For example, service metadata may contain information about infrastructure operations that was not intended to be broadcast publicly. Mithilfe einer sicheren Bindung für den Metadatenendpunkt können die Dienstmetadaten vor nicht autorisiertem Zugriff geschützt werden.To protect service metadata from unauthorized access, you can use a secure binding for your metadata endpoint. Metadatenendpunkte reagieren auf HTTP/GET-Anforderungen, von denen Secure Sockets Layer (SSL) zum Sichern der Metadaten verwendet werden kann.Metadata endpoints respond to HTTP/GET requests that can use Secure Sockets Layer (SSL) to secure the metadata. Weitere Informationen finden Sie unter wie: sichere Metadatenendpunkte.For more information, see How to: Secure Metadata Endpoints.

Das Sichern der Metadatenendpunkte hat zudem den Vorteil, dass Dienstmetadaten auf sichere Weise und ohne Manipulations- oder Spoofinggefahr abgerufen werden können.Securing your metadata endpoints also provides a way for requesters to securely retrieve service metadata without the risk of tampering or spoofing.

Ausschließliches Verwenden vertrauenswürdiger MetadatenUsing Only Trusted Metadata

Mithilfe von Dienstmetadaten lassen sich automatisch die zum Aufrufen des Diensts erforderlichen Laufzeitkomponenten konstruieren.You can use service metadata to automatically construct the run-time components required to call the service. Die Metadaten können auch zur Entwurfszeit verwendet werden, um eine Clientanwendung zu entwickeln, oder zur Laufzeit, um die vom Client zum Aufrufen des Diensts verwendete Bindung dynamisch zu aktualisieren.You can also use metadata at design time to develop a client application or at runtime to dynamically update the binding a client uses to call a service.

Werden die Dienstmetadaten auf unsichere Weise abgerufen, können die Daten manipuliert oder gespooft werden.Service metadata can be tampered with or spoofed when retrieved in an insecure manner. Manipulierte Metadaten können eine Umleitung des Clients zu Malware, fehlerhafte Sicherheitseinstellungen oder bösartige XML-Strukturen beinhalten.Tampered metadata can redirect your client to a malicious service, contain compromised security settings, or contain malicious XML structures. Metadatendokumente können groß sein und werden häufig im Dateisystem gespeichert.Metadata documents can be large and are frequently saved to the file system. Verwenden Sie zum Schutz vor Manipulation und Spoofing beim Anfordern von Dienstmetadaten eine sichere Bindung (sofern vorhanden).To protect against tampering and spoofing, use a secure binding to request service metadata when one is available.

Verwenden sicherer Techniken zum Verarbeiten von MetadatenUsing Safe Techniques for Processing Metadata

Dienstmetadaten werden häufig von einem Dienst über ein Netzwerk abgerufen. Hierzu werden standardisierte Protokolle wie WS-MetadataExchange (MEX) verwendet.Service metadata is frequently retrieved from a service over a network using standardized protocols such as WS-MetadataExchange (MEX). Viele Metadatenformate enthalten Verweismechanismen, um auf weitere Metadaten zu verweisen.Many metadata formats include referencing mechanisms for pointing to additional metadata. Verweise in WSDL (Web Services Description Language)-, XML-Schema- und MEX-Dokumenten werden vom MetadataExchangeClient-Typ automatisch verarbeitet.The MetadataExchangeClient type automatically processes references for you in Web Services Description Language (WSDL) documents, XML Schema, and MEX documents. Die Größe des aus den abgerufenen Metadaten erstellten MetadataSet-Objekts verhält sich direkt proportional zum MaximumResolvedReferences-Wert für die verwendete MetadataExchangeClient-Instanz sowie zum MaxReceivedMessageSize-Wert für die von dieser MetadataExchangeClient-Instanz verwendeten Bindung.The size of the MetadataSet object created from the retrieved metadata is directly proportional to the MaximumResolvedReferences value for the MetadataExchangeClient instance that is used and the MaxReceivedMessageSize value for the binding being used by that MetadataExchangeClient instance. Legen Sie geeignete Werte für diese Kontingente fest.Set these quotas to appropriate values as dictated by your scenario.

In WCF wird Dienstmetadaten als XML verarbeitet.In WCF, service metadata is processed as XML. Beim Verarbeiten von XML-Dokumenten schützen sich die Anwendungen selbst vor bösartigen XML-Strukturen.When processing XML documents, applications should protect themselves against malicious XML structures. Verwenden der XmlDictionaryReader mit geeigneten Kontingenten, beim Verarbeiten von XML, und legen Sie außerdem die DtdProcessing Eigenschaft Prohibit.Use the XmlDictionaryReader with appropriate quotas when processing XML and also set the DtdProcessing property to Prohibit.

Das Metadatensystem in WCF ist erweiterbar und Erweiterungen für endpunktverweismetadaten, die in der Anwendungskonfigurationsdatei registriert werden können (siehe Erweitern des Metadatensystems).The metadata system in WCF is extensible and metadata extensions can be registered in your application configuration file (see Extending the Metadata System). Von Metadatenerweiterungen kann beliebiger Code ausgeführt werden, weshalb die Anwendungskonfigurationsdatei mithilfe geeigneter Zugriffssteuerungslisten (Access Control Lists, ACLs) geschützt werden muss und ausschließlich vertrauenswürdige Implementierungen von Metadatenerweiterungen registriert werden dürfen.Metadata extensions can run arbitrary code, so you should protect your application configuration file with appropriate access control lists (ACLs) and register only trusted metadata extension implementations.

Überprüfen von generierten ClientsValidating Generated Clients

Überprüfen Sie beim Generieren von Clientcode aus Metadaten, die von einer nicht vertrauenswürdigen Quelle abgerufen wurden, den generierten Clientcode, und stellen Sie sicher, dass der generierte Client mit den Sicherheitsrichtlinien der Clientanwendungen konform ist.When generating client code from metadata retrieved from a source that is not trusted, validate the generated client code to ensure that the generated client conforms to your client applications security policies. Die Validierung der Einstellungen für die Clientbindung kann entweder mit einem Validierungsverhalten oder durch eine Sichtprüfung des generierten Codes erfolgen.You can use a validating behavior to check settings on your client binding or visually inspect code generated by tools. Ein Beispiel dafür, wie einen Client implementiert, das Verhalten überprüft, finden Sie unter Clientvalidierung.For an example of how to implement a client that validates behaviors, see Client Validation.

Schützen von AnwendungskonfigurationsdateienProtecting Application Configuration Files

Mithilfe der Anwendungskonfigurationsdatei eines Diensts kann gesteuert werden, ob und auf welche Weise Metadaten veröffentlicht werden.A service's application configuration file may control how and if metadata is published. Es empfiehlt sich, die Anwendungskonfigurationsdatei mit geeigneten Zugriffssteuerungslisten (Access Control Lists, ACLs) zu schützen, um so den Schutz vor Einstellungsänderungen durch einen möglichen Angreifer sicherzustellen.It is a good idea to protect the application configuration file with appropriate access control lists (ACLs) to ensure an attacker cannot modify such settings.

Siehe auchSee Also

Vorgehensweise: Sichere MetadatenendpunkteHow to: Secure Metadata Endpoints
SicherheitSecurity