Considerazioni sulla sicurezza in XAMLXAML Security Considerations

In questo argomento descrive le procedure consigliate per la sicurezza in applicazioni quando si usa XAML e l'API di servizi XAML di .NET Framework.This topic describes best practices for security in applications when you use XAML and .NET Framework XAML Services API.

XAML non attendibili nelle applicazioniUntrusted XAML in Applications

In senso più generale, XAML non attendibili è qualsiasi origine XAML che l'applicazione è stata non specificamente includono o emit.In the most general sense, untrusted XAML is any XAML source that your application did not specifically include or emit.

XAML che viene compilato o archiviato come un resx-tipo di risorsa all'interno di un assembly attendibile e firmato non è considerato non attendibile.XAML that is compiled into or stored as a resx-type resource within a trusted and signed assembly is not inherently untrusted. È possibile considerare attendibile il XAML in quanto si ritiene attendibile l'assembly nel suo complesso.You can trust the XAML as much as you trust the assembly as a whole. Nella maggior parte dei casi, si teme solo con gli aspetti di attendibilità di XAML separato, che rappresenta l'origine XAML viene caricato da un flusso o altri i/o.In most cases, you are only concerned with the trust aspects of loose XAML, which is a XAML source that you load from a stream or other I/O. XAML Loose non è un componente specifico o una funzionalità di un modello di applicazione con un'infrastruttura di creazione di pacchetti e distribuzione.Loose XAML is not a specific component or feature of an application model with a deployment and packaging infrastructure. Tuttavia, un assembly può implementare un comportamento che prevede il caricamento di XAML loose.However, an assembly might implement a behavior that involves loading loose XAML.

Per XAML non attendibili, devi considerarlo in genere lo stesso come se fossero codice non attendibile.For untrusted XAML, you should treat it generally the same as if it were untrusted code. Usare il sandboxing o altri metafore per impedire l'accesso al codice attendibile di XAML potenzialmente non attendibili.Use sandboxing or other metaphors to prevent possibly untrusted XAML from accessing your trusted code.

La natura delle funzionalità XAML offre il XAML il diritto di costruire oggetti e impostare le relative proprietà.The nature of XAML capabilities gives the XAML the right to construct objects and set their properties. Queste funzionalità includono anche l'accesso a convertitori di tipi, mapping e accesso agli assembly nel dominio dell'applicazione, usando le estensioni di markup, x:Code blocchi e così via.These capabilities also include accessing type converters, mapping and accessing assemblies in the application domain, using markup extensions, x:Code blocks, and so on.

Oltre alle funzionalità a livello di linguaggio, XAML viene utilizzato per la definizione dell'interfaccia utente in molte tecnologie.In addition to its language-level capabilities, XAML is used for UI definition in many technologies. Il caricamento di XAML non attendibili può significare il caricamento di un'interfaccia utente di spoofing dannosa.Loading untrusted XAML might mean loading a malicious spoofing UI.

Condivisione del contesto tra i lettori e writerSharing Context Between Readers and Writers

L'architettura di servizi XAML di .NET Framework per lettori XAML e writer XAML spesso richiede la condivisione di un lettore XAML per un writer XAML, o un contesto dello schema XAML condiviso.The .NET Framework XAML Services architecture for XAML readers and XAML writers often requires sharing a XAML reader to a XAML writer, or a shared XAML schema context. La condivisione di oggetti o contesti potrebbe essere necessaria se si sta scrivendo la logica di ciclo di nodi XAML o fornendo un oggetto personalizzato di percorso di salvataggio.Sharing objects or contexts might be required if you are writing XAML node loop logic, or providing a custom save path. Non si devono condividere le istanze del reader XAML, il contesto dello schema XAML non predefinito o le impostazioni per le classi di reader e writer XAML tra il codice attendibile e non attendibile.You should not share XAML reader instances, nondefault XAML schema context, or settings for XAML reader/writer classes between trusted and untrusted code.

