Compartir a través de


Procedimientos recomendados de confianza parcial

En este tema se describen procedimientos recomendados al ejecutar Windows Communication Foundation (WCF) en un entorno de confianza parcial.

Serialización

Aplique los siguientes procedimientos al utilizar DataContractSerializer en una aplicación de confianza parcial.

  • Se ha de marcar a todos los tipos serializables mediante el atributo [DataContract]. Las siguientes técnicas no se admiten en un entorno de confianza parcial:

  • Marcado de clases que se van a serializar con el SerializableAttribute.

  • Implementación de la interfaz ISerializable para permitir que una clase controle su proceso de serialización.

Uso de DataContractSerializer

  • Todos los tipos marcados con el atributo [DataContract] deben ser públicos. Los tipos no públicos no se pueden serializar en un entorno de confianza parcial.

  • Todos los miembros de [DataContract] de un tipo de [DataContract] serializable deben ser públicos. Un tipo con un [DataMember] no público no se puede serializar en un entorno de confianza parcial.

  • Los métodos que administran eventos de serialización (como OnSerializing, OnSerialized, OnDeserializingy OnDeserialized) se deben declarar como públicos. Sin embargo, se admiten las implementaciones explícitas e implícitas de OnDeserialization.

  • Los tipos [DataContract] implementados en ensamblados marcados con el AllowPartiallyTrustedCallersAttribute no deben realizar acciones relacionadas con la seguridad en el constructor de tipos, puesto que el DataContractSerializer no llama durante la deserialización al constructor del objeto del que se ha creado recientemente una instancia. Particularmente, se han de evitar las siguientes técnicas de seguridad comunes en los tipos de [DataContract]:

  • Intentar restringir el acceso de confianza parcial haciendo interno o privado el constructor del tipo.

  • Restringir el acceso al tipo agregando una [LinkDemand] al constructor del tipo.

  • Suponer que, como se ha creado una instancia del objeto correctamente, todas las comprobaciones de validación requeridas por el constructor se han superado con éxito.

Utilizar IXmlSerializable

Los siguientes procedimientos recomendados se aplican a tipos que implementan IXmlSerializable y se serializan mediante DataContractSerializer.

  • Las implementaciones del método estático GetSchema deben ser public.

  • Los métodos de instancia que implementan la interfaz IXmlSerializable deben ser public.

Utilizar WCF a partir de código de la plataforma de plena confianza que permite llamadas desde llamadores de confianza parcial

El modelo de seguridad de confianza parcial de WCF supone que cualquier llamador de una propiedad o de un método público de WCF se está ejecutando en el contexto de seguridad de acceso del código (CAS) de la aplicación de hospedaje. WCF también supone que solo existe un contexto de seguridad de aplicación para cada AppDomain, y que este contexto es establecido en el momento de la creación de AppDomain por parte de un host confiable (por ejemplo, por una llamada a CreateDomain o por el Administrador de aplicaciones de ASP.NET).

Este modelo de seguridad se aplica a las aplicaciones escritas por usuarios que no pueden validar permisos CAS adicionales, como, por ejemplo, el código de usuario que se ejecuta en una aplicación ASP.NET de nivel de confianza medio. Sin embargo, el código de plataforma de plena confianza (por ejemplo, un ensamblado de otro fabricante que se instala en la caché global de ensamblados y acepta llamadas de código de confianza parcial) debe tener un cuidado explícito al realizar llamadas en WCF en nombre de una aplicación de confianza parcial, para evitar introducir vulnerabilidades de seguridad en el nivel de aplicación.

El código de plena confianza debería evitar modificar el conjunto de permisos CAS del subproceso actual (llamando al método Assert, PermitOnlyo Deny) antes de llamar a la API de WCF en nombre de código de confianza parcial. Validar, denegar o crear un contexto de permiso para subprocesos que sea independiente del contexto de seguridad de aplicaciones puede provocar un comportamiento inesperado. En función de la aplicación, este comportamiento puede producir vulnerabilidades de seguridad en aplicaciones.

El código que llama en WCF utilizando un contexto de permiso para subprocesos debe estar preparado para afrontar las siguientes situaciones que se podrían presentar:

  • El contexto de seguridad específico para subprocesos no se puede mantener durante toda la operación, lo que produce excepciones de seguridad potenciales.

  • El código de WCF interno, así como cualquier devolución de llamada proporcionada por el usuario puede ejecutarse en un contexto de seguridad diferente que aquel bajo el que se inició la llamada originariamente. Entre estos contextos se incluyen:

    • El contexto del permiso de aplicación.

    • Cualquier contexto de permiso para subprocesos creado previamente por otros subprocesos de usuarios utilizados para llamar en WCF durante la duración del AppDomain que se está ejecutando actualmente.

WCF garantiza que el código de confianza parcial no puede obtener permisos de plena confianza a menos que un componente de plena confianza valide tales permisos antes de llamar en las API públicas de WCF. Sin embargo, no garantiza que los efectos de validar la plena confianza se aíslen a un determinado subproceso, operación o acción del usuario.

A modo de procedimiento recomendado, evite crear un contexto de permiso para subprocesos llamando al método Assert, PermitOnly o Deny. En su lugar, conceda o deniegue el privilegio a la propia aplicación, para que no se requiera Assert, Deny o PermitOnly.

Vea también

Referencia

DataContractSerializer
IXmlSerializable