Zabezpieczenia (WPF)

Podczas tworzenia autonomicznych aplikacji programu Windows Presentation Foundation (WPF) i hostowanych w przeglądarce należy wziąć pod uwagę model zabezpieczeń. Autonomiczne aplikacje WPF są wykonywane z nieograniczonymi uprawnieniami (zestaw uprawnień CASFullTrust ), czy wdrożono przy użyciu Instalatora Windows (.msi), XCopy lub ClickOnce. Wdrażanie częściowo zaufanych, autonomicznych aplikacji WPF za pomocą technologii ClickOnce jest nieobsługiwane. Jednak aplikacja hosta o pełnym zaufaniu może utworzyć częściowe zaufanie AppDomain przy użyciu modelu dodatku .NET Framework. Aby uzyskać więcej informacji, zobacz Omówienie dodatków WPF.

Aplikacje hostowane w przeglądarce WPF są hostowane przez program Windows Internet Explorer lub Firefox i mogą być aplikacjami przeglądarki XAML (XBAPs) lub luźnymi dokumentami extensible Application Markup Language (XAML), aby uzyskać więcej informacji, zobacz WPF XAML Browser Applications Overview (Omówienie aplikacji przeglądarki WPF XAML).

Ostrzeżenie

XBAPs wymagają obsługi starszych przeglądarek, takich jak Internet Explorer i Firefox. Te starsze wersje przeglądarki są zwykle nieobsługiwane w systemach Windows 10 i Windows 11. Nowoczesne przeglądarki nie obsługują już technologii wymaganej dla aplikacji XBAP ze względu na zagrożenia bezpieczeństwa. Wtyczki obsługujące XBAPs nie są już obsługiwane.

Aplikacje hostowane w przeglądarce WPF są domyślnie wykonywane w piaskownicy zabezpieczeń częściowego zaufania, która jest ograniczona do domyślnego zestawu uprawnień strefy internetowej CAS. Dzięki temu aplikacje hostowane w przeglądarce WPF są odizolowane od komputera klienckiego w taki sam sposób, jak w przypadku typowych aplikacji internetowych. XBAP może podnieść poziom uprawnień do pełnego zaufania, w zależności od strefy zabezpieczeń adresu URL wdrożenia i konfiguracji zabezpieczeń klienta. Aby uzyskać więcej informacji, zobacz Zabezpieczenia częściowego zaufania WPF.

W tym temacie omówiono model zabezpieczeń dla autonomicznych aplikacji programu Windows Presentation Foundation (WPF) i hostowanych w przeglądarce.

Ten temat zawiera następujące sekcje:

Nawigacja Sejf

W przypadku XBAPs WPF rozróżnia dwa typy nawigacji: aplikację i przeglądarkę.

Nawigacja po aplikacji to nawigacja między elementami zawartości w aplikacji hostowanej przez przeglądarkę. Nawigacja w przeglądarce to nawigacja , która zmienia adres URL zawartości i lokalizacji samej przeglądarki. Relacja między nawigacją aplikacji (zazwyczaj XAML) i nawigacją w przeglądarce (zazwyczaj HTML) jest pokazana na poniższej ilustracji:

Relationship between application navigation and browser navigation.

Typ zawartości, która jest uważana za bezpieczną dla XBAP do przechodzenia do, jest określana głównie przez to, czy jest używana nawigacja aplikacji, czy nawigacja w przeglądarce.

Zabezpieczenia nawigacji aplikacji

Nawigacja aplikacji jest uważana za bezpieczną, jeśli można ją zidentyfikować za pomocą identyfikatora URI pakietu, który obsługuje cztery typy zawartości:

Typ zawartości opis Przykład identyfikatora URI
Zasób Pliki dodawane do projektu z typem kompilacji Zasób. pack://application:,,,/MyResourceFile.xaml
Zawartość Pliki dodawane do projektu z typem kompilacji Zawartość. pack://application:,,,/MyContentFile.xaml
Miejsce pochodzenia Pliki dodawane do projektu z typem kompilacji None. pack://siteoforigin:,,,/MySiteOfOriginFile.xaml
Kod aplikacji Zasoby XAML, które mają skompilowany kod w tle.

— lub —

