Защита приложений ClickOnce

Приложения ClickOnce подвержены ограничениям безопасности доступа к коду в платформа .NET Framework, чтобы ограничить доступ к защищенным ресурсам и операциям. Поэтому важно понимать последствия безопасности доступа к коду для записи приложений ClickOnce соответствующим образом. Для ограничения доступа приложение может использовать зоны с полным или частичным доверием, такие как Интернет и интрасеть.

Кроме того, ClickOnce использует сертификаты для проверки подлинности издателя приложения, подписи приложения и манифестов развертывания, чтобы удостовериться в том, что файлы не были изменены злоумышленником. Подписывание — это необязательный шаг, который упрощает изменение файлов приложения после создания манифестов. Без подписанных манифестов, однако, трудно гарантировать, что установщик приложения не был изменен злоумышленником (атака "злоумышленник в середине"). По этой причине рекомендуется подписывать манифесты приложений и развертываний для защиты приложений.

Зоны

Приложения, развернутые с помощью технологии ClickOnce, ограничены набором разрешений и действий, определенных зоной безопасности. Зоны безопасности определены в Internet Explorer и берут за основу местоположение приложения. Разрешения по умолчанию, основанные на местоположении развертывания, перечисляются в следующей таблице:

Расположение развертывания Зона безопасности
Запуск из Интернета Зона Интернета
Установка из Интернета Зона Интернета
Установка из общего сетевого файлового ресурса Зона локальной интрасети
Установка с компакт-диска Full Trust

Разрешения по умолчанию основываются на местоположении, из которого была развернута исходная версия приложения. Обновления приложения наследуют эти разрешения. Если приложение настроено на проверку обновлений из Интернета или сетевого местоположения, и доступна более новая версия, исходная установка может получить разрешения для зоны Интернета или интрасети вместо разрешений полного доверия. Чтобы запретить вывод запросов, администратор системы может задать политику развертывания ClickOnce, которая определит конкретного издателя приложения в качестве доверенного источника. Для компьютеров, на которых развернута эта политика, разрешения предоставляются автоматически, и пользователям не выводятся запросы. Для получения дополнительной информации см. Trusted Application Deployment Overview. Чтобы настроить развертывание доверенного приложения, сертификат можно установить для уровня компьютера или предприятия. Дополнительные сведения см. в разделе How to: Add a Trusted Publisher to a Client Computer for ClickOnce Applications.

Примечание.

В ClickOnce для .NET Core и .NET 5 или более поздней версии эта функция не поддерживается. Дополнительные сведения см. в разделе ClickOnce для .NET.

Политики управления доступом для кода

Разрешения для приложения определяются параметрами в элементе <trustInfo> Element манифеста приложения. Visual Studio автоматически создает эти сведения на основе параметров на странице свойств безопасности проекта. Приложение ClickOnce предоставляется только определенным разрешениям, которые он запрашивает. Например, если там, где для доступа к файлу требуются разрешения полного доверия, приложение запрашивает разрешение на доступ к файлу, ему будет предоставлено только разрешение на доступ к файлу, а не разрешения полного доверия. При разработке приложения ClickOnce необходимо убедиться, что запрашивают только определенные разрешения, необходимые приложению. В большинстве случаев для ограничения приложения частичным доверием можно использовать зоны Интернета или локальной интрасети. Дополнительные сведения см. в разделе Практическое руководство. Установка зоны безопасности для приложения ClickOnce. Если приложению требуются пользовательские разрешения, можно создать пользовательскую зону. Дополнительные сведения см. в разделе Практическое руководство. Установка пользовательских разрешений для приложения ClickOnce.

Примечание.

В ClickOnce для .NET Core и .NET 5 или более поздней версии эта функция не поддерживается. Дополнительные сведения см. в разделе ClickOnce для .NET.

