Вопросы безопасности при использовании метаданных
При использовании функций метаданных в Windows Communication Foundation (WCF) рассмотрите последствия для безопасности публикации, извлечения и использования метаданных службы.
В каких случаях следует публиковать метаданные
Службы WCF по умолчанию не публикуют метаданные. Чтобы опубликовать метаданные для службы WCF, необходимо явно включить публикацию метаданных, добавив конечные точки метаданных в службу (см. раздел "Публикация метаданных"). Если публикацию метаданных оставить отключенной, это уменьшит возможности для атаки на службу и снизит риск непреднамеренного раскрытия информации. Не все службы должны публиковать метаданные. Если публиковать метаданные не требуется, подумайте о том, чтобы отключить их. Обратите внимание, что вы по-прежнему можете создавать метаданные и клиентский код непосредственно из сборок служб с помощью средства служебной программы метаданных ServiceModel (Svcutil.exe). Дополнительные сведения об использовании Svcutil.exe для экспорта метаданных см. в статье "Практическое руководство. Использование Svcutil.exe для экспорта метаданных из скомпилированного кода службы".
Публикация метаданных с помощью безопасной привязки
Привязки метаданных по умолчанию, которые предоставляет WCF, не защищены и разрешают анонимный доступ к метаданным. Метаданные службы, публикуемые службой WCF, содержат подробное описание службы и могут намеренно или непреднамеренно содержать конфиденциальную информацию. Например, метаданные службы могут содержать сведения об операциях инфраструктуры, которые не должны распространяться публично. Чтобы защитить метаданные службы от несанкционированного доступа, можно воспользоваться безопасной привязкой конечной точки метаданных. Конечные точки метаданных отвечают на HTTP-запросы GET, которые могут использовать для защиты метаданных протокол SSL. Дополнительные сведения см. в разделе "Практическое руководство. Защита конечных точек метаданных".
Кроме того, защита конечных точек метаданных позволяет запрашивающей стороне безопасным образом получать метаданные службы, не опасаясь, что они будут искажены или подделаны.
Использование только надежных метаданных
С помощью метаданных службы можно автоматически создавать компоненты среды выполнения, необходимые для вызова службы. Вы также можете использовать метаданные во время разработки для разработки клиентского приложения или во время выполнения для динамического обновления привязки, используемой клиентом для вызова службы.
При получении метаданных без соответствующей защиты они могут быть искажены или подделаны. Искаженные метаданные могут перенаправить клиент на вредоносную службу, они могут содержать неверные параметры безопасности или опасные структуры XML. Документы с метаданным могут быть большими, и их часто сохраняют в файловой системе. Чтобы защититься от искажения или подделки метаданных, следует использовать для запроса метаданных службы безопасную привязку, если она доступна.
Использование безопасных методов обработки метаданных
Метаданные службы часто запрашиваются у службы по сети с использованием стандартных протоколов, например WS-MetadataExchange (MEX). Многие форматы метаданных включают механизмы, позволяющие ссылаться на дополнительные метаданные. Тип MetadataExchangeClient автоматически обрабатывает ссылки в документах WSDL, схемах XML и документах MEX. Размер объекта MetadataSet, созданного на базе полученных метаданных, прямо пропорционален значению MaximumResolvedReferences используемого экземпляра MetadataExchangeClient и значению MaxReceivedMessageSize
привязки, используемой данным экземпляром MetadataExchangeClient. Устанавливайте эти квоты в соответствии с потребностями конкретной задачи.
В WCF метаданные службы обрабатываются как XML. При обработке документов XML приложения должны защищать себя от опасных структур XML. XmlDictionaryReader Используйте соответствующие квоты при обработке XML, а также задайте DtdProcessing для Prohibitсвойства значение .
Система метаданных в WCF расширяема, а расширения метаданных можно зарегистрировать в файле конфигурации приложения (см. расширение системы метаданных). Расширения метаданных могут выполнять произвольный код, поэтому файлы конфигурации приложений необходимо защищать с помощью соответствующих списков управления доступом и регистрировать только надежные реализации расширений метаданных.
Проверка созданных клиентов
При создании клиентского кода из метаданных, полученных из ненадежного источника, проверьте созданный код клиента на соответствие принятым политикам безопасности клиентских приложений. Можно воспользоваться поведением проверки, чтобы проконтролировать параметры клиентской привязки, или визуально проверить код, созданный автоматически. Пример реализации клиента, проверяющего поведение, см. в разделе "Проверка клиента".
Защита файлов конфигурации приложений
Файл конфигурации приложения службы может определять, каким образом будут публиковаться метаданные и будут ли они публиковаться в принципе. Рекомендуется защищать файлы конфигурации приложений с помощью списков управления доступом, чтобы злоумышленники не могли изменить параметры в этих файлах.