Pliki XAML dodawane do projektu z typem kompilacji Page.
pack://application:,,,/MyResourceFile .xaml

Uwaga

Aby uzyskać więcej informacji na temat plików danych aplikacji i identyfikatorów URI pakietów, zobacz Zasoby aplikacji WPF, Zawartość i Pliki danych.

Pliki tych typów zawartości można przechodzić do użytkownika lub programowo:

  • Nawigacja użytkownika. Użytkownik przechodzi przez kliknięcie Hyperlink elementu.

  • Nawigacja programowa. Aplikacja przechodzi bez udziału użytkownika, na przykład przez ustawienie NavigationWindow.Source właściwości.

Zabezpieczenia nawigacji przeglądarki

Nawigacja w przeglądarce jest uważana za bezpieczną tylko w następujących warunkach:

  • Nawigacja użytkownika. Użytkownik przechodzi przez kliknięcie Hyperlink elementu znajdującego się w obrębie głównego NavigationWindowobiektu , a nie w zagnieżdżonym Frameobiekcie .

  • Strefa. Zawartość, do która jest przenoszona, znajduje się w Internecie lub w lokalnym intranecie.

  • Protokół. Używany protokół to http, https, file lub mailto.

Jeśli XBAP próbuje przejść do zawartości w sposób, który nie jest zgodny z tymi warunkami, SecurityException zostanie zgłoszony.

Zabezpieczenia oprogramowania przeglądania sieci Web Ustawienia

Ustawienia zabezpieczeń na komputerze określają, czy udzielono dostępu do dowolnego oprogramowania do przeglądania sieci Web. Oprogramowanie do przeglądania sieci Web obejmuje dowolną aplikację lub składnik korzystający z interfejsów API WinINet lub UrlMon , w tym internet Explorer i PresentationHost.exe.

Program Internet Explorer udostępnia mechanizm, za pomocą którego można skonfigurować funkcje, które mogą być wykonywane przez program Internet Explorer lub z poziomu programu Internet Explorer, w tym następujące:

  • Składniki oparte na programie .NET Framework

  • Kontrolki ActiveX i wtyczki

  • Pobieranie

  • Obsługa skryptów

  • Uwierzytelnianie użytkowników

Kolekcja funkcji, które można zabezpieczyć w ten sposób, jest konfigurowana na podstawie strefy dla stref internetowych, intranetowych, zaufanych witryn i witryn z ograniczeniami. W poniższych krokach opisano sposób konfigurowania ustawień zabezpieczeń:

  1. Otwórz Panel sterowania.

  2. Kliknij pozycję Sieć i Internet , a następnie kliknij pozycję Opcje internetowe.

    Zostanie wyświetlone okno dialogowe Opcje internetowe.

  3. Na karcie Zabezpieczenia wybierz strefę, dla których chcesz skonfigurować ustawienia zabezpieczeń.

  4. Kliknij przycisk Poziom niestandardowy.

    Zostanie wyświetlone okno dialogowe Zabezpieczenia Ustawienia i można skonfigurować ustawienia zabezpieczeń dla wybranej strefy.

    Screenshot that shows the Security Settings dialog box.

Uwaga

Możesz również przejść do okna dialogowego Opcje internetowe z programu Internet Explorer. Kliknij pozycję Narzędzia , a następnie kliknij pozycję Opcje internetowe.

Począwszy od programu Windows Internet Explorer 7, są dostępne następujące ustawienia zabezpieczeń przeznaczone specjalnie dla programu .NET Framework:

  • Luźne XAML. Określa, czy program Internet Explorer może przechodzić do i zwalniać pliki XAML. (Włącz, Wyłącz i Monituj opcje).

  • Aplikacje przeglądarki XAML. Określa, czy program Internet Explorer może przejść do I uruchomić XBAPs. (Włącz, Wyłącz i Monituj opcje).

Domyślnie te ustawienia są włączone dla stref Internet, Lokalny intranet i Zaufane witryny oraz wyłączone dla strefy Witryny z ograniczeniami.

Oprócz ustawień zabezpieczeń dostępnych za pośrednictwem opcji internetowych następujące wartości rejestru są dostępne do selektywnego blokowania wielu funkcji WPF z uwzględnieniem zabezpieczeń. Wartości są definiowane w ramach następującego klucza:

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

