Dela via


Ytterligare säkerhetsöverväganden i Windows-formulär

Säkerhetsinställningar för .NET Framework kan göra att programmet körs på ett annat sätt i en partiell förtroendemiljö än på den lokala datorn. .NET Framework begränsar bland annat åtkomsten till sådana kritiska lokala resurser som filsystemet, nätverket och ohanterade API:er. Säkerhetsinställningarna påverkar möjligheten att anropa Microsoft Windows API eller andra API:er som inte kan verifieras av säkerhetssystemet. Säkerhet påverkar även andra aspekter av ditt program, inklusive fil- och dataåtkomst och utskrift. Mer information om fil- och dataåtkomst i en partiell förtroendemiljö finns i Säkrare fil- och dataåtkomst i Windows Forms. Mer information om hur du skriver ut i en delvis betrodd miljö finns i Säkrare utskrift i Windows Forms.

I följande avsnitt beskrivs hur du arbetar med Urklipp, utför fönstermanipulering och anropar Windows-API:et från program som körs i en partiell förtroendemiljö.

Åtkomst till urklipp

Klassen UIPermission styr åtkomsten till Urklipp och det associerade UIPermissionClipboard uppräkningsvärdet anger åtkomstnivån. I följande tabell visas möjliga behörighetsnivåer.

UIPermissionClipboard-värde Beskrivning
AllClipboard Urklipp kan användas utan begränsning.
OwnClipboard Urklipp kan användas med vissa begränsningar. Möjligheten att placera data på Urklipp (kommandoåtgärder kopiera eller klippa ut) är obegränsad. Inbyggda kontroller som accepterar inklistring, till exempel en textruta, kan acceptera Urklippsdata, men användarkontroller kan inte programmatiskt läsa från Urklipp.
NoClipboard Urklipp kan inte användas.

Som standard tar zonen Lokalt intranät emot AllClipboard åtkomst och Internetzonen tar emot OwnClipboard åtkomst. Det innebär att programmet kan kopiera data till Urklipp, men programmet kan inte programmatiskt klistra in till eller läsa från Urklipp. Dessa begränsningar förhindrar att program utan fullständigt förtroende läser innehåll som kopierats till Urklipp av ett annat program. Om programmet kräver fullständig Åtkomst till Urklipp men du inte har behörighet måste du höja behörigheterna för ditt program. Mer information om förhöjning av rättigheter finns i Administration av allmän säkerhetspolicy.

Fönstermanipulering

Klassen UIPermission styr även behörighet att utföra fönstermanipulering och andra användargränssnittsrelaterade åtgärder, och det associerade UIPermissionWindow uppräkningsvärdet anger åtkomstnivån. I följande tabell visas möjliga behörighetsnivåer.

Som standard tar zonen Lokalt intranät emot AllWindows åtkomst och Internetzonen tar emot SafeTopLevelWindows åtkomst. Det innebär att programmet i zonen Internet kan utföra de flesta fönster- och användargränssnittsåtgärder, men fönstrets utseende ändras. Det ändrade fönstret visar en pratbubbemelding när det körs för första gången, innehåller ändrad text i titelfältet och kräver en stängningsknapp i namnlisten. Notisfältet och namnlisten identifierar för användaren av programmet att programmet körs under begränsat förtroende.

UIPermissionWindow-värde Beskrivning
AllWindows Användare kan använda alla windows- och användarindatahändelser utan begränsning.
SafeTopLevelWindows Användare kan bara använda säkrare fönster på den översta nivån och säkrare underfönster för ritning och kan endast använda användarindatahändelser för användargränssnittet i de översta fönstren och underfönstret. Dessa säkrare fönster är tydligt märkta och har begränsningar för minsta och högsta storlek. Begränsningarna förhindrar potentiellt skadliga förfalskningsattacker, till exempel imiterar systeminloggningsskärmar eller systemskrivbordet, och begränsar programmatisk åtkomst till överordnade fönster, fokusrelaterade API:er och användning av ToolTip-kontrollen.
SafeSubWindows Användare kan bara använda säkrare underfönster för ritning och kan endast använda indatahändelser för användargränssnittet i det underfönstret. En kontroll som visas i en webbläsare är ett exempel på en säkrare underwindow.
NoWindows Användare kan inte använda några windows- eller användargränssnittshändelser. Inget användargränssnitt kan användas.

Varje behörighetsnivå som identifieras av UIPermissionWindow uppräkning tillåter färre åtgärder än nivån ovanför den. Följande tabeller anger de åtgärder som begränsas av värdena SafeTopLevelWindows och SafeSubWindows. Exakta behörigheter som krävs för varje medlem finns i referensen för medlemmen i dokumentationen för .NET Framework-klassbiblioteket.

SafeTopLevelWindows behörighet begränsar de åtgärder som anges i följande tabell.

