Delen via


Beveiliging (WPF)

Bij het ontwikkelen van windows Presentation Foundation (WPF) zelfstandige en browser-gehoste toepassingen, moet u rekening houden met het beveiligingsmodel. Zelfstandige WPF-toepassingen worden uitgevoerd met onbeperkte machtigingen (CASFullTrust machtigingenset), ongeacht of deze zijn geïmplementeerd met Windows Installer (.msi), XCopy of ClickOnce. Het implementeren van gedeeltelijke vertrouwen, zelfstandige WPF-toepassingen met ClickOnce wordt niet ondersteund. Een hosttoepassing met volledige vertrouwensrelatie kan echter een gedeeltelijke vertrouwensrelatie AppDomain maken met behulp van het .NET Framework-invoegtoepassingsmodel. Zie WPF Add-Ins Overviewvoor meer informatie.

WPF-browser-gehoste toepassingen worden gehost door Windows Internet Explorer of Firefox en kunnen XAML-browsertoepassingen (XBAPs) of losse XAML-documenten (Extensible Application Markup Language) zijn voor meer informatie, zie WPF XAML Browser Applications Overview.

Waarschuwing

XBAPs vereisen dat verouderde browsers werken, zoals Internet Explorer en oude versies van Firefox. Deze oudere browsers worden meestal niet ondersteund in Windows 10 en Windows 11. Moderne browsers bieden geen ondersteuning meer voor de technologie die is vereist voor XBAP-apps vanwege beveiligingsrisico's. Invoegtoepassingen die XBAPs inschakelen, worden niet meer ondersteund. Zie Veelgestelde vragen over door de WPF-browser gehoste toepassingen (XBAP)voor meer informatie.

WPF-browser-gehoste toepassingen worden standaard uitgevoerd in een gedeeltelijke vertrouwensbeveiligingssandbox, die is beperkt tot de standaard CAS-Internet zonetoestemmingsset. Hierdoor worden wpF-toepassingen die door de browser worden gehost effectief geïsoleerd van de clientcomputer op dezelfde manier als u zou verwachten dat typische webtoepassingen worden geïsoleerd. Een XBAP kan bevoegdheden verhogen tot Volledig vertrouwen, afhankelijk van de beveiligingszone van de implementatie-URL en de beveiligingsconfiguratie van de client. Zie WPF Partial Trust Securityvoor meer informatie.

In dit onderwerp wordt het beveiligingsmodel voor zelfstandige en browser-gehoste toepassingen van Windows Presentation Foundation (WPF) besproken.

Dit onderwerp bevat de volgende secties:

Veilige navigatie

Voor XBAPs onderscheidt WPF twee typen navigatie: toepassing en browser.

toepassingsnavigatie is navigatie tussen items van inhoud in een toepassing die wordt gehost door een browser. browsernavigatie is navigatie die de inhoud en locatie-URL van een browser zelf wijzigt. De relatie tussen toepassingsnavigatie (meestal XAML) en browsernavigatie (meestal HTML) wordt weergegeven in de volgende afbeelding:

Relatie tussen toepassingsnavigatie en browsernavigatie.

Het type inhoud dat als veilig wordt beschouwd voor een XBAP waarnaar moet worden genavigeerd, wordt voornamelijk bepaald door het gebruik van toepassingsnavigatie of browsernavigatie.

Beveiliging van toepassingsnavigatie

Toepassingsnavigatie wordt als veilig beschouwd als deze kan worden geïdentificeerd met een pack-URI, die ondersteuning biedt voor vier typen inhoud:

Inhoudstype Beschrijving URI-voorbeeld
Hulpbron Bestanden die aan een project worden toegevoegd met een buildtype Resource. pack://application:,,,/MyResourceFile.xaml
Inhoud Bestanden die aan een project worden toegevoegd met een buildtype van Inhoud. pack://application:,,,/MyContentFile.xaml
Oorsprongsite Bestanden die aan een project worden toegevoegd met een buildtype None. pack://siteoforigin:,,,/MySiteOfOriginFile.xaml
Toepassingscode XAML-resources met een gecompileerde codeachter.

– of –

XAML-bestanden die worden toegevoegd aan een project met een buildtype van Page.
pack://application:,,,/MyResourceFile .xaml

Opmerking

