Дополнительные вопросы безопасности в Windows Forms
Параметры безопасности .NET Framework могут привести к тому, что ваше приложение будет работать по-другому в среде с частичным доверием на локальном компьютере. В этом случае .NET Framework ограничивает доступ, помимо прочего, к таким важным локальным ресурсам, как файловая система, сеть и неуправляемые API. Параметры безопасности влияют на возможность вызова Microsoft Windows API или других API, которые не могут быть проверены системой безопасности. Безопасность также влияет на другие аспекты приложения, включая доступ к файлам и данным, и вывод на печать. Дополнительные сведения о доступе к файлам и данным в среде с частичным доверием см. в разделе Более безопасный доступ к файлам и данным в Windows Forms. Дополнительные сведения о выводе на печать в среде с частичным доверием см. в разделе Более безопасная печать в Windows Forms.
В следующих разделах рассматриваются способы работы с буфером обмена, окнами и вызов Windows API из приложений, работающих в среде с частичным доверием.
Доступ к буферу обмена
Класс UIPermission управляет доступом к буферу обмена; значение перечисления UIPermissionClipboard определяет уровень доступа к нему. В следующей таблице приведены возможные уровни доступа.
Значение UIPermissionClipboard | Описание |
---|---|
AllClipboard | Буфер обмена можно использовать без ограничений. |
OwnClipboard | Буфер обмена можно использовать с некоторыми ограничениями. Возможность размещения данных в буфере обмена (операции с командами копирования и вырезания) не ограничены. Встроенные элементы управления, которые принимают операцию вставки, например текстовое поле, могут принимать данные из буфера обмена, но пользовательские элементы управления не могут программно считывать данные из буфера обмена. |
NoClipboard | Буфер обмена использовать нельзя. |
По умолчанию в зону локальной интрасети получает AllClipboard доступа и зона Интернета получает OwnClipboard доступа. Это означает, что приложение может копировать данные в буфер обмена, но не может программно вставлять или считывать данные из буфера обмена. Благодаря таким ограничениям программы, не имеющие полного доверия, не могут считывать содержимое из буфера обмена, скопированное другим приложением. Если приложению требуется полный доступ к буферу обмена, но у вас нет соответствующих разрешений, для приложения необходимо повысить уровень разрешений. Дополнительные сведения о повышении уровня разрешений см. в разделе Общее администрирование политик безопасности.
Управление окнами
UIPermission Класс также управляет разрешениями для выполнения работы с окнами и других действий, связанных с пользовательского интерфейса, а также UIPermissionWindow значение перечисления указывает уровень доступа. В следующей таблице приведены возможные уровни разрешения.
По умолчанию в зону локальной интрасети получает AllWindows доступа и зона Интернета получает SafeTopLevelWindows доступа. Это означает, что в зоне Интернета приложение может выполнять большинство операций с окнами и пользовательским интерфейсом, но внешний вид окна будет изменяться. В измененном окне при первом запуске отображается всплывающее уведомление. В таком окне также изменен заголовок, а в строке заголовка должна быть кнопка "Закрыть". Всплывающее уведомление и строка заголовка информируют пользователя приложения о том, что данное приложение выполняется в режиме частичного доверия.
Значение UIPermissionWindow | Описание |
---|---|
AllWindows | Пользователи могут использовать все окна и события пользовательского ввода без каких-либо ограничений. |
SafeTopLevelWindows | Пользователи могут использовать для рисования только более безопасные окна верхнего уровня и дочерние окна, а также события пользовательского ввода для пользовательского интерфейса в таких окнах и дочерних окнах. Такие более безопасные окна имеют специальные метки, а также ограничения на минимальный и максимальный размер. Эти ограничения предотвращают потенциально опасные атаки с подменой, такие как имитация экрана входа в систему или рабочего стола системы и ограничивают программный доступ к родительским windows API, связанные с фокусом и использование ToolTip элемента управления, |
SafeSubWindows | Пользователи могут использовать для рисования только более безопасные дочерние окна, а также события пользовательского ввода для пользовательского интерфейса в таких дочерних окнах. Примером такого более безопасного дочернего окна является элемент управления, отображаемый в браузере. |
NoWindows | Пользователи не могут использовать никакие окна и события пользовательского интерфейса. Пользовательский интерфейс использовать нельзя. |
Каждый уровень разрешений, определенный UIPermissionWindow перечисление позволяет выполнять меньшее количество действий, чем на уровень выше. В следующих таблицах указаны действия, которые ограничены SafeTopLevelWindows и SafeSubWindows значения. Точные разрешения, необходимые для каждого члена, представлены в справочном разделе для этого члена в документации по библиотеке классов .NET Framework.
SafeTopLevelWindows разрешение ограничивает действия, приведенные в следующей таблице.
Компонент | Ограниченные действия |
---|---|
Application | — Задание значения для свойства SafeTopLevelCaptionFormat. |
Control | — Получение Parent свойство. — Задание значения для свойства Region .— Вызов FindForm , Focus, FromChildHandle и FromHandle, PreProcessMessage, ReflectMessage, или SetTopLevel метод. — Вызов GetChildAtPoint метод, если возвращенный элемент управления не является дочерним элементом вызывающего элемента управления. — Изменение фокуса элемента управления в контейнерном элементе управления. |
Cursor | — Задание значения для свойства Clip. — Вызов Hide метод. |
DataGrid | — Вызов ProcessTabKey метод. |
Form | — Получение ActiveForm или MdiParent свойство. — Задание ControlBox, ShowInTaskbar, или TopMost свойство. — Задание Opacity свойство ниже 50%. — Задание WindowState свойства Minimized программным способом. — Вызов Activate метод. — Использование None, FixedToolWindow, и SizableToolWindowFormBorderStyle значений перечисления. |
NotifyIcon | — Использование NotifyIcon компонент полностью запрещено. |
SafeSubWindows Ограничивает действия, перечисленные в следующей таблице, кроме ограничений, налагаемых по SafeTopLevelWindows значение.
Компонент | Ограниченные действия |
---|---|
CommonDialog | -Отображение диалогового окна производным от CommonDialog класса. |
Control | — Вызов CreateGraphics метод. — Задание значения для свойства Cursor. |
Cursor | — Задание значения для свойства Current. |
MessageBox | — Вызов Show метод. |
Размещение элементов управления сторонних производителей
Если ваши формы размещают элементы управления сторонних производителей, могут возникать другие операции управления окнами. Элемент управления стороннего производителя — любой пользовательский UserControl, который не разработан и скомпилирован самостоятельно. Несмотря на то, что вариантом размещения воспользоваться довольно сложно, теоретически элемент управления стороннего производителя может расширить свою поверхность отрисовки и полностью занять область вашей формы. Затем такой элемент управления может сымитировать важное диалоговое окно и запросить у ваших пользователей такие сведения, как сочетание имени пользователя и пароля или номера банковских счетов.
Чтобы ограничить такой потенциальный риск, используйте элементы управления только доверенных сторонних производителей. Если вы используете элементы управления стороннего производителя, загруженные из непроверяемого источника, рекомендуем просмотреть исходный код на предмет наличия потенциальной уязвимости. Убедившись, что источник не является вредоносным, скомпилируйте сборку самостоятельно и проверьте, соответствует ли исходный код сборке.
Вызовы API Windows
Когда при разработке приложения требуется вызов функции из интерфейса Windows API, вы обращаетесь к неуправляемому коду. В этом случае действия кода с окном или операционной системой невозможно контроллировать. Класс SecurityPermission и значение UnmanagedCode перечисления SecurityPermissionFlag управляют доступом к неуправляемому коду. Приложение может получать доступ к неуправляемому кодом только в том случае, если ему предоставлено разрешение UnmanagedCode. По умолчанию вызывать неуправляемый код могут только приложения, которые выполняются локально.
Некоторые элементы Windows Forms предоставляют неуправляемый доступ, требующий UnmanagedCode разрешение. В следующей таблице перечислены элементы System.Windows.Forms пространства имен, которым требуется это разрешение. Дополнительные сведения о разрешениях, требуемых для элемента, см. в разделе документации по библиотеке классов .NET Framework.
Компонент | Член |
---|---|
Application | Метод - AddMessageFilter - CurrentInputLanguage Свойство Метод - Exit Метод - ExitThread - ThreadException Событие |
CommonDialog | Метод - HookProc - OwnerWndProc\ метод Метод - Reset Метод - RunDialog |
Control | Метод - CreateParams Метод - DefWndProc Метод - DestroyHandle Метод - WndProc |
Help | - ShowHelp Методы Метод - ShowHelpIndex |
NativeWindow | - NativeWindow Класс |
Screen | Метод - FromHandle |
SendKeys | Метод - Send Метод - SendWait |
Если приложение не имеет разрешения на вызов неуправляемого кода, приложение должно запросить UnmanagedCode разрешение, или необходимо подумать о других способах реализации таких возможностей, во многих случаях Windows Forms предоставляет управляемую альтернативу Windows Функции API. Если альтернативного способа нет, а приложению необходимо получать доступ к неуправляемому коду, повысьте уровень разрешений для такого приложения.
Благодаря разрешению на вызов неуправляемого кода приложение может выполнять практически любые действия. Следовательно, разрешение на вызов неуправляемого кода должно предоставляться только приложениям из доверенного источника. Кроме того, в зависимости от приложения, часть функциональных возможностей приложения, вызывающих неуправляемый код, может быть необязательной или использоваться только в среде с полным доверием. Дополнительные сведения об опасных разрешениях см. в разделе Опасные разрешения и администрирование политик. Дополнительные сведения о повышении уровня разрешений см. в разделе Общее администрирование политик безопасности.