Dodatkowe zagadnienia dotyczące zabezpieczeń dotyczące formularzy systemu Windows

Ustawienia zabezpieczeń programu .NET Framework mogą spowodować, że aplikacja będzie działać inaczej w środowisku częściowo zaufania niż na komputerze lokalnym. Program .NET Framework ogranicza między innymi dostęp do takich krytycznych zasobów lokalnych jak system plików, sieć i niezarządzane interfejsy API. Ustawienia zabezpieczeń mają wpływ na możliwość wywoływania interfejsu API systemu Microsoft Windows lub innych interfejsów API, których nie można zweryfikować przez system zabezpieczeń. Zabezpieczenia wpływają również na inne aspekty aplikacji, w tym dostęp do plików i danych oraz drukowanie. Aby uzyskać więcej informacji na temat dostępu do plików i danych w środowisku częściowo zaufania, zobacz Temat More Secure File and Data Access in Windows Forms (Dostęp do plików i danych w formularzach systemu Windows). Aby uzyskać więcej informacji na temat drukowania w środowisku częściowego zaufania, zobacz Bardziej bezpieczne drukowanie w formularzach Windows Forms.

W poniższych sekcjach omówiono sposób pracy ze Schowkiem, wykonywania manipulacji oknami i wywoływania interfejsu API systemu Windows z aplikacji działających w środowisku częściowego zaufania.

Dostęp do schowka

Klasa UIPermission kontroluje dostęp do Schowka, a skojarzona UIPermissionClipboard wartość wyliczenia wskazuje poziom dostępu. W poniższej tabeli przedstawiono możliwe poziomy uprawnień.

Wartość UIPermissionClipboard opis
AllClipboard Schowek można używać bez ograniczeń.
OwnClipboard Schowek może być używany z pewnymi ograniczeniami. Możliwość umieszczania danych w Schowku (operacje kopiowania lub wycinania poleceń) jest nieograniczona. Kontrolki wewnętrzne, które akceptują wklejanie, takie jak pole tekstowe, mogą akceptować dane Schowka, ale kontrolki użytkownika nie mogą programowo odczytywać ze Schowka.
NoClipboard Nie można użyć Schowka.

Domyślnie strefa Lokalny intranet odbiera AllClipboard dostęp, a strefa internetowa otrzymuje OwnClipboard dostęp. Oznacza to, że aplikacja może kopiować dane do Schowka, ale aplikacja nie może programowo wkleić ani odczytać ze Schowka. Te ograniczenia uniemożliwiają programom bez pełnego zaufania odczytywanie zawartości skopiowanej do Schowka przez inną aplikację. Jeśli aplikacja wymaga pełnego dostępu do Schowka, ale nie masz uprawnień, musisz podnieść poziom uprawnień dla aplikacji. Aby uzyskać więcej informacji na temat pobierania uprawnień, zobacz Ogólne zasady zabezpieczeń Administracja istration.

Manipulowanie oknami

Klasa UIPermission kontroluje również uprawnienia do wykonywania manipulowania oknami i innych akcji związanych z interfejsem użytkownika, a skojarzona UIPermissionWindow wartość wyliczenia wskazuje poziom dostępu. W poniższej tabeli przedstawiono możliwe poziomy uprawnień.

Domyślnie strefa Lokalny intranet odbiera AllWindows dostęp, a strefa internetowa otrzymuje SafeTopLevelWindows dostęp. Oznacza to, że w strefie internetowej aplikacja może wykonywać większość akcji okna i interfejsu użytkownika, ale wygląd okna zostanie zmodyfikowany. Zmodyfikowane okno wyświetla powiadomienie balonowe po pierwszym uruchomieniu, zawiera zmodyfikowany tekst paska tytułu i wymaga przycisku zamknięcia na pasku tytułu. Powiadomienie dymka i pasek tytułu identyfikują użytkownika aplikacji uruchomionej w ramach częściowego zaufania.