Zie WPF-toepassingsresource, -inhoud en gegevensbestandenvoor meer informatie over toepassingsgegevensbestanden en pakket-URI's.

Bestanden van deze inhoudstypen kunnen worden genavigeerd door de gebruiker of programmatisch:

  • gebruikersnavigatie. De gebruiker navigeert door op een Hyperlink element te klikken.

  • Programmatische Navigatie. De toepassing navigeert zonder tussenkomst van de gebruiker, bijvoorbeeld door de eigenschap NavigationWindow.Source in te stellen.

Browsernavigatiebeveiliging

Browsernavigatie wordt alleen als veilig beschouwd onder de volgende omstandigheden:

  • gebruikersnavigatie. De gebruiker navigeert door te klikken op een Hyperlink element dat zich in de hoofd-NavigationWindowbevindt, niet in een geneste Frame.

  • Zone. De inhoud die wordt genavigeerd, bevindt zich op internet of het lokale intranet.

  • Protocol. Het gebruikte protocol is ofwel http-, https-, bestandof mailto.

Als een XBAP probeert te navigeren naar inhoud op een manier die niet aan deze voorwaarden voldoet, wordt er een SecurityException gegenereerd.

Beveiligingsinstellingen voor webnavigatiesoftware

De beveiligingsinstellingen op uw computer bepalen welke toegang wordt verleend aan alle webbrowsers. Browsesoftware bevat toepassingen of onderdelen die gebruikmaken van de WinINet- of UrlMon API's, waaronder Internet Explorer en PresentationHost.exe.

Internet Explorer biedt een mechanisme waarmee u de functionaliteit kunt configureren die mag worden uitgevoerd door of vanuit Internet Explorer, waaronder:

  • .NET Framework-afhankelijke onderdelen

  • ActiveX-besturingselementen en -invoegtoepassingen

  • Downloaden

  • Scripts schrijven

  • Gebruikersverificatie

De verzameling van functionaliteit die op deze manier kan worden beveiligd, wordt per zone geconfigureerd voor de Internet, Intranet, vertrouwde sitesen beperkte sites zones. In de volgende stappen wordt beschreven hoe u uw beveiligingsinstellingen configureert:

  1. Open het Configuratiescherm.

  2. Klik op netwerk- en internet- en klik vervolgens op internetopties.

    Het dialoogvenster Internetopties wordt weergegeven.

  3. Selecteer op het tabblad Beveiliging de zone waarvoor u de beveiligingsinstellingen wilt configureren.

  4. Klik op de knop Aangepast niveau.

    Het dialoogvenster Beveiligingsinstellingen wordt weergegeven en u kunt de beveiligingsinstellingen voor de geselecteerde zone configureren.

    Schermopname van het dialoogvenster Beveiligingsinstellingen.

Opmerking

U kunt ook naar het dialoogvenster Internetopties gaan vanuit Internet Explorer. Klik op Extra en klik vervolgens op Internetopties.

Vanaf Windows Internet Explorer 7 zijn de volgende beveiligingsinstellingen voor .NET Framework opgenomen:

  • Los XAML. Hiermee bepaalt u of Internet Explorer naar en losse XAML-bestanden kan navigeren. (Opties voor inschakelen, uitschakelen en vragen om bevestiging).

  • XAML-browsertoepassingen. Hiermee bepaalt u of Internet Explorer naar XBAPs kan navigeren en uitvoeren. (Opties voor inschakelen, uitschakelen en vragen om bevestiging).

Deze instellingen zijn standaard allemaal ingeschakeld voor de Internet, Lokaal intraneten vertrouwde sites zones, en uitgeschakeld voor de beperkte sites zone.

Naast de beveiligingsinstellingen die beschikbaar zijn via internetopties, zijn de volgende registerwaarden beschikbaar voor het selectief blokkeren van een aantal beveiligingsgevoelige WPF-functies. De waarden worden gedefinieerd onder de volgende sleutel:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\Windows Presentation Foundation\Features

De volgende tabel bevat de waarden die kunnen worden ingesteld.

