Delen via


Beveiligingsoverwegingen met metagegevens

Houd bij het gebruik van de metagegevensfuncties in Windows Communication Foundation (WCF) rekening met de gevolgen voor de beveiliging van het publiceren, ophalen en gebruiken van servicemetagegevens.

Wanneer metagegevens publiceren

WCF-services publiceren standaard geen metagegevens. Als u metagegevens voor een WCF-service wilt publiceren, moet u het publiceren van metagegevens expliciet inschakelen door metagegevenseindpunten toe te voegen aan uw service (zie Publicatiemetagegevens). Als het publiceren van metagegevens is uitgeschakeld, vermindert u het kwetsbaarheid voor aanvallen voor uw service en vermindert u het risico op onbedoelde openbaarmaking van informatie. Niet alle services moeten metagegevens publiceren. Als u geen metagegevens hoeft te publiceren, kunt u overwegen deze uit te schakelen. Houd er rekening mee dat u nog steeds metagegevens en clientcode rechtstreeks vanuit uw serviceassembly's kunt genereren met behulp van het hulpprogramma voor metagegevens van ServiceModel (Svcutil.exe). Zie Procedure voor meer informatie over het gebruik van Svcutil.exe voor het exporteren van metagegevens: Gebruik Svcutil.exe voor het exporteren van metagegevens uit gecompileerde servicecode.

Metagegevens publiceren met behulp van een beveiligde binding

De standaardmetagegevensbindingen die WCF biedt, zijn niet beveiligd en bieden anonieme toegang tot de metagegevens. De servicemetagegevens die door een WCF-service worden gepubliceerd, bevatten een gedetailleerde beschrijving van de service en kunnen opzettelijk of onbedoeld gevoelige informatie bevatten. Servicemetagegevens kunnen bijvoorbeeld informatie bevatten over infrastructuurbewerkingen die niet openbaar moeten worden uitgezonden. Als u servicemetagegevens wilt beveiligen tegen onbevoegde toegang, kunt u een beveiligde binding gebruiken voor uw metagegevenseindpunt. Metagegevenseindpunten reageren op HTTP/GET-aanvragen die ssl (Secure Sockets Layer) kunnen gebruiken om de metagegevens te beveiligen. Zie How to: Secure Metadata Endpoints (Eindpunten voor beveiligde metagegevens) voor meer informatie.

Het beveiligen van uw metagegevenseindpunten biedt ook een manier voor aanvragers om veilig servicemetagegevens op te halen zonder het risico op manipulatie of adresvervalsing.

Alleen vertrouwde metagegevens gebruiken

U kunt servicemetagegevens gebruiken om automatisch de runtimeonderdelen te maken die nodig zijn om de service aan te roepen. U kunt ook metagegevens op ontwerptijd gebruiken om een clienttoepassing te ontwikkelen of tijdens runtime om de binding die een client gebruikt om een service aan te roepen dynamisch bij te werken.

Servicemetagegevens kunnen worden gemanipuleerd of vervalst wanneer ze op een onveilige manier worden opgehaald. Geknoeide metagegevens kunnen uw client omleiden naar een kwaadwillende service, beveiligingsinstellingen bevatten of schadelijke XML-structuren bevatten. Metagegevensdocumenten kunnen groot zijn en worden vaak opgeslagen in het bestandssysteem. Als u wilt beveiligen tegen manipulatie en adresvervalsing, gebruikt u een beveiligde binding om servicemetagegevens aan te vragen wanneer deze beschikbaar is.

Veilige technieken gebruiken voor het verwerken van metagegevens

Servicemetagegevens worden vaak opgehaald uit een service via een netwerk met behulp van gestandaardiseerde protocollen zoals WS-MetadataExchange (MEX). Veel indelingen voor metagegevens bevatten verwijzingen naar mechanismen voor het verwijzen naar aanvullende metagegevens. Het MetadataExchangeClient type verwerkt automatisch verwijzingen voor u in WSDL-documenten (Web Services Description Language), XML-schema en MEX-documenten. De grootte van het MetadataSet object dat is gemaakt op basis van de opgehaalde metagegevens, is rechtstreeks evenredig met de MaximumResolvedReferences waarde voor het MetadataExchangeClient exemplaar dat wordt gebruikt en de MaxReceivedMessageSize waarde voor de binding die door dat MetadataExchangeClient exemplaar wordt gebruikt. Stel deze quota in op de juiste waarden zoals bepaald door uw scenario.

In WCF worden servicemetagegevens verwerkt als XML. Bij het verwerken van XML-documenten moeten toepassingen zichzelf beschermen tegen schadelijke XML-structuren. Gebruik de juiste quota bij het XmlDictionaryReader verwerken van XML en stel de DtdProcessing eigenschap ook in op Prohibit.

Het metagegevenssysteem in WCF is uitbreidbaar en metagegevensextensies kunnen worden geregistreerd in uw toepassingsconfiguratiebestand (zie Het metagegevenssysteem uitbreiden). Metagegevensextensies kunnen willekeurige code uitvoeren, dus u moet uw toepassingsconfiguratiebestand beveiligen met de juiste toegangsbeheerlijsten (ACL's) en alleen implementaties van vertrouwde metagegevensextensie registreren.

Gegenereerde clients valideren

Bij het genereren van clientcode van metagegevens die zijn opgehaald uit een bron die niet wordt vertrouwd, valideert u de gegenereerde clientcode om ervoor te zorgen dat de gegenereerde client voldoet aan het beveiligingsbeleid van uw clienttoepassingen. U kunt een validatiegedrag gebruiken om de instellingen voor uw clientbinding te controleren of code visueel te inspecteren die wordt gegenereerd door hulpprogramma's. Zie Clientvalidatie voor een voorbeeld van het implementeren van een client die gedrag valideert.

Toepassingsconfiguratiebestanden beveiligen

Het toepassingsconfiguratiebestand van een service kan bepalen hoe en of metagegevens worden gepubliceerd. Het is een goed idee om het configuratiebestand van de toepassing te beveiligen met de juiste toegangsbeheerlijsten (ACL's) om ervoor te zorgen dat een aanvaller dergelijke instellingen niet kan wijzigen.

Zie ook