Udostępnij za pośrednictwem


Dodatkowe zagadnienia dotyczące zabezpieczeń w formularzach 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ęściowego zaufania, zobacz Bardziej bezpieczny 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 Bezpieczniejsze 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 powiązana wartość wyliczenia UIPermissionClipboard 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 jest dostępny do użytku 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ą przyjmować dane ze Schowka, ale kontrolki użytkownika nie mogą odczytywać ich za pomocą programu.
NoClipboard Nie można użyć Schowka.

Domyślnie strefa Lokalny Intranet otrzymuje dostęp AllClipboard, a strefa Internetowa otrzymuje dostęp OwnClipboard. 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 podnoszenia uprawnień, zobacz General Security Policy Administration.

Manipulowanie oknami

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

Domyślnie strefa lokalny Intranet ma dostęp AllWindows, a strefa Internet otrzymuje dostęp SafeTopLevelWindows. 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 informują użytkownika aplikacji, że aplikacja działa w środowisku częściowego zaufania.

wartość UIPermissionWindow Opis
AllWindows Użytkownicy mogą używać wszystkich okien i zdarzeń wejściowych bez ograniczeń.
SafeTopLevelWindows Użytkownicy mogą używać tylko bezpiecznych głównych okien i podokien do rysowania oraz mogą korzystać jedynie ze zdarzeń wejściowych użytkownika w interfejsie użytkownika w tych głównych oknach i podoknach. Te bezpieczniejsze okna są wyraźnie oznaczone i mają minimalne i maksymalne ograniczenia rozmiaru. Ograniczenia powstrzymują potencjalnie szkodliwe ataki fałszowania, takie jak naśladowanie ekranów logowania systemu lub pulpitu systemowego, i ograniczają programowy dostęp do okien nadrzędnych, interfejsów API związanych z fokusem oraz użycie kontrolki ToolTip.
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 wyliczenie UIPermissionWindow zezwala na mniejszą liczbę akcji niż poziom powyżej. W poniższych tabelach przedstawiono akcje ograniczone przez wartości SafeTopLevelWindows i SafeSubWindows. Aby uzyskać dokładne uprawnienia wymagane dla każdego członka, zobacz odpowiednią sekcję dla tego członka w dokumentacji biblioteki klas .NET Framework.

SafeTopLevelWindows uprawnienie ogranicza działania wymienione w poniższej tabeli.

Składnik Akcje ograniczone
Application - Ustawianie właściwości SafeTopLevelCaptionFormat.
Control - Pobieranie właściwości Parent.
- Ustawianie właściwości Region.
- Wywoływanie metody FindForm , Focus, FromChildHandle i FromHandle, PreProcessMessage, ReflectMessagelub SetTopLevel.
- Wywoływanie metody GetChildAtPoint, jeśli zwrócona kontrolka nie jest elementem podrzędnym kontrolki wywołującej.
— Modyfikowanie fokusu kontrolki wewnątrz kontrolki kontenera.
Cursor - Ustawianie właściwości Clip.
- Wywoływanie metody Hide.
DataGrid - Wywoływanie metody ProcessTabKey.
Form — Pobieranie właściwości ActiveForm lub MdiParent.
- Ustawianie właściwości ControlBox, ShowInTaskbarlub TopMost.
- Ustawienie właściwości Opacity poniżej 50%.
- Ustawienie właściwości WindowState na Minimized programowo.
- Wywoływanie metody Activate.
— Przy użyciu wartości wyliczeń None, FixedToolWindow, SizableToolWindowiFormBorderStyle.
NotifyIcon - Korzystanie z składnika NotifyIcon jest całkowicie ograniczone.

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

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

Hostowanie kontrolek innych firm

Inny rodzaj manipulowania oknami może wystąpić, jeśli formularze hostują kontrolki innych firm. Kontrolka zewnętrzna to każda niestandardowa UserControl, której nie opracowałeś i nie skompilowałeś samodzielnie. Chociaż scenariusz hostingu jest trudny do wykorzystania, teoretycznie możliwe jest, aby zewnętrzna kontrolka rozszerzyła swoją powierzchnię renderowania na cały obszar 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żywać kontroli zewnętrznych dostawców tylko od tych, 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 wartość UnmanagedCode enumeracji SecurityPermissionFlag kontrolują dostęp do kodu niezarządzanego. Aplikacja może uzyskać dostęp do niezarządzanego kodu tylko wtedy, gdy zostaną udzielone uprawnienia UnmanagedCode. Domyślnie tylko aplikacje uruchomione lokalnie mogą wywoływać kod niezarządzany.

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

Składnik Członek
Application - AddMessageFilter metoda
właściwość - CurrentInputLanguage
- Exit metoda
- ExitThread metoda
zdarzenie - ThreadException
CommonDialog metoda - HookProc
- OwnerWndProc\ metoda
- Reset metoda
Metoda - RunDialog
Control - CreateParams metoda
metoda - DefWndProc
- DestroyHandle metoda
- WndProc, metoda
Help metody - ShowHelp
- ShowHelpIndex, metoda
NativeWindow - NativeWindow klasa
Screen - FromHandle metoda
SendKeys - Send, metoda
- SendWait metoda

Jeśli aplikacja nie ma uprawnień do wywoływania niezarządzanego kodu, musi zażądać uprawnień typu UnmanagedCode lub rozważyć alternatywne sposoby implementacji funkcji. W wielu przypadkach formularze Windows zapewniają zarządzaną alternatywę dla funkcji Windows API. 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 wykonuje wywołanie kodu niezarządzanego, może być opcjonalna lub włączona tylko w środowisku pełnego zaufania. Aby uzyskać więcej informacji na temat niebezpiecznych uprawnień, zobacz Niebezpieczne uprawnienia i administracja zasadami. Aby uzyskać więcej informacji na temat podnoszenia uprawnień, zobacz General Security Policy Administration.

Zobacz też