Waardenaam Waardetype Waardegegevens
XBAPDisallow REG_DWORD 1 te weigeren; 0 om toe te staan.
LosseXamlVerboden REG_DWORD 1 te weigeren; 0 om toe te staan.
WebBrowserBlokkeren REG_DWORD 1 te weigeren; 0 om toe te staan.
MediaAudioVerbieden REG_DWORD 1 te weigeren; 0 om toe te staan.
MediaAfbeeldingVerbieden REG_DWORD 1 te weigeren; 0 om toe te staan.
MediaVideoVerbied REG_DWORD 1 te weigeren; 0 om toe te staan.
ScriptInteropVerboden REG_DWORD 1 te weigeren; 0 om toe te staan.

Webbrowserbesturing en functie-instellingen

Het besturingselement WPF WebBrowser kan worden gebruikt voor het hosten van webinhoud. Het WPF WebBrowser besturingselement omsluit het onderliggende WebBrowser ActiveX-besturingselement. WPF biedt enige ondersteuning voor het beveiligen van uw toepassing wanneer u het WPF-WebBrowser-besturingselement gebruikt om niet-vertrouwde webinhoud te hosten. Sommige beveiligingsfuncties moeten echter rechtstreeks door de toepassingen worden toegepast met behulp van het besturingselement WebBrowser. Zie WebBrowser Control Overviews and Tutorialsvoor meer informatie over het WebBrowser ActiveX-besturingselement.

Opmerking

Deze sectie is ook van toepassing op het besturingselement Frame omdat het de WebBrowser gebruikt om naar HTML-inhoud te navigeren.

Als het WPF-besturingselement WebBrowser wordt gebruikt om niet-vertrouwde webinhoud te hosten, moet uw toepassing een gedeeltelijk vertrouwen AppDomain gebruiken om te helpen uw toepassingscode te isoleren van mogelijk schadelijke HTML-scriptcode. Dit geldt met name als uw toepassing communiceert met het gehoste script met behulp van de methode InvokeScript en de eigenschap ObjectForScripting. Zie WPF Add-Ins Overviewvoor meer informatie.

Als uw toepassing gebruikmaakt van het WPF-WebBrowser-besturingselement, kunt u de beveiliging verbeteren en aanvallen beperken door internet Explorer-functiebesturingselementen in te schakelen. Functiebesturingselementen zijn toevoegingen aan Internet Explorer waarmee beheerders en ontwikkelaars functies van Internet Explorer en toepassingen kunnen configureren die als host fungeren voor het ActiveX-besturingselement webbrowser, dat door het WPF-WebBrowser-besturingselement wordt verpakt. Functiebesturingselementen kunnen worden geconfigureerd met behulp van de functie CoInternetSetFeatureEnabled of door waarden in het register te wijzigen. Zie Inleiding tot functiebesturingselementen en besturingselementen voor internetfunctiesvoor meer informatie over functiebesturingselementen.

Als u een zelfstandige WPF-toepassing ontwikkelt die gebruikmaakt van het besturingselement WPF WebBrowser, schakelt WPF automatisch de volgende functiebesturingselementen voor uw toepassing in.

Functiebeheer
FEATURE_MIME_HANDLING
FEATURE_MIME_SNIFFING
FEATURE_OBJECT_CACHING
FEATURE_SAFE_BINDTOOBJECT
FUNCTIE_VENSTER_BEPERKINGEN
KENMERK_ZONEVERHOGING
FUNCTIE_BEperk_bestandsdownload
FEATURE_RESTRICT_ACTIVEXINSTALL
FUNCTIE_ADDON_BEHEER
FUNCTIE_HTTP_GEBRUIKERSNAAM_WACHTWOORD_DEACTIVEREN
FUNCTIE_BEVEILIGINGSBAND
Kenmerk_UNC_OpslaanBestandscontrole
FEATURE_VALIDATE_NAVIGATE_URL
FUNCTIE_UITSCHAKELEN_TELNET_PROTOCOL
FEATURE_WEBOC_POPUPMANAGEMENT
FUNCTIE_UITSCHAKELEN_OUDE_COMPRESSIE
FEATURE_SSLUX

Omdat deze functiebesturingselementen onvoorwaardelijk zijn ingeschakeld, kan een toepassing met volledige vertrouwensmachtigingen hierdoor worden beperkt. Als er in dit geval geen beveiligingsrisico is voor de specifieke toepassing en de inhoud die deze host, kan het bijbehorende functiebeheer worden uitgeschakeld.

Functiebesturingselementen worden toegepast door het proces dat het WebBrowser ActiveX-object instantieert. Als u daarom een zelfstandige toepassing maakt die naar niet-vertrouwde inhoud kan navigeren, kunt u overwegen om aanvullende functiebesturingselementen in te schakelen.

