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 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ń 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:
Ustawienia zabezpieczeń oprogramowania przeglądania sieci Web
Wyłączanie zestawów APTCA dla częściowo zaufanych aplikacji klienckich
Zasoby do tworzenia aplikacji WPF, które promują bezpieczeństwo
Bezpieczna nawigacja
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:
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.
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
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ń:
Otwórz Panel sterowania.
Kliknij pozycję Sieć i Internet , a następnie kliknij pozycję Opcje internetowe.
Zostanie wyświetlone okno dialogowe Opcje internetowe.
Na karcie Zabezpieczenia wybierz strefę, dla których chcesz skonfigurować ustawienia zabezpieczeń.
Kliknij przycisk Poziom niestandardowy.
Zostanie wyświetlone okno dialogowe Ustawienia zabezpieczeń i można skonfigurować ustawienia zabezpieczeń dla wybranej strefy.
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.
Ustawienia rejestru WPF związane z zabezpieczeniami
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 Frame NavigationWindow 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ż
- Zabezpieczenie częściowej relacji zaufania WPF
- Strategia zabezpieczeń WPF — zabezpieczenia platformy
- Strategia zabezpieczeń WPF — projekt zabezpieczeń
- Wzorce i praktyki — wskazówki dotyczące zabezpieczeń dla aplikacji
- Zabezpieczenia dostępu kodu
- Wskazówki dotyczące wdrażania i zabezpieczeń ClickOnce
- XAML w WPF
.NET Desktop feedback