Udostępnij za pośrednictwem


Zabezpieczenia (WPF)

Podczas tworzenia autonomicznych i hostowanych w przeglądarce aplikacji programu Windows Presentation Foundation (WPF) należy wziąć pod uwagę model zabezpieczeń. Aplikacje autonomiczne WPF są wykonywane z nieograniczonymi uprawnieniami (zestaw uprawnień CASFullTrust), niezależnie od tego, czy zostały wdrożone przy użyciu Instalatora Windows (.msi), XCopy lub ClickOnce. Wdrażanie częściowo zaufanych, samodzielnych aplikacji WPF za pomocą technologii ClickOnce jest nieobsługiwane. Jednak aplikacja hosta o pełnym zaufaniu może utworzyć AppDomain o częściowym zaufaniu z wykorzystaniem modelu dodatków .NET Framework. Aby uzyskać więcej informacji, zobacz WPF Add-Ins Overview.

Aplikacje hostowane w przeglądarce WPF są obsługiwane przez Windows Internet Explorer lub Firefox i mogą być aplikacjami przeglądarkowymi XAML (XBAP) lub luźnymi dokumentami w języku znaczników aplikacji XAML (Extensible Application Markup Language). Aby uzyskać więcej informacji, zobacz Przegląd aplikacji przeglądarki WPF XAML.

Ostrzeżenie

XBAPs wymagają obsługi starszych przeglądarek, takich jak Internet Explorer i stare wersje przeglądarki Firefox. Te starsze 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. Aby uzyskać więcej informacji, zobacz często zadawane pytania dotyczące aplikacji hostowanych w przeglądarce WPF (XBAP).

Aplikacje hostowane w przeglądarce WPF są domyślnie wykonywane w piaskownicy zabezpieczeń o częściowym zaufaniu, która ogranicza się do domyślnego zestawu uprawnień strefy Internet 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 WPF Partial Trust Security.

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:

Bezpieczna nawigacja

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

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

relacja między nawigacją aplikacji a nawigacją w przeglądarce.

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 w 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 Resource. 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

Notatka

Aby uzyskać więcej informacji na temat plików danych aplikacji i identyfikatorów URI pakietów, zobacz (WPF Application Resource, Content, and Data Files ).

Pliki tych typów zawartości mogą być nawigowane przez użytkownika lub za pomocą programów.

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

  • Programowalna Nawigacja. Aplikacja nawiguje bez udziału użytkownika, na przykład poprzez ustawienie właściwości NavigationWindow.Source.

Zabezpieczenia nawigacji przeglądarki

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

  • Nawigacja użytkownika. Użytkownik nawiguję, klikając element Hyperlink znajdujący się w głównym NavigationWindow, a nie w zagnieżdżonym Frame.

  • strefa. Zawartość, do której się nawigujesz, znajduje się w Internecie lub w lokalnym intranecie.

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

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

Ustawienia zabezpieczeń oprogramowania przeglądania sieci Web

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

  • Pobrań

  • Skryptowanie

  • Uwierzytelnianie użytkowników

Kolekcja funkcji, które można zabezpieczyć w ten sposób, jest konfigurowana na podstawie strefy dla Internet, Intranet, zaufanych witryni 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 poziomu niestandardowego.

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

    Zrzut ekranu przedstawiający okno dialogowe Ustawienia zabezpieczeń.

Notatka

Możesz również przejść do okna dialogowego Opcje internetowe z programu Internet Explorer. Kliknij narzędzia , a następnie kliknij 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 plików XAML i nimi zarządzać. (Włącz, Wyłącz i Monituj opcje).

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

Domyślnie wszystkie te ustawienia są włączone dla stref Internet, Lokalny Intraneti Zaufane Witryny, a wyłączone dla strefy Witryn 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ć.
ZabrońLooseXaml REG_DWORD 1, aby nie zezwalać; 0, aby zezwolić.
WebBrowserDisallow REG_DWORD 1, aby nie zezwalać; 0, aby zezwolić.
MediaAudioOdmowa 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 WebBrowser WPF może służyć do hostowania zawartości internetowej. Kontrolka WPF WebBrowser działa jako otoczka dla podstawowej kontrolki ActiveX WebBrowser. Platforma WPF zapewnia obsługę zabezpieczania aplikacji w przypadku używania kontrolki WebBrowser WPF do hostowania niezaufanej zawartości internetowej. Jednak niektóre funkcje zabezpieczeń muszą być stosowane bezpośrednio przez aplikacje przy użyciu kontroli WebBrowser. Aby uzyskać więcej informacji na temat kontrolki ActiveX WebBrowser, zapoznaj się z WebBrowser Control Overviews and Tutorials.

Notatka

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