При включении разрешения, не являющегося частью разрешения, устанавливаемого по умолчанию для зоны, из которой было развернуто приложение, пользователю будет предложено предоставить разрешение во время установки или обновления. Чтобы запретить вывод запросов, администратор системы может задать политику развертывания ClickOnce, которая определит конкретного издателя приложения в качестве доверенного источника. На компьютерах, на которых развернута эта политика, разрешения предоставляются автоматически, и для пользователя не выводятся запросы.

Ответственность за работу приложения с надлежащими разрешениями лежит на разработчике. Если приложение во время исполнения запрашивает разрешения за пределами зоны, может возникнуть исключение безопасности. Visual Studio позволяет отлаживать приложение в целевой зоне безопасности и предоставляет помощь в разработке безопасных приложений. Дополнительные сведения см. в разделе "Отладка приложений ClickOnce", использующих System.Deployment.Application.

Дополнительные сведения об управлении доступом для кода и ClickOnce см. в статье Управление доступом для кода для приложений ClickOnce.

Сертификаты подписи кода

Чтобы опубликовать приложение с помощью развертывания ClickOnce, вы можете подписать манифесты приложения и развертывания для приложения с помощью пары открытого и закрытого ключа. Средства для подписи манифеста доступны на странице Подпись в конструкторе проектов. Дополнительные сведения см. в разделе Signing Page, Project Designer.

После подписи манифестов сведения об издателе, основанные на подписи Authenticode, показываются пользователю в диалоговом окне разрешений во время установки, чтобы пользователь мог убедиться, что приложение получено из надежного источника.

Дополнительные сведения о ClickOnce и сертификатах см. в статье ClickOnce and Authenticode.

Проверка подлинности, основанная на форме ASP.NET

Если вы хотите контролировать, к каким развертываниям может получить доступ каждый пользователь, не следует включать анонимный доступ к приложениям ClickOnce, развернутым на веб-сервере. Предпочтительнее разрешить доступ пользователей к установленным развертываниям на основе удостоверения пользователя, используя проверку подлинности Windows.

ClickOnce не поддерживает проверку подлинности на основе форм ASP.NET, так как использует постоянные файлы cookie; они представляют угрозу безопасности, так как они находятся в кэше Обозреватель Интернета и могут быть взломаны. Поэтому при развертывании приложений ClickOnce любой сценарий проверки подлинности, кроме проверка подлинности Windows, не поддерживается.

Передача аргументов

Если необходимо передать аргументы в приложение ClickOnce, обратитесь к дополнительным соображениям безопасности. ClickOnce позволяет разработчикам предоставлять строку запроса приложениям, развернутыми в Интернете. Строка запроса принимает вид последовательности пар "имя-значение" в конце URL-адреса, используемого для запуска приложения:

http://servername.adatum.com/WindowsApp1.application?username=joeuser

По умолчанию аргументы строки запроса отключены. Чтобы включить их, для приложения должен быть установлен атрибут trustUrlParameters в манифесте развертывания. Это значение можно задать из Visual Studio и из MageUI.exe. Подробные инструкции по включению передачи строк запросов см. в разделе Практическое руководство. Извлечение сведений строки запроса в интернет-приложении ClickOnce.

Никогда не следует передавать аргументы, извлекаемые с помощью строки запроса, в базу данных или командную строку без проверки аргументов с целью убедиться, что они безопасны. Ненадежные аргументы — это аргументы, которые содержат escape-символы базы данных или командной строки, позволяющие злоумышленникам управлять приложением для выполнения произвольных команд.

Примечание.

Аргументы строки запроса — единственный способ передать аргументы приложению ClickOnce при запуске. Невозможно передать аргументы в приложение ClickOnce из командной строки.

Развертывание замаскированных сборок

Visual Studio включает в себя бесплатную программу PreEmptive Protection — Dotfuscator Community, которую можно использовать для защиты приложений ClickOnce с помощью обфускации кода и активных мер по защите. Дополнительные сведения см. в разделе по ClickOnce руководства пользователя Dotfuscator Community.