Дополнительные вопросы безопасности в формах Windows Forms
Параметры безопасности .NET Framework могут привести к тому, что приложение будет работать по-разному в среде с частичным доверием и на локальном компьютере. .NET Framework ограничивает доступ к таким важным локальным ресурсам, как файловая система, сеть, неуправляемые интерфейсы API и пр. Параметры безопасности влияют на возможность вызова интерфейса Microsoft Win32 API или других интерфейсов API, которые нельзя проверить с помощью системы безопасности. Безопасность также влияет на другие аспекты приложения, включая доступ к файлам и данным, а также печать. Дополнительные сведения о доступе к файлам и данным в среде с частичным доверием см. в разделе Более безопасный доступ к файлам и данным в Windows Forms. Дополнительные сведения о печати в среде с частичным доверием см. в разделе Более безопасная печать в Windows Forms.
В следующих разделах обсуждаются способы работы с буфером обмена, выполнения действий с окнами и вызова интерфейса Win32 API из приложений, работающих в среде с частичным доверием.
Доступ к буферу обмена
Класс UIPermission управляет доступом к в буферу обмена, а связанное значение перечисления UIPermissionClipboard указывает уровень доступа. В следующей таблице представлены возможные уровни разрешений.
Значение UIPermissionClipboard |
Описание |
---|---|
Буфер обмена можно использовать без ограничений. |
|
Буфер обмена можно использовать с некоторыми ограничениями. Помещение данных в буфер обмена (команды копирования и вырезания) не ограничивается. Встроенные элементы управления, которые допускают использование команды вставки, например текстовые поля, могут допускать вставку данных из буфера обмена, однако пользовательские элементы управления не могут программно считывать данные из буфера обмена. |
|
Использовать буфер обмена запрещено. |
По умолчанию зона локальной интрасети получает уровень доступа AllClipboard, а зона Интернета — уровень доступа OwnClipboard. Это означает, что приложение может копировать данные в буфер обмена, но не может программно вставлять или считывать данные из буфера обмена. Такие ограничения не позволяют частично доверенным приложениям считывать содержимое буфера обмена, скопированное туда другими приложениями. Если приложению требуется полный доступ к буферу обмена, но соответствующее разрешение отсутствует, необходимо повысить уровень разрешений для приложения. Дополнительные сведения о повышении уровня разрешений см. в разделе Общее администрирование политики безопасности.
Операции с окнами
Класс UIPermission также управляет разрешениями на выполнение действий с окнами и другими действиями, связанными с интерфейсом пользователя; уровень доступа указывается значением перечисления UIPermissionWindow. В следующей таблице представлены возможные уровни разрешений.
По умолчанию зона локальной интрасети получает уровень доступа AllWindows, а зона Интернета — уровень доступа SafeTopLevelWindows. Таким образом, в зоне Интернета приложение может выполнять большинство операций с окнами и элементами пользовательского интерфейса, однако внешний вид окон будет изменен. Измененное окно отображает при первом запуске всплывающее уведомление, содержит измененный текст в строке заголовка и требует наличия кнопки закрытия в строке заголовка. Всплывающее уведомление и строка заголовка показывают, что приложение запущено в режиме частичного доверия.
Значение UIPermissionWindow |
Описание |
---|---|
Пользователи могут использовать все окна и все события пользовательского ввода без ограничений. |
|
Пользователи могут использовать только безопасные окна верхнего уровня и безопасные подокна для рисования; события пользовательского ввода для пользовательского интерфейса можно использовать только в этих окнах верхнего уровня и подокнах. Такие безопасные окна ясно обозначены и имеют ограничения на минимальный и максимальный размер. Эти ограничения предотвращают потенциально опасные атаки подмены, такие как имитация экрана входа в систему или рабочего стола системы, и не позволяют получать программный доступ к родительским окнам, интерфейсам API, связанным с фокусом, и использовать элемент управления ToolTip, |
|
Пользователи могут использовать только безопасные подокна для рисования и только события пользовательского ввода для пользовательского интерфейса в этих подокнах. Элемент управления, отображаемый в обозревателе, — пример такого безопасного подокна. |
|
Пользователи не могут использовать окна или события пользовательского интерфейса. Использовать пользовательский интерфейс запрещено. |
Каждый уровень разрешений, определенный перечислением UIPermissionWindow, позволяет выполнять меньшее количество действий, чем предыдущий уровень. В следующей таблице указаны действия, которые ограничены значениями SafeTopLevelWindows и SafeSubWindows. Точные разрешения, требуемые для каждого члена, приведены в разделах, относящихся к этому члену в документации по библиотеке классов .NET Framework.
Разрешение SafeTopLevelWindows ограничивает действия, приведенные в следующей таблице.
Компонент |
Действия, на которые наложено ограничение |
---|---|
|
|
|
|
|
|
|
|
|
Значение SafeSubWindows ограничивает действия, приведенные в следующей таблице, в дополнение к ограничениям, наложенным значением SafeTopLevelWindows.
Компонент |
Действия, на которые наложено ограничение |
---|---|
|
|
|
|
|
|
|
Размещение элементов управления сторонних производителей
Другой тип управления окном может использоваться, если в форме размещены элементы управления сторонних производителей. Элементом управления стороннего производителя называется любой пользовательский элемент управления UserControl, который разрабатывался и компилировался не самостоятельно. Хотя сценарием размещения сложно воспользоваться, существует теоретическая возможность расширения независимым элементом управления своей области отрисовки на всю область формы. Этот элемент управления может имитировать критическое диалоговое окно, а затем запросить сведения, такие как имя пользователя/пароль или номера банковских счетов от пользователей.
Чтобы ограничить эту потенциальную угрозу, используйте сторонние элементы управления только от доверенных поставщиков. Если используется элемент управления стороннего производителя, загруженный из непроверенного источника, рекомендуется просмотреть исходный код на предмет потенциальных угроз. После проверки того, что источник не является вредоносным, следует скомпилировать сборку вручную, чтобы убедиться, что источник соответствует сборке.
Вызовы интерфейса Win32 API
Если при разработке приложения требуется вызвать функцию из интерфейса Win32 API, происходит доступ к неуправляемому коду. В этом случае действия программы по отношению к окнам или операционной системе при работе с вызовами Win32 API или с его значениями определить невозможно. Класс SecurityPermission и значение UnmanagedCode перечисления SecurityPermissionFlag управляют доступом к неуправляемому коду. Приложение может получить доступ к неуправляемому коду только при наличие разрешения UnmanagedCode. По умолчанию доступ к неуправляемому коду может получить только локально запущенное приложение.
Некоторые элементы Windows Forms предоставляют неуправляемый доступ, для которого требуется разрешение UnmanagedCode. В следующей таблице перечислены элементы пространства имен System.Windows.Forms, которым требуется это разрешение. Дополнительные сведения о разрешениях, которые требуются для элементов, см. в документации по библиотеке классов .NET Framework.
Компонент |
Элемент |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
Если приложение не имеет разрешения для вызова неуправляемого кода, необходимо запросить разрешение UnmanagedCode или подумать о других способах реализации этих возможностей; в большинстве случаев в Windows Forms предусмотрен альтернативный управляемый код для функций интерфейса Win32 API. Если других возможностей не существует и приложение должно иметь доступ к неуправляемому коду, следует повысить уровень разрешений для приложения.
Разрешение на вызов неуправляемого кода позволяет приложению выполнять практически любые действия. По этой причине разрешения на вызов неуправляемого кода должны выдаваться только тем приложениям, которые получены из доверенных источников. Кроме того, в зависимости от приложения, часть функциональных возможностей приложения, которая вызывает неуправляемый код, может быть необязательной или предназначенной для включения только в среде с полным доверием. Дополнительные сведения о небезопасных разрешениях см. в разделе Опасные разрешения и администрирование политик. Дополнительные сведения о повышении уровня разрешений см. в разделе Общее администрирование политики безопасности.
См. также
Основные понятия
Более безопасный доступ к файлам и данным в Windows Forms
Более безопасная печать в Windows Forms
Общие сведения о безопасности в Windows Forms