Compartilhar via


Automático Deserialization no .NET Framework Remoting

Sistemas Remoting que dependem de validação em tempo de execução tipo devem desserializar um fluxo remoto para começar a usá-lo e um cliente não autorizado pode tentar explorar o momento de desserialização. To help protect against this tipo of attack, arquitetura de comunicação remota .NET Framework Provides Two Levels of Automático Low , Full and desserialização. Low , the valor usar como padrão, protects Against Attacks desserialização by deserializing only the types associado with the most Basic Functionality arquitetura de comunicação remota, such as desserialização Automatic of Infrastructure arquitetura de comunicação remota Types, a set Limited of Sistema-implemented Types, and a set Basic of personalizado Types. A desserialização Full oferece suporte ao nível Automático desserialização de todos os tipos que arquitetura de comunicação remota dá suporte em todas as situações.

Aviso

Não presuma que controlar desserialização é a segurança apenas que seu aplicativo requer.In distribuído Applications, Even a High degree of Controlar over serialização not evitar Unauthorized clients from the Communication intercepting and using it in Some way, Even if that is the dados to others showing merely.Portanto, embora a desserialização Low nível fornece alguma proteção contra certos tipos de ataque com base em Automático desserialização, você deve ainda avaliar se para Usar autenticação e criptografia para ajudar a proteger seus dados.Para obter detalhes, consulte segurança.

As listas a seguir descrevem os .NET Framework Remoting desserialização níveis:

  • Low (nível padrão)

    O nível de desserialização padrão no sistema de interação remota .NET Framework oferece suporte a desserialização dos seguintes tipos:

    • Objetos de infra-estrutura do sistema de interação remota. These are the types exigido to make trabalho arquitetura de comunicação remota at a Basic nível.

    • Tipos primitivos e referência e valor tipos que são compostos de tipos primitivos.

    • Tipos de referência e o valor que são marcados com o SerializableAttribute atributo mas não implementam a interface ISerializable https://msdn.microsoft.com/pt-br/library/wf4375ks(v=vs.85).

    • Sistema-provided Types that implementar ISerializable and não Make Other Demands outside of serialização.

    • Personalizar Types that have STRONG Names and Live in an assembly that is not marked with the atributo AllowPartiallyTrustedCallersAttribute.

    • Custom Types that implementar ISerializable and Make no Outro Demands outside of serialização.

    • Tipos que implementam o ILease interface e são não https://msdn.microsoft.com/pt-br/library/w4302s1f(v=vs.85) objetos MarshalByRefObject.

    • ObjRef objetos usados para ativação (para oferecer suporte objetos cliente-ativado); Ou seja, o cliente pode desserializar o retornado ObjRef, mas o servidor não é possível.

  • Full

    The desserialização Full nível in arquitetura de comunicação remota .NET Framework supports all Outro Scenarios, including the desserialização of the seguinte Types Additional:

    Se seu aplicativo requer o uso de recursos do sistema de interação remota que estão disponíveis apenas no nível de desserialização Full, forneça o tipo de autenticação e o nível de criptografia necessário proteger quaisquer recursos que podem estar em risco usando esses recursos avançados em cenários remotos.

Você pode definir o nível de desserialização através de programação ou usando um arquivo de configuração do aplicativo.

Setting the Deserialization Nível Programmatically

Para definir o nível de desserialização programaticamente, passar a propriedade a seguir para o objeto SoapServerFormatterSinkProviderhttps://msdn.microsoft.com/pt-br/library/57k1wyfy(v=vs.85) BinaryServerFormatterSinkProvider na criação ou. Sistema de remoting, em seguida, define o valor no formatador quando ele é inserido na cadeia de coletor. O exemplo a seguir demonstra como definir o nível de desserialização para Full em um domínio do aplicativo host.

// Creating a custom formatter for a TcpChannel sink chain.
BinaryServerFormatterSinkProvider provider = new BinaryServerFormatterSinkProvider();
provider.TypeFilterLevel = TypeFilterLevel.Full;
// Creating the IDictionary to set the port on the channel instance.
IDictionary props = new Hashtable();
props["port"] = 8085;
// Pass the properties for the port setting and the server provider in the server chain argument. (Client remains null here.)
TcpChannel chan = new TcpChannel(props, null, provider);
' Creating a custom formatter for your TcpChannel sink chain.
Dim provider As New BinaryServerFormatterSinkProvider()
provider.TypeFilterLevel = TypeFilterLevel.Full
' Creating the IDictionary to set the port on the channel instance.
Dim props As IDictionary = New Hashtable()
props("port") = 8085
' Pass the properties for the port setting and the server provider in the server chain argument. (Client remains null here.)
Dim chan As New TcpChannel(props, DBNull.Value, provider)

Definindo o nível Deserialization com um arquivo de configuração do aplicativo

Para usar um arquivo de configuração para definir o nível de desserialização, você deve especificar explicitamente o atributo typeFilterLevel do elemento https://msdn.microsoft.com/pt-br/library/ka23a3hs(v=vs.85) < formatador >. Although this is on the Servidor side, You Must Also this to the for any on the Registered to for a callback. O seguinte exemplo explicitamente define a desserialização nível para Low para Ambos o SoapFormatter e BinaryFormatter na domínio do aplicativo.

<configuration>
<system.runtime.remoting>
<application>
<service>
<wellknown 
type="ServiceType, common" 
objectUri="ServiceType.soap" 
mode="Singleton" 
/>
</service>
<channels>
<channel ref="http">
<serverProviders> 
<provider ref="wsdl" />
<formatter ref="soap" typeFilterLevel=Low />
<formatter ref="binary" typeFilterLevel=Low />
</serverProviders>
</channel>
</channels>
</application>
</system.runtime.remoting>
</configuration>

Consulte também

Conceitos

Configuração de aplicativos remoto

Referência

RemotingConfiguration

BinaryServerFormatterSinkProvider.TypeFilterLevel

BinaryFormatter.FilterLevel