W poniższej tabeli wymieniono wartości, które można ustawić.

Nazwa wartości Typ wartości Dane wartości
XBAPDisallow REG_DWORD 1, aby nie zezwalać; 0, aby zezwolić.
LooseXamlDisallow REG_DWORD 1, aby nie zezwalać; 0, aby zezwolić.
WebBrowserDisallow REG_DWORD 1, aby nie zezwalać; 0, aby zezwolić.
MediaAudioDisallow REG_DWORD 1, aby nie zezwalać; 0, aby zezwolić.
MediaImageDisallow REG_DWORD 1, aby nie zezwalać; 0, aby zezwolić.
MediaVideoDisallow REG_DWORD 1, aby nie zezwalać; 0, aby zezwolić.
ScriptInteropDisallow REG_DWORD 1, aby nie zezwalać; 0, aby zezwolić.

Kontrolka WebBrowser i kontrolki funkcji

Kontrolka WPF WebBrowser może służyć do hostowania zawartości sieci Web. Kontrolka WPF WebBrowser opakowuje podstawową kontrolkę ActiveX WebBrowser. Platforma WPF zapewnia obsługę zabezpieczania aplikacji w przypadku korzystania z kontrolki WPF WebBrowser do hostowania niezaufanej zawartości sieci Web. Jednak niektóre funkcje zabezpieczeń muszą być stosowane bezpośrednio przez aplikacje przy użyciu kontrolki WebBrowser . Aby uzyskać więcej informacji na temat kontrolki ActiveX WebBrowser, zobacz WebBrowser Control Overviews and Tutorials (Omówienie i samouczki kontrolki WebBrowser).

Uwaga

Ta sekcja dotyczy również kontrolki Frame , ponieważ używa WebBrowser jej do przechodzenia do zawartości HTML.

Jeśli kontrolka WPF WebBrowser jest używana do hostowania niezaufanej zawartości sieci Web, aplikacja powinna używać częściowego zaufania AppDomain , aby ułatwić izolowanie kodu aplikacji przed potencjalnie złośliwym kodem skryptu HTML. Jest to szczególnie istotne, jeśli aplikacja wchodzi w interakcję ze skryptem hostowanym przy użyciu InvokeScript metody i ObjectForScripting właściwości . Aby uzyskać więcej informacji, zobacz Omówienie dodatków WPF.

Jeśli aplikacja używa kontrolki WPF WebBrowser , innym sposobem na zwiększenie bezpieczeństwa i eliminowanie ataków jest włączenie kontrolek funkcji programu Internet Explorer. Kontrolki funkcji są dodatkiem do programu Internet Explorer, który umożliwia administratorom i deweloperom konfigurowanie funkcji programu Internet Explorer i aplikacji hostujących kontrolkę ActiveX WebBrowser, która opakowuje kontrolkę WPF WebBrowser . Kontrolki funkcji można skonfigurować za pomocą funkcji CoInternetSetFeatureEnabled lub zmieniając wartości w rejestrze. Aby uzyskać więcej informacji na temat kontrolek funkcji, zobacz Wprowadzenie do kontrolek funkcji i kontrolek funkcji internetowych.

Jeśli tworzysz autonomiczną aplikację WPF korzystającą z kontrolki WPF, platforma WPF WebBrowser automatycznie włącza następujące kontrolki funkcji dla aplikacji.

Kontrolka funkcji
FEATURE_MIME_HANDLING
FEATURE_MIME_SNIFFING
FEATURE_OBJECT_CACHING
FEATURE_SAFE_BINDTOOBJECT
FEATURE_WINDOW_RESTRICTIONS
FEATURE_ZONE_ELEVATION
FEATURE_RESTRICT_FILEDOWNLOAD
FEATURE_RESTRICT_ACTIVEXINSTALL
FEATURE_ADDON_MANAGEMENT
FEATURE_HTTP_USERNAME_PASSWORD_DISABLE
FEATURE_SECURITYBAND
FEATURE_UNC_SAVEDFILECHECK
FEATURE_VALIDATE_NAVIGATE_URL
FEATURE_DISABLE_TELNET_PROTOCOL
FEATURE_WEBOC_POPUPMANAGEMENT
FEATURE_DISABLE_LEGACY_COMPRESSION
FEATURE_SSLUX