Opmerking

Deze aanbeveling is gebaseerd op algemene aanbevelingen voor MSHTML- en SHDOCVW-hostbeveiliging. Zie De veelgestelde vragen over MSHTML-hostbeveiliging: deel I van II en De veelgestelde vragen over MSHTML-hostbeveiliging: deel II van II.

Voor uw uitvoerbare bestand kunt u de volgende functiebesturingselementen inschakelen door de registerwaarde in te stellen op 1.

Functiebeheer
FEATURE_ACTIVEX_HERBESTEMMINGDETECTIE
FEATURE_BLOCK_LMZ_IMG
FEATURE_BLOCK_LMZ_OBJECT
FEATURE_BLOCK_LMZ_SCRIPT
FEATURE_RESTRICT_RES_TO_LMZ
FEATURE_RESTRICT_ABOUT_PROTOCOL_IE7
FUNCTIE_TOON_APP_PROTOCOL_WAARSCHUWINGS_DIALOOG
FUNCTIE_LOKALEMACHINE_VERGRENDELING
FUNCTIE_FORCEER_ADRES_EN_STATUS
FUNCTIE_BEPERKTE_ZONE_WANNEER_BESTAND_NIET_GEVONDEN

Voor het uitvoerbare bestand kunt u het volgende functiebeheer uitschakelen door de registerwaarde in te stellen op 0.

Functiebeheer
FUNCTIE_INSCHAKELEN_SCRIPT_PASTE_URLACTIE_BIJ_PROMPT

Als u een gedeeltelijk vertrouwde XAML-browsertoepassing (XBAP) uitvoert die een WPF WebBrowser-besturingselement bevat in Windows Internet Explorer, host WPF het ActiveX-besturingselement WebBrowser binnen de adresruimte van het Internet Explorer-proces. Omdat het ActiveX-besturingselement WebBrowser wordt gehost in het Internet Explorer-proces, zijn alle functiebesturingselementen voor Internet Explorer ook ingeschakeld voor het ActiveX-besturingselement WebBrowser.

XBAPs die worden uitgevoerd in Internet Explorer krijgen ook een extra beveiligingsniveau in vergelijking met normale zelfstandige toepassingen. Deze extra beveiliging komt doordat Internet Explorer, en daarom het ActiveX-besturingselement WebBrowser, standaard wordt uitgevoerd in de beveiligde modus op Windows Vista en Windows 7. Zie Understanding and Working in Protected Mode Internet Explorervoor meer informatie over de beveiligde modus.

Opmerking

Als u probeert een XBAP uit te voeren met een WPF-WebBrowser besturingselement in Firefox, terwijl u zich in de internetzone bevindt, wordt er een SecurityException gegenereerd. Dit komt door WPF-beveiligingsbeleid.

APTCA-assembly's uitschakelen voor gedeeltelijk vertrouwde clienttoepassingen

Wanneer beheerde assembly's worden geïnstalleerd in de algemene assemblycache (GAC), worden ze volledig vertrouwd omdat de gebruiker expliciete machtigingen moet verlenen om ze te installeren. Omdat ze volledig vertrouwd zijn, kunnen alleen volledig vertrouwde beheerde clienttoepassingen ze gebruiken. Als u wilt toestaan dat gedeeltelijk vertrouwde toepassingen deze kunnen gebruiken, moeten ze worden gemarkeerd met de AllowPartiallyTrustedCallersAttribute (APTCA). Alleen assemblies die zijn getest op veiligheid voor uitvoering in een gedeeltelijk vertrouwensniveau, moeten worden gemarkeerd met dit kenmerk.

Het is echter mogelijk dat een APTCA-assembly een beveiligingsfout vertoont nadat deze in de GAC is geïnstalleerd. Zodra een beveiligingsfout is gedetecteerd, kunnen assembly-uitgevers een beveiligingsupdate produceren om het probleem op bestaande installaties op te lossen en om te beschermen tegen installaties die kunnen optreden nadat het probleem is gedetecteerd. Een optie voor de update is het verwijderen van de assembly, hoewel dat andere volledig vertrouwde clienttoepassingen die gebruikmaken van de assembly kunnen breken.

