Další aspekty zabezpečení ve Windows Forms

Důležité

Tento obsah se vztahuje pouze na rozhraní .NET Framework, pokud není zadán jinak.

Nastavení zabezpečení rozhraní .NET Framework může způsobit, že se aplikace bude v prostředí s částečnou důvěryhodností spouštět odlišně než v místním počítači. Rozhraní .NET Framework mimo jiné omezuje přístup k takovým důležitým místním prostředkům, jako je systém souborů, síť a nespravovaná rozhraní API. Nastavení zabezpečení ovlivňuje schopnost volat rozhraní API systému Microsoft Windows nebo jiná rozhraní API, která nelze ověřit systémem zabezpečení. Zabezpečení také ovlivňuje další aspekty vaší aplikace, včetně přístupu k souborům a datům a tisku. Další informace o přístupu k souborům a datům v prostředí s částečným vztahem důvěryhodnosti najdete v tématu Více zabezpečených souborů a přístupu k datům ve Windows Forms. Další informace o tisku v prostředí s částečnou důvěryhodností naleznete v tématu Bezpečnější tisk ve Windows Forms.

V následujících částech se dozvíte, jak pracovat se schránkou, provádět manipulaci s okny a volat rozhraní API systému Windows z aplikací spuštěných v prostředí s částečnou důvěryhodností.

Přístup ke schránce

Třída UIPermission řídí přístup ke schránce a přidružená hodnota výčtu UIPermissionClipboard označuje úroveň tohoto přístupu. Následující tabulka uvádí možné úrovně oprávnění.

Hodnota UIPermissionClipboard Popis
AllClipboard Schránku lze použít bez omezení.
OwnClipboard Schránku lze použít s určitými omezeními. Možnost umístit data do schránky (operace kopírování nebo vyjmutí příkazů) je neomezená. Vestavěné ovládací prvky, které přijímají vložení, například textové pole, mohou přijímat data ze schránky, ale uživatelské ovládací prvky nemohou programově číst data ze schránky.
NoClipboard Schránku nelze použít.

Zóna Místního intranetu ve výchozím nastavení přijímá AllClipboard přístup a zóna internetu přijímá OwnClipboard přístup. To znamená, že aplikace může kopírovat data do schránky, ale aplikace nemůže do schránky vložit ani číst programově. Tato omezení brání programům bez plné důvěryhodnosti číst obsah zkopírovaný do schránky jinou aplikací. Pokud vaše aplikace vyžaduje plný přístup ke schránce, ale nemáte k tomu potřebná oprávnění, budete muset zvýšit úroveň oprávnění pro svou aplikaci. Další informace o zvýšení oprávnění naleznete v tématu Obecná správa zásad zabezpečení.

Manipulace s okny

Třída UIPermission také řídí oprávnění k provádění manipulace s okny a další akce související s uživatelským rozhraním a přidružená UIPermissionWindow hodnota výčtu označuje úroveň přístupu. Následující tabulka uvádí možné úrovně oprávnění.

Zóna Místního intranetu ve výchozím nastavení přijímá AllWindows přístup a zóna internetu přijímá SafeTopLevelWindows přístup. To znamená, že v zóně Internet může aplikace provádět většinu akcí okna a uživatelského rozhraní, ale vzhled okna bude změněn. V upraveném okně se při prvním spuštění zobrazí oznámení bubliny, obsahuje upravený text záhlaví a vyžaduje tlačítko zavřít na záhlaví. Oznámení bubliny a záhlaví okna uživateli aplikace sdělují, že aplikace běží s částečnou důvěrou.

Hodnota UIPermissionWindow Popis
AllWindows Uživatelé můžou bez omezení používat všechna okna a události uživatelského vstupu.
SafeTopLevelWindows Uživatelé mohou pro kreslení používat pouze bezpečné okna nejvyšší úrovně a bezpečné dílčí okna a mohou pro uživatelské rozhraní používat pouze události uživatelského vstupu v rámci těchto oken nejvyšší úrovně a dílčích oken. Tato bezpečnější okna jsou jasně označená a mají minimální a maximální omezení velikosti. Tato omezení brání potenciálně škodlivým útokům typu spoofing, jako je například napodobení přihlašovacích obrazovek systému nebo plochy systému, a omezuje programový přístup k nadřazeným oknům, rozhraním API souvisejícím s fokusem a používání ToolTip ovládacího prvku.
SafeSubWindows Uživatelé mohou pro zobrazení používat pouze bezpečnější dílčí okna a mohou používat pouze události uživatelského vstupu pro uživatelské rozhraní v rámci daného dílčího okna. Ovládací prvek zobrazený v prohlížeči je příkladem bezpečnějšího dílčího okna.
NoWindows Uživatelé nemohou používat žádná okna ani události uživatelského rozhraní. Nelze použít žádné uživatelské rozhraní.

Každá úroveň oprávnění identifikovaná výčtem UIPermissionWindow umožňuje méně akcí, než je úroveň nad ní. Následující tabulky označují akce, které jsou omezené hodnotami SafeTopLevelWindows a SafeSubWindows. Přesná oprávnění požadovaná pro každého člena najdete v dokumentaci k knihovně tříd rozhraní .NET Framework.

SafeTopLevelWindows oprávnění omezuje akce uvedené v následující tabulce.