UIPermissionWindow wartość opis
AllWindows Użytkownicy mogą używać wszystkich zdarzeń wejściowych systemu Windows i użytkownika bez ograniczeń.
SafeTopLevelWindows Użytkownicy mogą używać tylko bezpieczniejszych okien najwyższego poziomu i bezpieczniejszych podwiążeń do rysowania i mogą używać tylko zdarzeń wejściowych użytkownika dla interfejsu użytkownika w tych oknach najwyższego poziomu i podwindows. Te bezpieczniejsze okna są wyraźnie oznaczone i mają minimalne i maksymalne ograniczenia rozmiaru. Ograniczenia uniemożliwiają potencjalnie szkodliwe ataki fałszowania, takie jak imitowanie ekranów logowania systemu lub pulpitu systemowego oraz ograniczanie programowego dostępu do okien nadrzędnych, interfejsów API związanych z fokusem i korzystania z ToolTip kontrolki,
SafeSubWindows Użytkownicy mogą używać tylko bezpieczniejszych podwindow do rysowania i mogą używać tylko zdarzeń wejściowych użytkownika dla interfejsu użytkownika w tym podwindow. Kontrolka wyświetlana w przeglądarce jest przykładem bezpieczniejszego podwindowu.
NoWindows Użytkownicy nie mogą używać żadnych zdarzeń systemu Windows ani interfejsu użytkownika. Nie można użyć interfejsu użytkownika.

Każdy poziom uprawnień zidentyfikowany przez UIPermissionWindow wyliczenie zezwala na mniejszą liczbę akcji niż poziom powyżej. W poniższych tabelach przedstawiono akcje, które są ograniczone przez SafeTopLevelWindows wartości i SafeSubWindows . Aby uzyskać dokładne uprawnienia wymagane dla każdego elementu członkowskiego, zobacz dokumentację dla tego elementu członkowskiego w dokumentacji biblioteki klas programu .NET Framework.

SafeTopLevelWindows uprawnienie ogranicza akcje wymienione w poniższej tabeli.

Składnik Akcje ograniczone
Application - Ustawianie SafeTopLevelCaptionFormat właściwości.
Control - Pobieranie Parent właściwości.
- Ustawianie Region właściwości.
- Wywoływanie FindForm metody , FromChildHandleFocusi FromHandle, PreProcessMessagelub ReflectMessageSetTopLevel .
- Wywoływanie GetChildAtPoint metody, jeśli zwrócona kontrolka nie jest elementem podrzędnym kontrolki wywołującej.
— Modyfikowanie fokusu kontrolki wewnątrz kontrolki kontenera.
Cursor - Ustawianie Clip właściwości.
- Wywoływanie Hide metody .
DataGrid - Wywoływanie ProcessTabKey metody .
Form - Pobieranie ActiveForm właściwości or MdiParent .
- Ustawianie ControlBoxwłaściwości , ShowInTaskbarlub TopMost .
- Ustawianie Opacity właściwości poniżej 50%.
- Ustawienie WindowState właściwości na Minimized programowe.
- Wywoływanie Activate metody .
— Przy użyciu Nonewartości , FixedToolWindowi SizableToolWindowFormBorderStyle wyliczenia.
NotifyIcon - Używanie NotifyIcon składnika jest całkowicie ograniczone.

Wartość SafeSubWindows ogranicza akcje wymienione w poniższej tabeli oprócz ograniczeń wprowadzonych przez SafeTopLevelWindows wartość.

Składnik Akcje ograniczone
CommonDialog — Wyświetlanie okna dialogowego pochodzącego CommonDialog z klasy .
Control - Wywoływanie CreateGraphics metody .
- Ustawianie Cursor właściwości.
Cursor - Ustawianie Current właściwości.
MessageBox - Wywoływanie Show metody .

Hostowanie kontrolek innych firm

