Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este artigo descreve as práticas recomendadas ao executar o WCF (Windows Communication Foundation) em um ambiente de confiança parcial.
Serialização
Aplique essas práticas ao usar o DataContractSerializer em um aplicativo com confiança parcial.
Todos os tipos serializáveis devem ser explicitamente marcados com o [DataContract] atributo. As técnicas a seguir não têm suporte em um ambiente de confiança parcial:
- Marcação de classes a serem serializadas com SerializableAttribute.
- Implementando a ISerializable interface para permitir que uma classe controle seu processo de serialização.
Usando o DataContractSerializer
Todos os tipos marcados com o
[DataContract]atributo devem ser públicos. Tipos não públicos não podem ser serializados em um ambiente de confiança parcial.Todos os membros de
[DataContract]em um tipo[DataContract]serializável devem ser públicos. Um tipo com[DataMember]não público não pode ser serializado em um ambiente de confiança parcial.Os métodos que lidam com eventos de serialização (como
OnSerializing,OnSerialized,OnDeserializingeOnDeserialized) devem ser declarados como públicos. No entanto, há suporte para ambas as implementações explícitas e implícitas de OnDeserialization(Object).Os tipos
[DataContract]implementados em assemblies marcados com AllowPartiallyTrustedCallersAttribute não devem executar ações relacionadas à segurança no construtor de tipo, pois DataContractSerializer não chama o construtor do objeto recém-instanciado durante a desserialização. Especificamente, as seguintes técnicas comuns de segurança devem ser evitadas nos tipos[DataContract]:Tentativa de restringir o acesso de confiança parcial, tornando o construtor do tipo interno ou privado.
Restringindo o acesso ao tipo adicionando um
[LinkDemand]ao construtor do tipo.Supondo que, como o objeto foi instanciado com êxito, todas as verificações de validação impostas pelo construtor foram aprovadas com êxito.
Usando IXmlSerializable
As práticas recomendadas a seguir se aplicam aos tipos que implementam IXmlSerializable e são serializados usando o DataContractSerializer:
As GetSchema implementações do método estático devem ser
public.Os métodos de instância que implementam a IXmlSerializable interface devem ser
public.
Usando o WCF do código de plataforma totalmente confiável que permite chamadas de chamadores parcialmente confiáveis
O modelo de segurança de confiança parcial do WCF pressupõe que qualquer invocador de um método ou propriedade pública do WCF esteja executando no contexto de Segurança de Acesso de Código (CAS) do aplicativo de hospedagem. O WCF também pressupõe que exista apenas um contexto de segurança de aplicativo para cada AppDomainum e que esse contexto seja estabelecido no AppDomain momento da criação por um host confiável (por exemplo, por uma chamada para CreateDomain ou pelo Gerenciador de Aplicativos ASP.NET).
Observação
O CAS (Code Access Security) foi preterido em todas as versões do .NET Framework e do .NET. As versões recentes do .NET não honram as anotações CAS e geram erros se as APIs relacionadas ao CAS forem usadas. Os desenvolvedores devem buscar meios alternativos para realizar tarefas de segurança.
Esse modelo de segurança se aplica a aplicativos escritos pelo usuário que não podem afirmar permissões adicionais de CAS, como código de usuário em execução em um aplicativo do ASP.NET de confiança média. No entanto, o código de plataforma totalmente confiável (por exemplo, um assembly de terceiros instalado no cache de assembly global e que aceita chamadas de código parcialmente confiável) deve ter cuidado explícito ao chamar o WCF em nome de um aplicativo parcialmente confiável para evitar a introdução de vulnerabilidades de segurança no aplicativo.
O código de confiança total deve evitar alterar o conjunto de permissões CAS do thread atual (chamando Assert, PermitOnlyou Deny) antes de chamar APIs do WCF em nome de código parcialmente confiável. Afirmar, negar ou criar um contexto de permissão específico do thread que seja independente do contexto de segurança no nível do aplicativo pode resultar em um comportamento inesperado. Dependendo do aplicativo, esse comportamento pode resultar em vulnerabilidades de segurança no nível do aplicativo.
O código que chama o WCF usando um contexto de permissão específico do thread deve estar preparado para lidar com as seguintes situações que podem surgir:
O contexto de segurança específico do thread pode não ser mantido durante a operação, o que resulta em possíveis exceções de segurança.
O código WCF interno e quaisquer retornos de chamada fornecidos pelo usuário podem ser executados em um contexto de segurança diferente daquele sob o qual a chamada foi originalmente iniciada. Esses contextos incluem:
O contexto de permissão do aplicativo.
Qualquer contexto de permissão específico do thread criado anteriormente por outros threads de usuário usados para chamar o WCF durante o tempo de vida do AppDomain atualmente em execução.
O WCF garante que o código parcialmente confiável não pode obter permissões de confiança total, a menos que essas permissões sejam declaradas por um componente totalmente confiável antes de chamar APIs públicas do WCF. No entanto, isso não garante que os efeitos da declaração de confiança total sejam isolados em um thread específico, operação ou ação do usuário.
Como prática recomendada, evite criar contexto de permissão específico do thread chamando Assert, PermitOnlyou Deny. Em vez disso, conceda ou negue o privilégio ao próprio aplicativo, de modo que nenhum Assert, Deny, ou PermitOnly seja necessário.