Säkerhet (WPF)
När du utvecklar fristående program i Windows Presentation Foundation (WPF) och webbläsarbaserade program måste du överväga säkerhetsmodellen. WPF-fristående program körs med obegränsade behörigheter (CASFullTrust behörighetsuppsättning), oavsett om de distribueras med Windows Installer (.msi), XCopy eller ClickOnce. Distribution av fristående WPF-program med begränsat förtroende via ClickOnce stöds inte. Ett värdprogram med fullständigt förtroende kan dock skapa ett partiellt förtroende AppDomain med hjälp av .NET Framework-tilläggsmodellen. Mer information finns i WPF Add-Ins Overview.
WPF-webbläsarbaserade program hanteras av Windows Internet Explorer eller Firefox, och kan vara antingen XAML-webbläsarprogram (XBAP) eller fria XAML-dokument (Extensible Application Markup Language). För mer information, se WPF XAML Browser Applications Overview.
Varning
XBAP:er kräver att äldre webbläsare används, till exempel Internet Explorer och gamla versioner av Firefox. Dessa äldre webbläsare stöds vanligtvis inte i Windows 10 och Windows 11. Moderna webbläsare stöder inte längre den teknik som krävs för XBAP-appar på grund av säkerhetsrisker. Plugin-program som aktiverar XBAP:er stöds inte längre. Mer information finns i Vanliga frågor och svar om WPF-webbläsarbaserade program (XBAP).
WPF-webbläsarvärdbaserade program körs som standard i en partiell säkerhetssandlåda som är begränsad till standardinställningen CASInternet zonbehörighetsuppsättning. Detta isolerar effektivt WPF-program som är värdbaserade i webbläsare från klientdatorn på samma sätt som du förväntar dig att vanliga webbapplikationer ska isoleras. En XBAP kan höja behörigheter, upp till Fullständigt förtroende, beroende på säkerhetszonen för distributions-URL:en och klientens säkerhetskonfiguration. Mer information finns i WPF Partial Trust Security.
I det här avsnittet beskrivs säkerhetsmodellen för fristående och webbläsarbaserade program i Windows Presentation Foundation (WPF).
Det här avsnittet innehåller följande avsnitt:
Säker navigering
För XBAP:er skiljer WPF mellan två typer av navigering: program och webbläsare.
Programnavigering är navigering mellan innehåll i ett program som hanteras av en webbläsare. Webbläsarnavigering är navigering som ändrar innehållet och plats-URL:en för en webbläsare. Relationen mellan programnavigering (vanligtvis XAML) och webbläsarnavigering (vanligtvis HTML) visas i följande bild:
Vilken typ av innehåll som anses vara säkert för en XBAP att navigera till bestäms främst av om programnavigering eller webbläsarnavigering används.
Säkerhet för programnavigering
Programnavigering anses vara säker om den kan identifieras med en paket-URI som stöder fyra typer av innehåll:
Innehållstyp | Beskrivning | URI-exempel |
---|---|---|
Resurs | Filer som läggs till i ett projekt med en byggtyp av Resurs. | pack://application:,,,/MyResourceFile.xaml |
Innehåll | Filer som läggs till i ett projekt med en byggtyp av Content. | pack://application:,,,/MyContentFile.xaml |
Ursprungsplats | Filer som läggs till i ett projekt med en byggtyp av Ingen. | pack://siteoforigin:,,,/MySiteOfOriginFile.xaml |
Programkod | XAML-resurser som har en kompilerad kod bakom. -eller- XAML-filer som läggs till i ett projekt med en byggtyp av Page. |
pack://application:,,,/MyResourceFile
.xaml
|
Not
Mer information om programdatafiler och paket-URI:er finns i WPF-programresurs, innehåll och datafiler.
Filer av dessa innehållstyper kan navigeras till antingen av användaren eller programmatiskt:
Användarnavigering. Användaren navigerar genom att klicka på ett Hyperlink element.
Programmatisk Navigering. Programmet navigerar utan att involvera användaren, till exempel genom att ange egenskapen NavigationWindow.Source.
Säkerhet för webbläsarnavigering
Webbläsarnavigering anses endast vara säker under följande förhållanden:
användarnavigering. Användaren navigerar genom att klicka på ett Hyperlink element som finns i huvudelementet NavigationWindow, inte i en kapslad Frame.
Zone. Innehållet som navigeras till finns på Internet eller det lokala intranätet.
Protocol. Protokollet som används är antingen http, https, fileller mailto.
Om en XBAP försöker navigera till innehåll på ett sätt som inte uppfyller dessa villkor utlöses en SecurityException.
Säkerhetsinställningar för webbläsarprogramvara
Säkerhetsinställningarna på datorn avgör vilken åtkomst något webbläsarprogram beviljas. Webbsurfningsprogram innehåller alla program eller komponenter som använder WinINet eller UrlMon API:er, inklusive Internet Explorer och PresentationHost.exe.
Internet Explorer tillhandahåller en mekanism genom vilken du kan konfigurera de funktioner som tillåts att köras av eller från Internet Explorer, inklusive följande:
.NET Framework-beroende komponenter
ActiveX-kontroller och plugin-program
Nedladdningar
Skript
Användarautentisering
Den samling funktioner som kan skyddas på det här sättet konfigureras per zon för Internet, Intranät, Betrodda platseroch begränsade platser zoner. Följande steg beskriver hur du konfigurerar dina säkerhetsinställningar:
Öppna Kontrollpanelen.
Klicka på Nätverk och Internet och klicka sedan på Internetalternativ.
Dialogrutan Internetalternativ visas.
På fliken Security väljer du den zon som säkerhetsinställningarna ska konfigureras för.
Klicka på knappen Anpassad Nivå.
Dialogrutan Säkerhetsinställningar visas och du kan konfigurera säkerhetsinställningarna för den valda zonen.
Anteckning
Du kan också gå till dialogrutan Internetalternativ från Internet Explorer. Klicka på Verktyg och klicka sedan på Internetalternativ.
Från och med Windows Internet Explorer 7 ingår följande säkerhetsinställningar specifikt för .NET Framework:
Lös XAML-. Styr om Internet Explorer kan navigera till och lösa XAML-filer. (Alternativ för aktivera, inaktivera och fråga).
XAML-webbläsarapplikationer. Styr om Internet Explorer kan navigera till och köra XBAP:er. (Alternativ för aktivera, inaktivera och fråga).
Som standard är alla dessa inställningar aktiverade för Internet, lokalt intranätoch Betrodda platser zoner och inaktiverade för begränsade platser zon.
Säkerhetsrelaterade WPF-registerinställningar
Förutom de säkerhetsinställningar som är tillgängliga via Internetalternativen är följande registervärden tillgängliga för selektiv blockering av ett antal säkerhetskänsliga WPF-funktioner. Värdena definieras under följande nyckel:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\Windows Presentation Foundation\Features
I följande tabell visas de värden som kan anges.
Värdenamn | Värdetyp | Värdedata |
---|---|---|
XBAPDisallow | REG_DWORD | 1 att inte tillåta; 0 för att tillåta. |
LooseXamlDisallow | REG_DWORD | 1 att inte tillåta; 0 för att tillåta. |
WebbläsareAvslag | REG_DWORD | 1 att inte tillåta; 0 för att tillåta. |
MediaAudioDisallow | REG_DWORD | 1 att inte tillåta; 0 för att tillåta. |
MediaBildFörbjud | REG_DWORD | 1 att inte tillåta; 0 för att tillåta. |
MediaVideoFörbjud | REG_DWORD | 1 att inte tillåta; 0 för att tillåta. |
ScriptInteropDisallow | REG_DWORD | 1 att inte tillåta; 0 för att tillåta. |
WebBrowser-kontroll och funktionskontroller
WPF-WebBrowser-kontrollen kan användas som värd för webbinnehåll. WPF-WebBrowser-kontrollen omsluter den underliggande WebBrowser ActiveX-kontrollen. WPF ger visst stöd för att skydda ditt program när du använder WPF-WebBrowser kontroll för att vara värd för obetrott webbinnehåll. Vissa säkerhetsfunktioner måste dock tillämpas direkt av programmen med hjälp av WebBrowser kontroll. Mer information om WebBrowser ActiveX-kontrollen finns i WebBrowser Control Overviews and Tutorials.
Not
Det här avsnittet gäller även för Frame-kontrollen eftersom den använder WebBrowser för att navigera till HTML-innehåll.
Om WPF-WebBrowser-kontrollen används som värd för obetrott webbinnehåll bör ditt program använda ett partiellt förtroende AppDomain för att isolera programkoden från potentiellt skadlig HTML-skriptkod. Detta gäller särskilt om programmet interagerar med det värdbaserade skriptet med hjälp av metoden InvokeScript och egenskapen ObjectForScripting. Mer information finns i WPF Add-Ins Overview.
Om ditt program använder WPF-WebBrowser kontroll är ett annat sätt att öka säkerheten och minska attacker att aktivera funktionskontroller i Internet Explorer. Förhandskontroller är funktioner i Internet Explorer som möjliggör för administratörer och utvecklare att konfigurera funktioner i Internet Explorer samt i applikationer som använder WebBrowser ActiveX-kontrollen, vilken omsluts av WPF WebBrowser-kontrollen. Funktionskontroller kan konfigureras med hjälp av funktionen CoInternetSetFeatureEnabled eller genom att ändra värden i registret. Mer information om funktionskontroller finns i Introduktion till funktionskontroller och Funktionskontroller för Internet.
Om du utvecklar ett fristående WPF-program som använder WPF-WebBrowser-kontrollen aktiverar WPF automatiskt följande funktionskontroller för ditt program.
Funktionskontroll |
---|
FEATURE_MIME_HANDLING |
FEATURE_MIME_SNIFFING |
FUNKTION_OBJEKTLAGRING |
Feature_Safe_BindToObject |
FUNKTIONSFÖNSTERSBEGRÄNSNINGAR |
FUNKTIONSZONHÖJD |
FEATURE_RESTRICT_FILEDOWNLOAD |
FEATURE_RESTRICT_ACTIVEXINSTALL |
FUNKTION_TILLÄGGS_HANTERING |
FEATURE_HTTP_USERNAME_PASSWORD_DISABLE |
FEATURE_SECURITYBAND |
FEATURE_UNC_SAVEDFILECHECK |
FEATURE_VALIDATE_NAVIGATE_URL |
FUNKTION_INAKTIVERA_TELNET_PROTOKOLL |
FEATURE_WEBOC_POPUPMANAGEMENT |
FEATURE_DISABLE_LEGACY_COMPRESSION |
FEATURE_SSLUX |
Eftersom dessa funktionskontroller är aktiverade villkorslöst kan ett program med fullständigt förtroende påverkas av dem. I det här fallet, om det inte finns någon säkerhetsrisk för det specifika programmet och innehållet det är värd för, kan motsvarande funktionskontroll inaktiveras.
Funktionskontroller tillämpas av processen som instansierar WebBrowser ActiveX-objektet. Om du skapar ett fristående program som kan navigera till obetrott innehåll bör du därför överväga att aktivera ytterligare funktionskontroller.
Notera
Rekommendationen baseras på allmänna rekommendationer för säkerheten hos MSHTML- och SHDOCVW-värdar. Mer information finns i Vanliga frågor och svar om MSHTML-värdsäkerhet: Del I av II och Vanliga frågor och svar om MSHTML-värdsäkerhet: Del II av II.
Överväg att aktivera följande funktionskontroller för den körbara filen genom att ange registervärdet till 1.
Funktionskontroll |
---|
FEATURE_ACTIVEX_REPURPOSEDETECTION |
FEATURE_BLOCK_LMZ_IMG |
FEATURE_BLOCK_LMZ_OBJECT |
FEATURE_BLOCK_LMZ_SCRIPT |
FEATURE_RESTRICT_RES_TO_LMZ |
FEATURE_RESTRICT_ABOUT_PROTOCOL_IE7 |
FEATURE_SHOW_APP_PROTOCOL_WARN_DIALOG |
FEATURE_LOCALMACHINE_LOCKDOWN |
FEATURE_FORCE_ADDR_AND_STATUS |
FUNKTION_BEGRÄNSAT_OMRÅDE_NÄR_FIL_INTE_HITTAS |
Överväg att inaktivera följande funktionskontroll för den körbara filen genom att ange registervärdet till 0.
Funktionskontroll |
---|
FEATURE_ENABLE_SCRIPT_PASTE_URLACTION_IF_PROMPT |
Om du kör ett XAML-webbläsarprogram med delvis förtroende (XBAP) som innehåller en WPF-WebBrowser kontroll i Windows Internet Explorer, är WPF värd för WebBrowser ActiveX-kontrollen i adressutrymmet för Internet Explorer-processen. Eftersom WebBrowser ActiveX-kontrollen finns i Internet Explorer-processen är alla funktionskontroller för Internet Explorer också aktiverade för WebBrowser ActiveX-kontrollen.
XBAP:er som körs i Internet Explorer får också ytterligare en säkerhetsnivå jämfört med vanliga fristående program. Den här ytterligare säkerheten beror på att Internet Explorer och därför WebBrowser ActiveX-kontrollen körs i skyddat läge som standard i Windows Vista och Windows 7. Mer information om skyddat läge finns i Understanding and Working in Protected Mode Internet Explorer.
Not
Om du försöker köra en XBAP som innehåller en WPF-WebBrowser-kontroll i Firefox medan du befinner dig i Internetzonen, kommer en SecurityException att kastas. Detta beror på WPF-säkerhetsprincipen.
Inaktivera APTCA-sammansättningar för delvis betrodda klientprogram
När hanterade sammansättningar installeras i den globala sammansättningscache (GAC) blir de fullständigt betrodda eftersom användaren måste ge explicit behörighet att installera dem. Eftersom de är fullständigt betrodda kan endast fullständigt betrodda hanterade klientprogram använda dem. Om du vill tillåta att delvis betrodda program använder dem måste de markeras med AllowPartiallyTrustedCallersAttribute (APTCA). Endast sammansättningar som har testats för att vara säkra för körning i partiellt förtroende ska markeras med det här attributet.
Det är dock möjligt för en APTCA-sammansättning att uppvisa ett säkerhetsfel efter att ha installerats i GAC . När ett säkerhetsfel har identifierats kan sammansättningsutgivare skapa en säkerhetsuppdatering för att åtgärda problemet på befintliga installationer och skydda mot installationer som kan uppstå när problemet har identifierats. ** Ett alternativ för uppdateringen är att avinstallera samlingen, även om det kan orsaka problem för andra helt betrodda klientprogram som använder samlingen.
WPF tillhandahåller en mekanism genom vilken en APTCA-sammansättning kan inaktiveras för delvis betrodda XBAPs utan att avinstallera APTCA-sammansättningen.
Om du vill inaktivera en APTCA-sammansättning måste du skapa en särskild registernyckel:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\policy\APTCA\<AssemblyFullName>, FileVersion=<AssemblyFileVersion>
Följande visar ett exempel:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\policy\APTCA\aptcagac, Version=1.0.0.0, Culture=neutral, PublicKeyToken=215e3ac809a0fea7, FileVersion=1.0.0.0
Den här nyckeln upprättar en post för APTCA-sammansättningen. Du måste också skapa ett värde i den här nyckeln som aktiverar eller inaktiverar sammansättningen. Följande är information om värdet:
Värdenamn: APTCA_FLAG.
Värdetyp: REG_DWORD.
Värdedata: 1 att inaktivera; 0 att aktivera.
Om en sammansättning måste inaktiveras för delvis betrodda klientprogram kan du skriva en uppdatering som skapar registernyckeln och värdet.
Anteckning
Core .NET Framework-sammansättningar påverkas inte av att inaktivera dem på det här sättet eftersom de krävs för att hanterade program ska kunna köras. Stöd för att inaktivera APTCA-sammansättningar är främst avsett för program från tredje part.
Sandbox-beteende för lösa XAML-filer
Lösa XAML-filer är XAML-filer med endast markering som inte är beroende av någon kod bakom, händelsehanterare eller programspecifik sammansättning. När lösa XAML-filer navigeras till direkt från webbläsaren laddas de i en säkerhetssandbox baserat på standarduppsättningen av internetzonbehörigheter.
Säkerhetsbeteendet skiljer sig dock när lösa XAML-filer navigeras till från antingen en NavigationWindow eller Frame i ett fristående program.
I båda fallen ärver den lösa XAML-filen som navigeras till behörigheterna från sitt värdprogram. Det här beteendet kan dock vara oönskat ur ett säkerhetsperspektiv, särskilt om en lös XAML-fil skapades av en entitet som antingen inte är betrodd eller okänd. Den här typen av innehåll kallas externt innehåll, och både Frame och NavigationWindow kan konfigureras för att isolera det när det navigeras till. Isolering uppnås genom att ställa in egenskapen SandboxExternalContent till true, enligt följande exempel för Frame och NavigationWindow:
<Frame
Source="ExternalContentPage.xaml"
SandboxExternalContent="True">
</Frame>
<!-- Sandboxing external content using NavigationWindow-->
<NavigationWindow
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
Source="ExternalContentPage.xaml"
SandboxExternalContent="True">
</NavigationWindow>
Med den här inställningen läses externt innehåll in i en process som är separat från den process som är värd för programmet. Den här processen är begränsad till standardbehörighetsuppsättningen för Internetzonen, vilket effektivt isolerar den från värdprogrammet och klientdatorn.
Obs
Även om navigering för att lösa XAML-filer från antingen en NavigationWindow eller Frame i ett fristående program implementeras baserat på WPF-webbläsarens värdinfrastruktur, som involverar PresentationHost-processen, är säkerhetsnivån något mindre än när innehållet läses in direkt i Internet Explorer på Windows Vista och Windows 7 (vilket fortfarande skulle vara via PresentationHost). Det beror på att ett fristående WPF-program som använder en webbläsare inte tillhandahåller den ytterligare säkerhetsfunktionen för skyddat läge i Internet Explorer.
Resurser för att utveckla WPF-program som främjar säkerhet
Följande är några ytterligare resurser som hjälper dig att utveckla WPF-program som främjar säkerhet:
Område | Resurs |
---|---|
Hanterad kod | Säkerhetsvägledning för mönster och metoder för applikationer |
CAS | kodåtkomstsäkerhet |
ClickOnce | ClickOnce-säkerhet och distribution |
WPF | WPF Partiell säkerhetssäkerhet |
Se även
.NET Desktop feedback