Considerações de segurança com metadados
Ao usar os recursos de metadados no Windows Communication Foundation (WCF), considere as implicações de segurança da publicação, recuperação e uso de metadados de serviço.
Quando publicar metadados
Os serviços WCF não publicam metadados por padrão. Para publicar metadados para um serviço WCF, você deve habilitar explicitamente a publicação de metadados adicionando pontos de extremidade de metadados ao seu serviço (consulte Publicando metadados). Deixar a publicação de metadados desativada reduz a superfície de ataque ao seu serviço e reduz o risco de divulgação não intencional de informações. Nem todos os serviços devem publicar metadados. Se não for necessário publicar metadados, considere deixá-los desativados. Observe que você ainda pode gerar metadados e código de cliente diretamente de seus assemblies de serviço usando a ServiceModel Metadata Utility Tool (Svcutil.exe). Para obter mais informações sobre como usar Svcutil.exe para exportar metadados, consulte Como usar Svcutil.exe para exportar metadados do código de serviço compilado.
Publicação de metadados usando uma vinculação segura
As associações de metadados padrão que o WCF fornece não são seguras e permitem acesso anônimo aos metadados. Os metadados de serviço que um serviço WCF publica contêm uma descrição detalhada sobre o serviço e podem, intencionalmente ou não, conter informações confidenciais. Por exemplo, os metadados do serviço podem conter informações sobre operações de infraestrutura que não se destinavam a ser difundidas publicamente. Para proteger os metadados do serviço contra acesso não autorizado, você pode usar uma associação segura para seu ponto de extremidade de metadados. Os pontos de extremidade de metadados respondem a solicitações HTTP/GET que podem usar SSL (Secure Sockets Layer) para proteger os metadados. Para obter mais informações, consulte Como proteger pontos de extremidade de metadados.
Proteger seus pontos de extremidade de metadados também fornece uma maneira para os solicitantes recuperarem metadados de serviço com segurança sem o risco de adulteração ou falsificação.
Usando apenas metadados confiáveis
Você pode usar metadados de serviço para construir automaticamente os componentes de tempo de execução necessários para chamar o serviço. Você também pode usar metadados em tempo de design para desenvolver um aplicativo cliente ou em tempo de execução para atualizar dinamicamente a associação que um cliente usa para chamar um serviço.
Os metadados do serviço podem ser adulterados ou falsificados quando recuperados de forma insegura. Os metadados adulterados podem redirecionar seu cliente para um serviço mal-intencionado, conter configurações de segurança comprometidas ou conter estruturas XML mal-intencionadas. Os documentos de metadados podem ser grandes e são frequentemente salvos no sistema de arquivos. Para proteger contra adulteração e falsificação, use uma associação segura para solicitar metadados de serviço quando houver um disponível.
Usando técnicas seguras para processamento de metadados
Os metadados de serviço são frequentemente recuperados de um serviço através de uma rede usando protocolos padronizados, como WS-MetadataExchange (MEX). Muitos formatos de metadados incluem mecanismos de referência para apontar para metadados adicionais. O MetadataExchangeClient tipo processa automaticamente referências para você em documentos WSDL (Web Services Description Language), esquema XML e documentos MEX. O tamanho do objeto criado a partir dos metadados recuperados é diretamente proporcional ao valor da MetadataSet instância que é usada e ao MaxReceivedMessageSize
valor da associação que está sendo usada por essa MetadataExchangeClientMetadataExchangeClient instância.MaximumResolvedReferences Defina essas cotas para valores apropriados, conforme ditado pelo seu cenário.
No WCF, os metadados de serviço são processados como XML. Ao processar documentos XML, os aplicativos devem se proteger contra estruturas XML mal-intencionadas. Use o XmlDictionaryReader com cotas apropriadas ao processar XML e também defina a DtdProcessing propriedade como Prohibit.
O sistema de metadados no WCF é extensível e as extensões de metadados podem ser registradas no arquivo de configuração do aplicativo (consulte Estendendo o sistema de metadados). As extensões de metadados podem executar código arbitrário, portanto, você deve proteger o arquivo de configuração do aplicativo com listas de controle de acesso (ACLs) apropriadas e registrar apenas implementações de extensão de metadados confiáveis.
Validando clientes gerados
Ao gerar código de cliente a partir de metadados recuperados de uma fonte não confiável, valide o código de cliente gerado para garantir que o cliente gerado esteja em conformidade com as políticas de segurança de seus aplicativos cliente. Você pode usar um comportamento de validação para verificar as configurações na vinculação do cliente ou inspecionar visualmente o código gerado pelas ferramentas. Para obter um exemplo de como implementar um cliente que valida comportamentos, consulte Validação de cliente.
Protegendo arquivos de configuração do aplicativo
O arquivo de configuração do aplicativo de um serviço pode controlar como e se os metadados são publicados. É uma boa ideia proteger o arquivo de configuração do aplicativo com listas de controle de acesso (ACLs) apropriadas para garantir que um invasor não possa modificar essas configurações.