Ponieważ te kontrolki funkcji są włączone bezwarunkowo, aplikacja o pełnym zaufaniu może być przez nie osłabiona. W takim przypadku, jeśli nie ma ryzyka zabezpieczeń dla określonej aplikacji i zawartości, która jest hostowana, odpowiednia kontrolka funkcji może być wyłączona.

Kontrolki funkcji są stosowane przez proces tworzenia wystąpienia obiektu ActiveX WebBrowser. W związku z tym, jeśli tworzysz autonomiczną aplikację, która może przejść do niezaufanej zawartości, należy poważnie rozważyć włączenie dodatkowych kontrolek funkcji.

Uwaga

To zalecenie jest oparte na ogólnych zaleceniach dotyczących zabezpieczeń hosta MSHTML i SHDOCVW. Aby uzyskać więcej informacji, zobacz Często zadawane pytania dotyczące zabezpieczeń hosta MSHTML: część I ii i często zadawane pytania dotyczące zabezpieczeń hosta MSHTML: część II.

W przypadku pliku wykonywalnego rozważ włączenie następujących kontrolek funkcji, ustawiając wartość rejestru na 1.

Kontrolka funkcji
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
FEATURE_RESTRICTED_ZONE_WHEN_FILE_NOT_FOUND

W przypadku pliku wykonywalnego rozważ wyłączenie następującej kontrolki funkcji, ustawiając wartość rejestru na 0.

Kontrolka funkcji
FEATURE_ENABLE_SCRIPT_PASTE_URLACTION_IF_PROMPT

W przypadku uruchomienia częściowo zaufanej aplikacji przeglądarki XAML (XBAP), która zawiera kontrolkę WPF WebBrowser w programie Windows Internet Explorer, WPF hostuje kontrolkę ActiveX WebBrowser w przestrzeni adresowej procesu programu Internet Explorer. Ponieważ kontrolka ActiveX WebBrowser jest hostowana w procesie programu Internet Explorer, wszystkie kontrolki funkcji dla programu Internet Explorer są również włączone dla kontrolki ActiveX WebBrowser.

XBAPs działające w programie Internet Explorer również uzyskać dodatkowy poziom zabezpieczeń w porównaniu z normalnymi aplikacjami autonomicznymi. To dodatkowe zabezpieczenia wynika z tego, że program Internet Explorer, a zatem kontrolka ActiveX WebBrowser domyślnie działa w trybie chronionym w systemach Windows Vista i Windows 7. Aby uzyskać więcej informacji na temat trybu chronionego, zobacz Opis i praca w trybie chronionym w programie Internet Explorer.

Uwaga

Jeśli spróbujesz uruchomić XBAP, który zawiera kontrolkę WPF WebBrowser w przeglądarce Firefox, podczas gdy w strefie internetowej, SecurityException zostanie zgłoszony. Jest to spowodowane zasadami zabezpieczeń WPF.

Wyłączanie zestawów APTCA dla częściowo zaufanych aplikacji klienckich

Gdy zarządzane zestawy są instalowane w globalnej pamięci podręcznej zestawów (GAC), stają się w pełni zaufane, ponieważ użytkownik musi podać jawne uprawnienia do ich instalowania. Ponieważ są one w pełni zaufane, tylko w pełni zaufane aplikacje klienckie mogą ich używać. Aby umożliwić korzystanie z nich częściowo zaufanym aplikacjom, należy je oznaczyć za AllowPartiallyTrustedCallersAttribute pomocą (APTCA). Do wykonania w częściowym zaufaniu powinny być oznaczone tylko zestawy, które zostały przetestowane pod kątem bezpieczeństwa.

Istnieje jednak możliwość, aby zestaw APTCA wykazywał wadę zabezpieczeń po zainstalowaniu w GAC . Po wykryciu wady zabezpieczeń wydawcy zestawów mogą utworzyć aktualizację zabezpieczeń, aby rozwiązać problem w istniejących instalacjach, oraz chronić przed instalacjami, które mogą wystąpić po wykryciu problemu. Jedną z opcji aktualizacji jest odinstalowanie zestawu, chociaż może to spowodować przerwanie innych w pełni zaufanych aplikacji klienckich korzystających z zestawu.

