Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questo articolo descrive le procedure consigliate per l'esecuzione di Windows Communication Foundation (WCF) in un ambiente parzialmente attendibile.
Serializzazione
Applicare queste procedure quando si usa DataContractSerializer in un'applicazione parzialmente attendibile.
Tutti i tipi serializzabili devono essere contrassegnati in modo esplicito con l'attributo [DataContract] . Le tecniche seguenti non sono supportate in un ambiente parzialmente attendibile:
- Marcatura delle classi da serializzare con SerializableAttribute.
- Implementazione dell'interfaccia ISerializable per consentire a una classe di controllare il processo di serializzazione.
Uso di DataContractSerializer
Tutti i tipi contrassegnati con l'attributo
[DataContract]devono essere pubblici. Non è possibile serializzare tipi non pubblici in un ambiente di attendibilità parziale.Tutti i
[DataContract]membri di un tipo serializzabile[DataContract]devono essere pubblici. Un tipo con un[DataMember]non pubblico non può essere serializzato in un ambiente con fiducia parziale.I metodi che gestiscono gli eventi di serializzazione ( ad esempio
OnSerializing,OnSerializedOnDeserializing, eOnDeserialized) devono essere dichiarati come pubblici. Sono tuttavia supportate implementazioni esplicite e implicite di OnDeserialization(Object) .[DataContract]I tipi implementati negli assembly contrassegnati con AllowPartiallyTrustedCallersAttribute non devono eseguire azioni correlate alla sicurezza nel costruttore del tipo, perché DataContractSerializer non chiama il costruttore dell'oggetto appena creato durante la deserializzazione. In particolare, è necessario evitare per[DataContract]i tipi le seguenti tecniche di sicurezza comuni:Tentativo di limitare l'accesso con attendibilità parziale rendendo interno o privato il costruttore del tipo.
Limitare l'accesso al tipo aggiungendo un
[LinkDemand]al costruttore del tipo.Supponendo che, poiché l'oggetto è stato creato correttamente, tutti i controlli di convalida applicati dal costruttore sono stati superati correttamente.
Utilizzo di IXmlSerializable
Le procedure consigliate seguenti si applicano ai tipi che implementano IXmlSerializable e vengono serializzati usando :DataContractSerializer
Le GetSchema implementazioni del metodo statico devono essere
public.I metodi di istanza che implementano l'interfaccia IXmlSerializable devono essere
public.
Uso di WCF da codice della piattaforma completamente attendibile che consente chiamate da chiamanti parzialmente attendibili
Il modello di sicurezza con attendibilità parziale WCF presuppone che qualsiasi chiamante di un metodo pubblico o di una proprietà WCF sia in esecuzione nel contesto di sicurezza di accesso al codice dell'applicazione host. WCF presuppone inoltre che esista un solo contesto di sicurezza dell'applicazione per ogni AppDomaine che questo contesto venga stabilito in AppDomain fase di creazione da un host attendibile, ad esempio da una chiamata a CreateDomain o da ASP.NET Application Manager.
Annotazioni
La sicurezza dall'accesso al codice è stata deprecata in tutte le versioni di .NET Framework e .NET. Le versioni recenti di .NET non rispettano le annotazioni CAS e generano errori se vengono usate API correlate a CAS. Gli sviluppatori devono cercare mezzi alternativi per eseguire attività di sicurezza.
Questo modello di sicurezza si applica alle applicazioni scritte dall'utente che non possono asserire ulteriori autorizzazioni CAS, come il codice utente che gira in un'applicazione ASP.NET con livello di attendibilità media. Tuttavia, il codice della piattaforma completamente attendibile (ad esempio, un assembly di terze parti installato nella Global Assembly Cache e accetta chiamate da codice parzialmente attendibile) deve prestare attenzione esplicitamente quando si effettua una chiamata a WCF per conto di un'applicazione parzialmente attendibile per evitare di introdurre vulnerabilità di sicurezza a livello di applicazione.
Il codice con attendibilità completa deve evitare di modificare il set di autorizzazioni CAS del thread corrente (chiamando Assert, PermitOnlyo Deny) prima di chiamare le API WCF per conto di codice parzialmente attendibile. L'asserzione, la negazione o la creazione di un contesto di autorizzazione specifico del thread indipendente dal contesto di sicurezza a livello di applicazione può comportare un comportamento imprevisto. A seconda dell'applicazione, questo comportamento può causare vulnerabilità di sicurezza a livello di applicazione.
Il codice che chiama WCF usando un contesto di autorizzazione specifico del thread deve essere preparato per gestire le situazioni seguenti che possono verificarsi:
Il contesto di sicurezza specifico del thread potrebbe non essere mantenuto per la durata dell'operazione, che comporta potenziali eccezioni di sicurezza.
Il codice WCF interno e i callback forniti dall'utente possono essere eseguiti in un contesto di sicurezza diverso da quello con cui è stata avviata la chiamata originariamente. Questi contesti includono:
Contesto di autorizzazione dell'applicazione.
Qualsiasi contesto di permessi specifico del thread creato in precedenza da altri thread dell'utente utilizzati per effettuare chiamate in WCF durante la durata dell'oggetto attualmente in esecuzione AppDomain.
WCF garantisce che il codice parzialmente attendibile non possa ottenere autorizzazioni di attendibilità totale, a meno che tali autorizzazioni non vengano asserite da un componente completamente attendibile prima di chiamare le API pubbliche di WCF. Tuttavia, non garantisce che gli effetti dell'asserzione dell'attendibilità completa siano isolati in un particolare thread, operazione o azione dell'utente.
Come procedura consigliata, evitare di creare un contesto di autorizzazione specifico del thread chiamando Assert, PermitOnlyo Deny. Invece, concedere o negare il privilegio all'applicazione stessa, in modo che non siano necessari Assert, Deny o PermitOnly.