Součást Omezené akce
Application - Nastavení vlastnosti SafeTopLevelCaptionFormat.
Control - Získávání Parent vlastnosti.
- Nastavení vlastnosti Region.
- Volání FindForm, Focus, FromChildHandle a FromHandle, PreProcessMessage, ReflectMessage nebo SetTopLevel metody.
- Volání GetChildAtPoint metody, pokud vrácený ovládací prvek není podřízený ovládacímu prvku, který jej volá.
– Umožňuje změnit fokus ovládacího prvku uvnitř ovládacího prvku kontejneru.
Cursor - Nastavení vlastnosti Clip.
Volání metody Hide
DataGrid Volání metody ProcessTabKey
Form - Získání vlastnosti ActiveForm nebo MdiParent.
- Nastavení objektu ControlBox, ShowInTaskbarnebo TopMost vlastnosti.
- Nastavení parametru Opacity pod 50%.
- Nastavení WindowState vlastnosti na Minimized programově.
Volání metody Activate
- Pomocí hodnot None, FixedToolWindow a SizableToolWindowFormBorderStyle výčtu.
NotifyIcon - Použití NotifyIcon komponenty je zcela omezeno.

Hodnota SafeSubWindows omezuje akce uvedené v následující tabulce, kromě omezení, která SafeTopLevelWindows tato hodnota uvádí.

Součást Omezené akce
CommonDialog - Zobrazuje dialogové okno odvozené z CommonDialog třídy.
Control Volání metody CreateGraphics
- Nastavení vlastnosti Cursor.
Cursor - Nastavení vlastnosti Current.
MessageBox Volání metody Show

Hostování ovládacích prvků třetích stran

K dalšímu druhu manipulace s okny může dojít, pokud vaše formuláře hostují ovládací prvky třetích stran. Ovládací prvek třetí strany je jakýkoliv vlastní UserControl, který jste sami nevyvinuli ani nezkompilovali. I když je scénář hostování těžko zneužitelný, je teoreticky možné, že ovládací prvek třetí strany rozšíří plochu vykreslování tak, aby pokrývala celou oblast formuláře. Tento ovládací prvek pak může napodobovat kritické dialogové okno a požádat o informace, jako jsou kombinace uživatelského jména a hesla nebo čísla bankovních účtů od uživatelů.

Pokud chcete omezit toto potenciální riziko, použijte kontroly třetích stran jenom od dodavatelů, kterým můžete důvěřovat. Pokud používáte ovládací prvky třetích stran, které jste stáhli z neověřitelného zdroje, doporučujeme zkontrolovat zdrojový kód pro potenciální zneužití. Jakmile ověříte, že zdroj není škodlivý, měli byste sestavení zkompilovat sami, abyste zajistili, že zdroj odpovídá sestavení.

Volání rozhraní API systému Windows

Pokud návrh vaší aplikace vyžaduje volání funkce z rozhraní API systému Windows, přistupujete k nespravovanému kódu. V takovém případě nelze určit akce kódu pro okno nebo operační systém při práci s voláními nebo hodnotami rozhraní API systému Windows. Třída SecurityPermission a hodnota UnmanagedCode výčtu SecurityPermissionFlag řídí přístup k nespravovanému kódu. Aplikace má přístup k nespravovanému UnmanagedCode kódu jenom v případech, kdy mu je uděleno oprávnění. Ve výchozím nastavení můžou nespravovaný kód volat pouze aplikace, které jsou spuštěné místně.

Někteří členové modelu Windows Forms poskytují nespravovaný přístup, který vyžaduje UnmanagedCode oprávnění. Následující tabulka uvádí členy v System.Windows.Forms oboru názvů, které vyžadují oprávnění. Další informace o oprávněních požadovaných pro člena naleznete v dokumentaci knihovny tříd rozhraní .NET Framework.

Součást Člen
Application - AddMessageFilter metoda
- CurrentInputLanguage vlastnost
- Exit metoda
- ExitThread metoda
- ThreadException událost
CommonDialog - HookProc metoda
- OwnerWndProc\metoda
- Reset metoda
- RunDialog metoda
Control - CreateParams metoda
- DefWndProc metoda
- DestroyHandle metoda
- WndProc metoda
Help - ShowHelp metody
- ShowHelpIndex metoda
NativeWindow - NativeWindow třída
Screen - FromHandle metoda
SendKeys - Send metoda
- SendWait metoda

Pokud vaše aplikace nemá oprávnění k volání nespravovaného kódu, musí vaše aplikace požádat o UnmanagedCode oprávnění nebo musíte zvážit alternativní způsoby implementace funkcí. V mnoha případech windows Forms poskytuje spravovanou alternativu k funkcím rozhraní API systému Windows. Pokud neexistují žádné alternativní prostředky a aplikace musí přistupovat k nespravovanému kódu, budete muset zvýšit oprávnění pro aplikaci.

Oprávnění k volání nespravovaného kódu umožňuje aplikaci provádět cokoliv. Proto by mělo být uděleno oprávnění k volání nespravovaného kódu pouze pro aplikace, které pocházejí z důvěryhodného zdroje. Alternativně, v závislosti na aplikaci může být funkce aplikace, která volá nespravovaný kód, volitelná, nebo povolená jenom v prostředí úplné důvěry. Další informace o nebezpečných oprávněních najdete v tématu Nebezpečná oprávnění a správa zásad. Další informace o zvýšení oprávnění naleznete v tématu Obecná správa zásad zabezpečení.

Viz také