Komponent Begränsade åtgärder
Application – Ange egenskapen SafeTopLevelCaptionFormat.
Control - Hämtar egenskapen Parent.
– Ange egenskapen Region.
– Anropa metoden FindForm , Focus, FromChildHandle och FromHandle, PreProcessMessage, ReflectMessageeller SetTopLevel.
– Anropa metoden GetChildAtPoint om kontrollen som returneras inte är underordnad den anropande kontrollen.
– Ändra kontrollfokus i en containerkontroll.
Cursor – Ange egenskapen Clip.
– Anropa metoden Hide.
DataGrid – Anropa metoden ProcessTabKey.
Form - Hämta egenskapen ActiveForm eller MdiParent.
– Ange egenskapen ControlBox, ShowInTaskbareller TopMost.
– Ange egenskapen Opacity under 50%.
– Ställa in egenskapen WindowStateMinimized programmatiskt.
– Anropa metoden Activate.
– Använda uppräkningsvärdena None, FixedToolWindowoch SizableToolWindowFormBorderStyle.
NotifyIcon – Användningen av komponenten NotifyIcon är helt begränsad.

Värdet SafeSubWindows begränsar de åtgärder som anges i följande tabell, utöver de begränsningar som SafeTopLevelWindows värdet har.

Komponent Begränsade åtgärder
CommonDialog – Visar en dialogruta som härleds från klassen CommonDialog.
Control – Anropa metoden CreateGraphics.
– Ange egenskapen Cursor.
Cursor – Ange egenskapen Current.
MessageBox – Anropa metoden Show.

Hantering av kontroller från tredje part

En annan typ av fönstermanipulering kan inträffa om formulären är värdar för tredjepartskontroller. En kontroll från tredje part är en anpassad UserControl som du inte har utvecklat och kompilerat själv. Även om värdscenariot är svårt att utnyttja, är det teoretiskt möjligt för en tredjepartskontroll att utöka sin återgivningsyta för att täcka hela området i formuläret. Den här kontrollen kan sedan efterlikna en kritisk dialogruta och begära information, till exempel kombinationer av användarnamn och lösenord eller bankkontonummer från dina användare.

Om du vill begränsa den här potentiella risken använder du endast kontroller från tredje part från leverantörer som du kan lita på. Om du använder kontroller från tredje part som du har laddat ned från en icke-verifierad källa rekommenderar vi att du granskar källkoden för potentiella kryphål. När du har kontrollerat att källan inte är skadlig bör du kompilera sammansättningen själv för att säkerställa att källan matchar sammansättningen.

Windows API-anrop

Om programdesignen kräver att du anropar en funktion från Windows-API:et får du åtkomst till ohanterad kod. I det här fallet går det inte att fastställa kodens åtgärder i fönstret eller operativsystemet när du arbetar med Windows API-anrop eller -värden. Klassen SecurityPermission och värdet UnmanagedCode för uppräkningen SecurityPermissionFlag styr åtkomsten till ohanterad kod. Ett program kan endast komma åt ohanterad kod när det beviljas UnmanagedCode behörighet. Som standard kan endast program som körs lokalt anropa ohanterad kod.

Vissa Windows Forms-medlemmar ger oövervakad åtkomst som kräver behörigheten UnmanagedCode. I följande tabell visas de medlemmar i System.Windows.Forms namnrymd som kräver behörigheten. Mer information om de behörigheter som krävs för en medlem finns i dokumentationen för .NET Framework-klassbiblioteket.

Komponent Medlem
Application - AddMessageFilter metod
- CurrentInputLanguage egenskap
- Exit metod
- ExitThread metod
- ThreadException händelse
CommonDialog - HookProc metod
- OwnerWndProc\ metod
- Reset metod
- RunDialog metod
Control - CreateParams metod
- DefWndProc metod
- DestroyHandle metod
- WndProc metod
Help - ShowHelp metoder
- ShowHelpIndex metod
NativeWindow - NativeWindow-klass
Screen - FromHandle metod
SendKeys - Send metod
- SendWait metod

Om programmet inte har behörighet att anropa ohanterad kod måste programmet begära UnmanagedCode behörighet, eller så måste du överväga alternativa sätt att implementera funktioner. I många fall tillhandahåller Windows Forms ett hanterat alternativ till Windows API-funktioner. Om det inte finns några alternativa metoder och programmet måste komma åt ohanterad kod måste du höja behörigheterna för programmet.

Med behörighet att anropa ohanterad kod kan ett program utföra det mesta. Därför bör behörighet att anropa ohanterad kod endast beviljas för program som kommer från en betrodd källa. Alternativt, beroende på programmet, kan den del av programmets funktionalitet som gör anropet till ohanterad kod vara valfri eller aktiverad endast i en fullt pålitlig miljö. Mer information om farliga behörigheter finns i Farliga behörigheter och principadministration. Mer information om hur du höjer behörigheter finns i Administration av allmän säkerhetspolicy.

Se även