Inny rodzaj manipulowania oknami może wystąpić, jeśli formularze hostują kontrolki innych firm. Kontrolka innej firmy to każdy niestandardowy, UserControl który nie został utworzony i skompilowany samodzielnie. Chociaż scenariusz hostingu jest trudny do wykorzystania, teoretycznie jest możliwe rozszerzenie powierzchni renderowania przez inną firmę w celu pokrycia całego obszaru formularza. Ta kontrolka może następnie naśladować krytyczne okno dialogowe i zażądać informacji, takich jak kombinacje nazwy użytkownika/hasła lub numery kont bankowych od użytkowników.

Aby ograniczyć to potencjalne ryzyko, należy użyć kontroli innych firm tylko od dostawców, którym można ufać. Jeśli używasz kontrolek innych firm pobranych ze źródła niezweryfikowalnego, zalecamy przejrzenie kodu źródłowego pod kątem potencjalnych luk w zabezpieczeniach. Po sprawdzeniu, czy źródło nie jest złośliwe, należy skompilować zestaw samodzielnie, aby upewnić się, że źródło jest zgodne z zestawem.

Wywołania interfejsu API systemu Windows

Jeśli projekt aplikacji wymaga wywołania funkcji z interfejsu API systemu Windows, uzyskujesz dostęp do kodu niezarządzanego. W takim przypadku nie można określić akcji kodu w oknie lub systemie operacyjnym podczas pracy z wywołaniami lub wartościami interfejsu API systemu Windows. Klasa SecurityPermission i UnmanagedCode wartość SecurityPermissionFlag kontroli dostępu do kodu niezarządzanego. Aplikacja może uzyskiwać dostęp do niezarządzanego kodu tylko wtedy, gdy udzielono UnmanagedCode mu uprawnienia. Domyślnie tylko aplikacje uruchomione lokalnie mogą wywoływać kod niezarządzany.

Niektóre elementy członkowskie formularzy systemu Windows zapewniają niezarządzany UnmanagedCode dostęp, który wymaga uprawnień. W poniższej System.Windows.Forms tabeli wymieniono elementy członkowskie w przestrzeni nazw, które wymagają uprawnienia. Aby uzyskać więcej informacji na temat uprawnień wymaganych dla elementu członkowskiego, zobacz dokumentację biblioteki klas programu .NET Framework.

Składnik Element członkowski
Application - AddMessageFilter Metoda
- CurrentInputLanguage Właściwość
- Exit Metoda
- ExitThread Metoda
- ThreadException Zdarzenie
CommonDialog - HookProc Metoda
- OwnerWndProc\Metoda
- Reset Metoda
- RunDialog Metoda
Control - CreateParams Metoda
- DefWndProc Metoda
- DestroyHandle Metoda
- WndProc Metoda
Help Metody - ShowHelp
- ShowHelpIndex Metoda
NativeWindow Klasa - NativeWindow
Screen - FromHandle Metoda
SendKeys - Send Metoda
- SendWait Metoda

Jeśli aplikacja nie ma uprawnień do wywoływania niezarządzanego kodu, aplikacja musi zażądać UnmanagedCode uprawnień lub rozważyć alternatywne sposoby implementowania funkcji. W wielu przypadkach formularze systemu Windows udostępniają zarządzaną alternatywę dla funkcji interfejsu API systemu Windows. Jeśli nie istnieje żadna alternatywna metoda, a aplikacja musi uzyskać dostęp do kodu niezarządzanego, konieczne będzie podniesienie uprawnień dla aplikacji.

Uprawnienie do wywoływania niezarządzanego kodu umożliwia aplikacji wykonywanie większości zadań. W związku z tym uprawnienia do wywoływania niezarządzanego kodu powinny być przyznawane tylko dla aplikacji pochodzących z zaufanego źródła. Alternatywnie, w zależności od aplikacji, funkcja aplikacji, która sprawia, że wywołanie kodu niezarządzanego może być opcjonalne lub włączone tylko w środowisku pełnego zaufania. Aby uzyskać więcej informacji na temat niebezpiecznych uprawnień, zobacz Niebezpieczne uprawnienia i zasady Administracja istration. Aby uzyskać więcej informacji na temat pobierania uprawnień, zobacz Ogólne zasady zabezpieczeń Administracja istration.

Zobacz też