Dela via


Säkerhetsöverväganden med metadata

När du använder metadatafunktionerna i Windows Communication Foundation (WCF) bör du överväga säkerhetskonsekvenserna av att publicera, hämta och använda tjänstmetadata.

När metadata ska publiceras

WCF-tjänster publicerar inte metadata som standard. Om du vill publicera metadata för en WCF-tjänst måste du uttryckligen aktivera metadatapublicering genom att lägga till metadataslutpunkter i tjänsten (se Publicera metadata). Om du lämnar metadatapublicering inaktiverad minskar attackytan för din tjänst och minskar risken för oavsiktligt avslöjande av information. Alla tjänster måste inte publicera metadata. Om du inte behöver publicera metadata kan du överväga att lämna dem inaktiverade. Observera att du fortfarande kan generera metadata och klientkod direkt från dina tjänstsammansättningar med hjälp av ServiceModel Metadata Utility Tool (Svcutil.exe). Mer information om hur du använder Svcutil.exe för att exportera metadata finns i Så här använder du Svcutil.exe för att exportera metadata från kompilerad tjänstkod.

Publicera metadata med en säker bindning

Standardmetadatabindningarna som WCF tillhandahåller är inte säkra och de tillåter anonym åtkomst till metadata. Tjänstmetadata som en WCF-tjänst publicerar innehåller en detaljerad beskrivning av tjänsten och kan avsiktligt eller oavsiktligt innehålla känslig information. Tjänstmetadata kan till exempel innehålla information om infrastrukturåtgärder som inte var avsedda att sändas offentligt. Om du vill skydda tjänstmetadata från obehörig åtkomst kan du använda en säker bindning för metadataslutpunkten. Metadataslutpunkter svarar på HTTP/GET-begäranden som kan använda SSL (Secure Sockets Layer) för att skydda metadata. Mer information finns i Så här: Säkra metadataslutpunkter.

Att skydda dina metadataslutpunkter är också ett sätt för beställare att på ett säkert sätt hämta tjänstmetadata utan risk för manipulering eller förfalskning.

Använda endast betrodda metadata

Du kan använda tjänstmetadata för att automatiskt konstruera de körningskomponenter som krävs för att anropa tjänsten. Du kan också använda metadata vid designtillfället för att utveckla ett klientprogram eller vid körning för att dynamiskt uppdatera bindningen som en klient använder för att anropa en tjänst.

Tjänstmetadata kan manipuleras eller förfalskas när de hämtas på ett osäkert sätt. Manipulerade metadata kan omdirigera klienten till en skadlig tjänst, innehålla komprometterade säkerhetsinställningar eller innehålla skadliga XML-strukturer. Metadatadokument kan vara stora och sparas ofta i filsystemet. För att skydda mot manipulering och förfalskning använder du en säker bindning för att begära tjänstmetadata när en sådan är tillgänglig.

Använda Valv tekniker för att bearbeta metadata

Tjänstmetadata hämtas ofta från en tjänst via ett nätverk med hjälp av standardiserade protokoll som WS-MetadataExchange (MEX). Många metadataformat innehåller referensmekanismer för att peka på ytterligare metadata. Typen MetadataExchangeClient bearbetar automatiskt referenser åt dig i WSDL-dokument (Web Services Description Language), XML-schema och MEX-dokument. Storleken på objektet MetadataSet som skapas från hämtade metadata är direkt proportionell mot MaximumResolvedReferences värdet för den MetadataExchangeClient instans som används och MaxReceivedMessageSize värdet för bindningen som MetadataExchangeClient används av den instansen. Ställ in dessa kvoter på lämpliga värden enligt ditt scenario.

I WCF bearbetas tjänstmetadata som XML. När du bearbetar XML-dokument bör program skydda sig mot skadliga XML-strukturer. XmlDictionaryReader Använd med lämpliga kvoter vid bearbetning av DtdProcessing XML och ange även egenskapen till Prohibit.

Metadatasystemet i WCF är utökningsbart och metadatatillägg kan registreras i programkonfigurationsfilen (se Utöka metadatasystemet). Metadatatillägg kan köra godtycklig kod, så du bör skydda programkonfigurationsfilen med lämpliga åtkomstkontrollistor (ACL: er) och endast registrera implementeringar av betrodda metadatatillägg.

Verifiera genererade klienter

När du genererar klientkod från metadata som hämtats från en källa som inte är betrodd verifierar du den genererade klientkoden för att säkerställa att den genererade klienten överensstämmer med dina säkerhetsprinciper för klientprogram. Du kan använda ett verifierande beteende för att kontrollera inställningarna för klientbindningen eller visuellt inspektera kod som genereras av verktyg. Ett exempel på hur du implementerar en klient som validerar beteenden finns i Klientverifiering.

Skydda programkonfigurationsfiler

En tjänsts programkonfigurationsfil kan styra hur och om metadata publiceras. Det är en bra idé att skydda programkonfigurationsfilen med lämpliga åtkomstkontrollistor (ACL: er) för att säkerställa att en angripare inte kan ändra sådana inställningar.

Se även