WPF biedt een mechanisme waarmee een APTCA-assembly kan worden uitgeschakeld voor gedeeltelijk vertrouwde XBAPs zonder de APTCA-assembly te verwijderen.

Als u een APTCA-assembly wilt uitschakelen, moet u een speciale registersleutel maken:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\policy\APTCA\<AssemblyFullName>, FileVersion=<AssemblyFileVersion>

Hieronder ziet u een voorbeeld:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\policy\APTCA\aptcagac, Version=1.0.0.0, Culture=neutral, PublicKeyToken=215e3ac809a0fea7, FileVersion=1.0.0.0

Met deze sleutel wordt een vermelding voor de APTCA-assembly tot stand gebracht. U moet ook een waarde maken in deze sleutel waarmee de assembly wordt ingeschakeld of uitgeschakeld. Hier volgen de details van de waarde:

  • Waardenaam: APTCA_FLAG.

  • Waardetype: REG_DWORD.

  • Waardegegevens: 1 om uit te schakelen; 0 inschakelen.

Als een assembly moet worden uitgeschakeld voor gedeeltelijk vertrouwde clienttoepassingen, kunt u een update schrijven waarmee de registersleutel en -waarde worden gemaakt.

Opmerking

Core .NET Framework-assembly's worden niet beïnvloed door ze op deze manier uit te schakelen, omdat ze vereist zijn om beheerde toepassingen uit te voeren. Ondersteuning voor het uitschakelen van APTCA-assembly's is voornamelijk gericht op toepassingen van derden.

Sandbox-gedrag voor losse XAML-bestanden

Losse XAML-bestanden zijn uitsluitend markup XAML-bestanden die niet afhankelijk zijn van code-behind, gebeurtenishandler of toepassingsspecifieke assembly. Wanneer er naar losse XAML-bestanden rechtstreeks vanuit de browser wordt genavigeerd, worden ze geladen in een beveiligingssandbox op basis van de standaardmachtigingen voor de internetzone.

Het beveiligingsgedrag verschilt echter wanneer losse XAML-bestanden worden genavigeerd naar een NavigationWindow of Frame in een zelfstandige toepassing.

In beide gevallen neemt het losse XAML-bestand dat wordt genavigeerd de machtigingen van de hosttoepassing over. Dit gedrag kan echter ongewenst zijn vanuit een beveiligingsperspectief, met name als een los XAML-bestand is geproduceerd door een entiteit die niet vertrouwd of onbekend is. Deze type inhoud staat bekend als externe inhoud, en zowel Frame als NavigationWindow kunnen worden geconfigureerd om deze inhoud te isoleren bij het navigeren er naartoe. Isolatie wordt bereikt door de eigenschap SandboxExternalContent op true in te stellen, zoals wordt weergegeven in de volgende voorbeelden voor Frame en 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>

Met deze instelling wordt externe inhoud geladen in een proces dat losstaat van het proces dat als host fungeert voor de toepassing. Dit proces is beperkt tot de standaardmachtigingsset voor de internetzone, zodat deze effectief wordt geïsoleerd van de hostingtoepassing en de clientcomputer.

Opmerking

Hoewel navigatie om XAML-bestanden los te maken van een NavigationWindow of Frame in een zelfstandige toepassing wordt geïmplementeerd op basis van de hostinfrastructuur van de WPF-browser, waarbij het PresentationHost-proces wordt betrokken, is het beveiligingsniveau iets minder dan wanneer de inhoud rechtstreeks in Internet Explorer op Windows Vista en Windows 7 wordt geladen (die nog steeds via PresentationHost zou worden uitgevoerd). Dit komt doordat een zelfstandige WPF-toepassing met behulp van een webbrowser niet de extra beveiligingsfunctie voor de beveiligde modus van Internet Explorer biedt.

Bronnen voor het ontwikkelen van WPF-toepassingen die de beveiliging bevorderen

Hier volgen enkele aanvullende bronnen om WPF-toepassingen te ontwikkelen die de beveiliging bevorderen:

Gebied Hulpbron
Beheerde code beveiligingsrichtlijnen voor patronen en praktijken voor applicaties
CAS Toegangsbeveiliging van Code
ClickOnce ClickOnce-Beveiliging en Implementatie
WPF (Windows Presentation Foundation) WPF Beveiliging onder Gedeeltelijk Vertrouwen

Zie ook