WPF zapewnia mechanizm, za pomocą którego zestaw APTCA może być wyłączony dla częściowo zaufanych XBAPs bez odinstalowywania zestawu APTCA.

Aby wyłączyć zestaw APTCA, należy utworzyć specjalny klucz rejestru:

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

Poniżej przedstawiono przykład:

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

Ten klucz ustanawia wpis dla zestawu APTCA. Musisz również utworzyć wartość w tym kluczu, która włącza lub wyłącza zestaw. Poniżej przedstawiono szczegóły wartości:

  • Nazwa wartości: APTCA_FLAG.

  • Typ wartości: REG_DWORD.

  • Dane wartości: 1 , aby wyłączyć; 0 , aby włączyć.

Jeśli zestaw musi być wyłączony dla częściowo zaufanych aplikacji klienckich, możesz napisać aktualizację, która tworzy klucz rejestru i wartość.

Uwaga

Nie ma to wpływu na podstawowe zestawy programu .NET Framework, wyłączając je w ten sposób, ponieważ są one wymagane do uruchamiania aplikacji zarządzanych. Obsługa wyłączania zestawów APTCA jest przeznaczona głównie dla aplikacji innych firm.

Zachowanie piaskownicy dla luźnych plików XAML

Luźne pliki XAML są plikami XAML, które nie zależą od kodu, programu obsługi zdarzeń ani zestawu specyficznego dla aplikacji. Gdy luźne pliki XAML są przekazywane bezpośrednio z przeglądarki, są ładowane w piaskownicy zabezpieczeń na podstawie domyślnego zestawu uprawnień strefy internetowej.

Jednak zachowanie zabezpieczeń różni się w przypadku przechodzenia do luźnych plików XAML z aplikacji NavigationWindow autonomicznej lub Frame w niej.

W obu przypadkach luźny plik XAML, który jest przechodzi do dziedziczenia uprawnień aplikacji hosta. Jednak to zachowanie może być niepożądane z punktu widzenia zabezpieczeń, szczególnie jeśli luźny plik XAML został utworzony przez jednostkę, która nie jest zaufana lub nieznana. Ten typ zawartości jest nazywany zawartością zewnętrzną i FrameNavigationWindow można go skonfigurować do izolowania podczas przechodzenia do. Izolacja jest osiągana przez ustawienie właściwości SandboxExternalContent na true, jak pokazano w poniższych przykładach dla Frame i 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>

Dzięki temu ustawieniu zawartość zewnętrzna zostanie załadowana do procesu, który jest oddzielony od procesu hostowania aplikacji. Ten proces jest ograniczony do domyślnego zestawu uprawnień strefy internetowej, skutecznie izolując go z aplikacji hostingu i komputera klienckiego.

Uwaga

Mimo że nawigacja w celu poluzowania plików XAML z NavigationWindow aplikacji autonomicznej lub Frame w aplikacji autonomicznej jest implementowana na podstawie infrastruktury hostingu przeglądarki WPF, obejmującej proces PresentationHost, poziom zabezpieczeń jest nieco mniejszy niż w przypadku, gdy zawartość jest ładowana bezpośrednio w programie Internet Explorer w systemach Windows Vista i Windows 7 (które nadal odbywałyby się za pośrednictwem elementu PresentationHost). Dzieje się tak, ponieważ autonomiczna aplikacja WPF korzystająca z przeglądarki sieci Web nie zapewnia dodatkowej funkcji zabezpieczeń trybu chronionego w programie Internet Explorer.

Zasoby do tworzenia aplikacji WPF, które promują bezpieczeństwo

Poniżej przedstawiono kilka dodatkowych zasobów ułatwiających opracowywanie aplikacji WPF, które promują bezpieczeństwo:

Obszar Zasób
Kod zarządzany Wzorce i praktyki — wskazówki dotyczące zabezpieczeń dla aplikacji
CAS Zabezpieczenia dostępu kodu
ClickOnce Wskazówki dotyczące wdrażania i zabezpieczeń ClickOnce
WPF Zabezpieczenie częściowej relacji zaufania WPF

Zobacz też