La maggior parte degli scenari e le operazioni che interessano oggetto XAML scrittura per un tipo basato su Common Language Runtime supporta sufficiente utilizzare il contesto dello schema XAML predefinito.Most scenarios and operations involving XAML object writing for a CLR-based type backing can just use default XAML schema context. In modo esplicito il contesto dello schema XAML predefinito non include impostazioni che potrebbero compromettere l'attendibilità totale.The default XAML schema context does not explicitly include settings that could compromise full trust. In questo modo è possibile condividere contesto tra attendibili e componenti di reader e writer XAML.It is thus safe to share context between trusted and untrusted XAML reader/writer components. Tuttavia, se in questo caso, è comunque consigliabile tenere separati questi lettori e writer AppDomain ambiti, con uno di essi in particolare previsto/sandbox per un'attendibilità parziale.However, if you do this, it is still a best practice to keep such readers and writers in separate AppDomain scopes, with one of them specifically intended/sandboxed for partial trust.

Spazi dei nomi XAML e attendibilità degli AssemblyXAML Namespaces and Assembly Trust

La sintassi non qualificata di base e una definizione per il modo in cui XAML interpreta un mapping dello spazio dei nomi XAML personalizzato a un assembly non viene fatta distinzione tra un assembly attendibile e come caricati nel dominio dell'applicazione.The basic unqualified syntax and definition for how XAML interprets a custom XAML namespace mapping to an assembly does not distinguish between a trusted and untrusted assembly as loaded into the application domain. Di conseguenza, è tecnicamente possibile per un assembly non attendibile effettuare lo spoofing il mapping dello spazio dei nomi XAML desiderato dell'assembly attendibili e acquisire informazioni sulle proprietà e oggetto dichiarato di un'origine XAML.Thus, it is technically possible for an untrusted assembly to spoof a trusted assembly's intended XAML namespace mapping and capture a XAML source's declared object and property information. Se si dispone di requisiti di sicurezza per evitare questa situazione, il mapping dello spazio dei nomi XAML previsto deve essere effettuato utilizzando una delle tecniche seguenti:If you have security requirements to avoid this situation, your intended XAML namespace mapping should be made using one of the following techniques:

  • Usare un nome completo dell'assembly con nome sicuro in qualsiasi mapping dello spazio dei nomi XAML effettuate da XAML dell'applicazione.Use a fully qualified assembly name with strong name in any XAML namespace mapping made by your application's XAML.

  • Limitare il mapping a un set fisso di assembly di riferimento, costruendo un oggetto specifico di assembly XamlSchemaContext per il XAML reader e XAML writer di oggetti.Restrict assembly mapping to a fixed set of reference assemblies, by constructing a specific XamlSchemaContext for your XAML readers and XAML object writers. Vedere XamlSchemaContext(IEnumerable<Assembly>).See XamlSchemaContext(IEnumerable<Assembly>).

Mapping dei tipi XAML e l'accesso di sistema di tipoXAML Type Mapping and Type System Access

XAML supporta un proprio sistema di tipi, che in molti modi è un peer a come CLR implementa il sistema di tipi CLR.XAML supports its own type system, which in many ways is a peer to how CLR implements the basic CLR type system. Tuttavia, per alcuni aspetti di consapevolezza di tipo in cui si apportano le decisioni sull'attendibilità relative a un tipo basato su informazioni relative al tipo, è necessario fare riferimento le informazioni sui tipi in CLR i tipi di supporto.However, for certain aspects of type awareness where you are making trust decisions about a type based on its type information, you should defer to the type information in the CLR backing types. Infatti, alcune delle funzionalità di creazione di report specifiche del sistema di tipi XAML vengono lasciate aperte come metodi virtuali e di conseguenza, non sono completamente sotto il controllo delle implementazioni dei servizi XAML di .NET Framework originale.This is because some of the specific reporting capabilities of the XAML type system are left open as virtual methods and are therefore, not fully under the control of the original .NET Framework XAML Services implementations. Questi punti di estendibilità esistono perché il sistema di tipi XAML è estensibile, in base l'estensibilità di XAML stesso e le strategie di mapping dei tipi alternative possibili e l'implementazione predefinita supportata da Common Language Runtime e il contesto dello schema XAML predefinito.These extensibility points exist because the XAML type system is extensible, to match the extensibility of XAML itself and its possible alternative type-mapping strategies versus the default CLR-backed implementation and default XAML schema context. Per altre informazioni, vedere le note specifiche su alcune delle proprietà del XamlType e XamlMember.For more information, see the specific notes on several of the properties of XamlType and XamlMember.

Vedere ancheSee also