Considerazioni sulla sicurezza con metadati
Quando si usano le funzionalità dei metadati in WCF (Windows Communication Foundation), considerare le implicazioni di sicurezza della pubblicazione, del recupero e dell'uso dei metadati del servizio.
Quando pubblicare metadati
I servizi WCF non pubblicano metadati per impostazione predefinita. Per pubblicare metadati per un servizio WCF, è necessario abilitare esplicitamente la pubblicazione dei metadati aggiungendo endpoint dei metadati al servizio (vedere Pubblicazione di metadati). Se si lascia disabilitata la pubblicazione dei metadati, si riduce la superficie di attacco del servizio e il rischio di diffusione non intenzionale di informazioni. Non tutti i servizi devono pubblicare metadati. Se non è necessario pubblicare metadati, considerare l'ipotesi di lasciare la funzione disattivata. Si noti che è comunque possibile generare metadati e codice client direttamente dagli assembly del servizio usando lo strumento ServiceModel Metadata Utility (Svcutil.exe). Per altre informazioni sull'uso di Svcutil.exe per esportare i metadati, vedere Procedura: Usare Svcutil.exe per esportare i metadati dal codice del servizio compilato.
Pubblicazione di metadati tramite un'associazione sicura
I binding di metadati predefiniti forniti da WCF non sono protetti e consentono l'accesso anonimo ai metadati. I metadati di servizio pubblicati da un servizio WCF contengono una descrizione dettagliata del servizio e potrebbero contenere, in modo intenzionale o non intenzionale, informazioni riservate. I metadati del servizio possono, ad esempio, contenere informazioni su operazioni dell'infrastruttura non destinate ad essere trasmesse pubblicamente. Per proteggere metadati del servizio dall'accesso non autorizzato, è possibile usare un'associazione protetta per l'endpoint dei metadati. Gli endpoint dei metadati rispondono alle richieste HTTP/GET che possono usare SSL (Secure Sockets Layer) per proteggere i metadati. Per altre informazioni, vedere Procedura: Proteggere gli endpoint dei metadati.
La sicurezza degli endpoint dei metadati offre inoltre ai richiedenti un modo sicuro per recuperare i metadati del servizio, senza rischi di manomissioni o spoofing.
Utilizzo dei soli metadati attendibili
È possibile usare metadati del servizio per costruire automaticamente i componenti runtime necessari per chiamare il servizio. È inoltre possibile usare i metadati in fase di progettazione, per sviluppare un'applicazione client, o in fase di esecuzione, per aggiornare dinamicamente il binding usato da un client per chiamare un servizio.
I metadati del servizio possono essere manomessi o sottoposti a spoofing quando vengono recuperati in modo non protetto. I metadati manomessi possono reindirizzare il client a un servizio dannoso, contenere impostazioni di sicurezza compromesse o strutture XML dannose. I documenti di metadati possono essere di grandi dimensioni e vengono spesso salvati nel file system. Per evitare manomissioni e spoofing, usare un'associazione protetta per richiedere i metadati del servizio quando diventano disponibili.
Uso di tecniche sicure per l'elaborazione dei metadati
I metadati del servizio vengono spesso recuperati da un servizio su una rete usando protocolli standardizzati, ad esempio WS-MetadataExchange (MEX). Molti formati dei metadati includono meccanismi di riferimento per puntare a ulteriori metadati. Il tipo MetadataExchangeClient elabora automaticamente i riferimenti in documenti WSDL (Web Services Description Language), XML Schema e documenti MEX. La dimensione dell'oggetto MetadataSet creato dai metadati recuperati è direttamente proporzionale al valore di MaximumResolvedReferences per l'istanza di MetadataExchangeClient usata e al valore di MaxReceivedMessageSize
per l'associazione usata dall'istanza di MetadataExchangeClient in questione. Impostare queste quote sui valori appropriati, in base alle necessità dello scenario.
In WCF, i metadati del servizio vengono elaborati come XML. Quando si elaborano documenti XML, le applicazioni devono proteggersi da strutture XML dannose. Usare XmlDictionaryReader con quote appropriate durante l'elaborazione XML e impostare anche la proprietà DtdProcessing su Prohibit.
Il sistema di metadati in WCF è estendibile e le estensioni dei metadati possono essere registrate nel file di configurazione dell'applicazione. Vedere Estensione del sistema di metadati. Le estensioni dei metadati possono eseguire codice arbitrario, pertanto è necessario proteggere il file di configurazione dell'applicazione con elenchi di controllo di accesso (ACL) appropriati e registrare solo le implementazioni delle estensioni dei metadati attendibili.
Convalida dei client generati
Quando si genera codice client dai metadati recuperati da un'origine non attendibile, convalidare il codice client generato per verificare che il client generato sia conforme ai criteri di sicurezza dell'applicazione client. È possibile usare un comportamento di convalida per controllare le impostazioni sull'associazione client o controllare visivamente il codice generato dagli strumenti. Per un esempio di come implementare un client che convalidi i comportamenti, vedere Convalida del client.
Protezione dei file di configurazione dell'applicazione
Il file di configurazione dell'applicazione di un servizio può controllare come e se i metadati vengono pubblicati. È buona norma proteggere il file di configurazione dell'applicazione con elenchi di controllo di accesso (ACL) appropriati, per assicurare che l'autore di un attacco non possa modificare tali impostazioni.