Jeśli kontrolka WebBrowser WPF jest używana do hostowania niezaufanej zawartości sieci Web, aplikacja powinna użyć częściowego zaufania AppDomain, aby pomóc w odizolowaniu kodu aplikacji od potencjalnie złośliwego kodu HTML. Jest to szczególnie istotne, jeśli aplikacja wchodzi w interakcję ze skryptem hostowanym przy użyciu metody InvokeScript i właściwości ObjectForScripting. Aby uzyskać więcej informacji, zobacz WPF Add-Ins Overview.

Jeśli aplikacja korzysta z kontroli WebBrowser WPF, innym sposobem zwiększenia bezpieczeństwa i ograniczenia 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ć przy użyciu funkcji CoInternetSetFeatureEnabled lub zmieniając wartości w rejestrze. Aby uzyskać więcej informacji na temat kontrolek funkcji, zobacz Introduction to Feature Controls and Internet Feature Controls.

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

Kontrolka funkcji
FUNKCJA_OBSŁUGI_MIME
FEATURE_MIME_SNIFFING
FUNKCJA_BUFOROWANIA_OBIEKTÓW
FEATURE_SAFE_BINDTOOBJECT
OGRANICZENIA_OKNA_FUNKCJI
CECHA_STREFY_WZNIESIENIA
FEATURE_RESTRICT_FILEDOWNLOAD
FEATURE_RESTRICT_ACTIVEXINSTALL
ZARZĄDZANIE_DODATKAMI
FUNKCJA_WYŁĄCZENIE_HASŁA_NAZWY_UŻYTKOWNIKA_HTTP
FEATURE_SECURITYBAND
FUNKCJA_UNC_SPRAWDZENIEZAPISANEGOPLIKU
FEATURE_VALIDATE_NAVIGATE_URL (FUNKCJA_WERYFIKACJI_PRZENOSZENIA_ADRESU_URL)
FUNKCJA_WYŁĄCZ_PROTOKÓŁ_TELNET
FEATURE_WEBOC_POPUPMANAGEMENT
FEATURE_DISABLE_LEGACY_COMPRESSION (Wyłączenie starszej kompresji)
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 inicjujący obiekt 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.

Notatka

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
Funkcja wykrywania ponownego użycia ActiveX
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
FUNKCJA_STREFA_OGRANICZONA_GDY_PLIK_NIE_ZNALEZIONY

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

Kontrolka funkcji
FUNKCJA_WŁĄCZ_WKLEJANIE_SKRYPTU_AKTYWNOŚĆ_URL_JEŚLI_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ż uzyskują dodatkowy poziom zabezpieczeń w porównaniu ze zwykłymi, autonomicznymi aplikacjami. 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 Understanding and Working in Protected Mode (Omówienie i praca w trybie chronionym w programie Internet Explorer).

Notatka

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

Wyłączanie zestawów APTCA dla aplikacji klienckich o częściowym zaufaniu

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 pomocą AllowPartiallyTrustedCallersAttribute (APTCA). Tylko zespoły, które zostały przetestowane pod względem bezpieczeństwa do wykonania w środowisku z częściowym zaufaniem, powinny być oznaczone takim atrybutem.

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, dzięki któremu można wyłączyć zestaw APTCA dla częściowo zaufanych XBAP-ów bez konieczności jego odinstalowywania.

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 do wyłączenia; 0 do włączenia.

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

Notatka

Podstawowe zestawy programu .NET Framework nie są dotknięte wyłączeniem ich w ten sposób, ponieważ są 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 pojedyncze pliki XAML są otwierane bezpośrednio z poziomu przeglądarki, są ładowane w piaskownicy zabezpieczeń na podstawie domyślnego zestawu uprawnień strefy internetowej.

Jednak zachowanie zabezpieczeń różni się, gdy niezwiązane pliki XAML są otwierane z NavigationWindow lub Frame w samodzielnej aplikacji.

W obu przypadkach luźny plik XAML, do którego się nawiguję, dziedziczy uprawnienia swojej 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 znany jest jako zawartości zewnętrznej, a zarówno Frame, jak i NavigationWindow można skonfigurować tak, aby izolować tę zawartość 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.

Notatka

Mimo że nawigacja do niepowiązanych plików XAML z NavigationWindow lub Frame w aplikacji autonomicznej jest implementowana na podstawie infrastruktury hostingu przeglądarki WPF, obejmującej proces PresentationHost, poziom zabezpieczeń jest nieco mniejszy niż wtedy, gdy zawartość jest ładowana bezpośrednio w programie Internet Explorer w systemie Windows Vista i Windows 7 (co nadal odbywałoby się za pośrednictwem 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 wskazówki dotyczące zabezpieczeń wzorców i praktyk dla aplikacji
CAS Bezpieczeństwo Dostępu do Kodu
ClickOnce Bezpieczeństwo i wdrażanie technologii ClickOnce
WPF zabezpieczeń częściowego zaufania WPF

Zobacz też