Serialização e segurança
Como a serialização pode permitem Outros código ver ou modificar dados de instância do objeto seriam inacessíveis, uma permissão especial é necessária de código executar serialização: SecurityPermission com o ComoSerializationFormatter sinalizar especificado.Política padrão, essa permissão não é dada para download de Internet ou o código de intranet; somente essa permissão é concedido por código no computador local.
Normalmente, todos os campos de uma instância de objeto são serializados, que significa que os dados são representados nos dados serializados da instância.É possível para o código que pode interpretar o formato para determinar quais os valores de dados, independentemente da acessibilidade do membro.Da mesma forma, desserialização extrai os dados da representação serializada e define o estado do objeto diretamente, novamente independentemente de ter regras de acessibilidade.
Qualquer objeto que pode conter dados sensíveis à segurança deve ser feito nonserializable, se possível.Se ele deve ser serializável, tente fazer a campos específicos que contêm dados confidenciais nonserializable.Se isso não pode ser concluído, esteja ciente de que esses dados serão expostos a qualquer código que tenha permissão para serializar e certifique-se de que nenhum código mal-intencionado pode obter essa permissão.
The ISerializable interface é destinado ao uso somente pela infra-estrutura de serialização. No entanto, se desprotegido, ele pode liberar potencialmente informações confidenciais.Se você fornecer serialização personalizada com a implementação de ISerializable, certifique-se de que você tome as seguintes precauções:
The GetObjectData método deve ser explicitamente protegido, exigindo a SecurityPermission with ComoSerializationFormatter permissão especificada ou, certificando-se de que não há informações confidenciais são liberadas com a saída de método.Por exemplo:
Public Overrides<SecurityPermissionAttribute(SecurityAction.Demand, SerializationFormatter := True)> _ Sub GetObjectData(info As SerializationInfo, context As StreamingContext) End Sub
[SecurityPermissionAttribute(SecurityAction.Demand,SerializationFormatter =true)] public override void GetObjectData(SerializationInfo info, StreamingContext context) { }
O construtor especial usado para serialização também deve executar a validação de entrada completa e deve ser protegida ou particular para ajudar a proteger contra uso indevido por código mal-intencionado.Ele deve aplicar a mesma verificações de segurança e permissões necessárias para obter uma instância de uma classe de tal por outros meios, sistema autônomo, por exemplo, criar a classe explicitamente ou indiretamente criá-la por meio de algum tipo de fábrica.