Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
I allmänhet bör Internetprogram begränsas från att ha direkt åtkomst till kritiska systemresurser för att förhindra skadliga skador. Som standard kan skriptspråk på HTML- och klientsidan inte komma åt kritiska systemresurser. Eftersom windows Presentation Foundation-program (WPF) kan startas från webbläsaren bör de följa en liknande uppsättning begränsningar. För att tillämpa dessa begränsningar förlitar sig WPF på både Code Access Security (CAS) och ClickOnce (se WPF-säkerhetsstrategi – Plattformssäkerhet). Som standardinställning begär webbläsarprogram behörighetsuppsättningen CAS för zonen Internet, oavsett om de startas från Internet, ett lokalt intranät eller en lokal dator. Program som körs med något mindre än den fullständiga uppsättningen behörigheter sägs köras med partiellt förtroende.
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 ger en mängd olika stöd för att säkerställa att så mycket funktionalitet som möjligt kan användas på ett säkert sätt i partiellt förtroende, och tillsammans med CAS, ger ytterligare stöd för partiell förtroendeprogrammering.
Det här avsnittet innehåller följande avsnitt:
Stöd för partiellt förtroende för WPF-funktioner
Varning
Code Access Security (CAS) stöds inte av modern .NET, det är ett .NET Framework-begrepp. Alla CAS-relaterade funktioner behandlas under antagandet om fullständigt förtroende. Mer information finns i Skillnader med WPF .NET – Kodåtkomstsäkerhet.
I följande tabell visas de högnivåfunktioner i Windows Presentation Foundation (WPF) som är säkra att använda inom gränserna för behörighetsuppsättningen i zonen Internet.
Tabell 1: WPF-funktioner som är säkra i partiellt förtroende
| Funktionsområde | Egenskap |
|---|---|
| Allmänt | Webbläsarfönster Åtkomst till webbplatsens ursprung IsolatedStorage (512 KB-gräns) UIAutomation-leverantörer Bestämmande Indatametodredigerare (IME) Styluspenna och bläck för surfplattor Simulerad dra/släpp med hjälp av musavbildnings- och flytthändelser OpenFileDialog XAML-deserialisering (via XamlReader.Load) |
| Webbintegrering | Dialogruta för nedladdning av webbläsare Top-Level User-Initiated navigering mailto:länkar Parametrar för enhetlig resursidentifierare HTTPWebRequest WPF-innehåll som finns i en IFRAME Hosting av Same-Site HTML-sidor med ramteknik Hosta HTML-sidor inom samma domänområde med webbläsare Webbtjänster (ASMX) Webbtjänster (med Hjälp av Windows Communication Foundation) Skriptskrivning Dokumentobjektmodell |
| Bildmaterial | 2D och 3D Animation Media (ursprungsplats och tvärdomän) Bildbehandling/Audio/Video |
| Läsning | FlowDocuments XPS-dokument Inbäddade och systemteckensnitt CFF- och TrueType-teckensnitt |
| Redigering | Stavningskontroll RikTextBox Stöd för Klartext och Pennanteckning User-Initiated Klistra in Kopiera valt innehåll |
| Kontroller | Allmänna kontroller |
Den här tabellen beskriver WPF-funktionerna på en hög nivå. För mer detaljerad information dokumenterar Windows SDK de behörigheter som krävs av varje medlem i WPF. Dessutom har följande funktioner mer detaljerad information om körning med begränsat förtroende, inklusive speciella hänsyn.
XAML (se XAML i WPF).
Popupfönster (se System.Windows.Controls.Primitives.Popup).
Dra och släpp (se Dra och släpp översikt).
Urklipp (se System.Windows.Clipboard).
Bildbehandling (se System.Windows.Controls.Image).
Serialisering (se XamlReader.Load, XamlWriter.Save).
Dialogrutan Öppna fil (se Microsoft.Win32.OpenFileDialog).
I följande tabell beskrivs WPF-funktioner som inte är säkra att köra inom gränserna för behörighetsuppsättningen i zonen Internet.
Tabell 2: WPF-funktioner som inte är säkra i partiellt förtroende
| Funktionsområde | Egenskap |
|---|---|
| Allmänt | Fönster (programdefinierade Fönster och dialogrutor) SaveFileDialog Filsystem Registeråtkomst Dra och släpp XAML-serialisering (via XamlWriter.Save) UIAutomation-klienter Åtkomst till källfönster (HwndHost) Fullständigt talstöd Samverkan mellan Windows Forms |
| Bildmaterial | Bitmappseffekter Bildkodning |
| Redigering | RTF-format Urklipp Fullständigt XAML-stöd |
Partiell förtroendeprogrammering
För XBAP-program har kod som överskrider standardbehörighetsuppsättningen olika beteende beroende på säkerhetszonen. I vissa fall får användaren en varning när de försöker installera den. Användaren kan välja att fortsätta eller avbryta installationen. I följande tabell beskrivs programmets beteende för varje säkerhetszon och vad du måste göra för att programmet ska få fullständigt förtroende.
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).
| Säkerhetszon | Beteende | Få fullständigt förtroende |
|---|---|---|
| Lokal dator | Automatiskt fullständigt förtroende | Ingen åtgärd krävs. |
| Intranät och betrodda platser | Uppmaning om fullt förtroende | Signera XBAP med ett certifikat så att användaren ser källan i prompten. |
| Internet | Misslyckas med "Förtroende har inte beviljats" | Signera XBAP med ett certifikat. |
Anmärkning
Det beteende som beskrivs i föregående tabell är för fullständigt betrodda XBAP:er som inte följer clickOnce-modellen för betrodd distribution.
I allmänhet är kod som kan överskrida de tillåtna behörigheterna sannolikt vanlig kod som delas mellan både fristående program och webbläsarbaserade program. CAS och WPF erbjuder flera tekniker för att hantera det här scenariot.
Identifiera behörigheter med hjälp av CAS
I vissa situationer är det möjligt att delad kod i bibliotekssammansättningar används av både fristående program och XBAP:er. I dessa fall kan kod köra funktioner som kan kräva fler behörigheter än vad programmets tilldelade behörighetsuppsättning tillåter. Ditt program kan identifiera om det har en viss behörighet med hjälp av Microsoft .NET Framework-säkerhet. Mer specifikt kan den testa om den har en specifik behörighet genom att anropa Demand metoden på instansen av den önskade behörigheten. Detta visas i följande exempel, som har kod som frågar efter om den har möjlighet att spara en fil på den lokala disken:
using System.IO;
using System.IO.IsolatedStorage;
using System.Security;
using System.Security.Permissions;
using System.Windows;
namespace SDKSample
{
public class FileHandling
{
public void Save()
{
if (IsPermissionGranted(new FileIOPermission(FileIOPermissionAccess.Write, @"c:\newfile.txt")))
{
// Write to local disk
using (FileStream stream = File.Create(@"c:\newfile.txt"))
using (StreamWriter writer = new StreamWriter(stream))
{
writer.WriteLine("I can write to local disk.");
}
}
else
{
MessageBox.Show("I can't write to local disk.");
}
}
// Detect whether or not this application has the requested permission
bool IsPermissionGranted(CodeAccessPermission requestedPermission)
{
try
{
// Try and get this permission
requestedPermission.Demand();
return true;
}
catch
{
return false;
}
}
Imports System.IO
Imports System.IO.IsolatedStorage
Imports System.Security
Imports System.Security.Permissions
Imports System.Windows
Namespace SDKSample
Public Class FileHandling
Public Sub Save()
If IsPermissionGranted(New FileIOPermission(FileIOPermissionAccess.Write, "c:\newfile.txt")) Then
' Write to local disk
Using stream As FileStream = File.Create("c:\newfile.txt")
Using writer As New StreamWriter(stream)
writer.WriteLine("I can write to local disk.")
End Using
End Using
Else
MessageBox.Show("I can't write to local disk.")
End If
End Sub
' Detect whether or not this application has the requested permission
Private Function IsPermissionGranted(ByVal requestedPermission As CodeAccessPermission) As Boolean
Try
' Try and get this permission
requestedPermission.Demand()
Return True
Catch
Return False
End Try
End Function
}
}
End Class
End Namespace
Om ett program inte har önskad behörighet utlöser anropet till Demand ett säkerhetsfel. Annars har behörigheten beviljats.
IsPermissionGranted kapslar in det här beteendet och returnerar true eller false efter behov.
Smidig försämring av funktionalitet
Att kunna identifiera om kod har behörighet att göra det den behöver göra är intressant för kod som kan köras från olika zoner. Det är en sak att identifiera zonen, men det är mycket bättre att tillhandahålla ett alternativ för användaren, om möjligt. Ett fullständigt förtroendeprogram gör det till exempel vanligtvis möjligt för användare att skapa filer var de vill, medan ett program med partiellt förtroende bara kan skapa filer i isolerad lagring. Om koden för att skapa en fil finns i en sammansättning som delas av både program med fullständigt förtroende (fristående) och partiellt förtroende (webbläsarbaserade) program, och båda programmen vill att användarna ska kunna skapa filer, bör den delade koden identifiera om den körs i partiellt eller fullständigt förtroende innan en fil skapas på rätt plats. Följande kod visar båda.
using System.IO;
using System.IO.IsolatedStorage;
using System.Security;
using System.Security.Permissions;
using System.Windows;
namespace SDKSample
{
public class FileHandlingGraceful
{
public void Save()
{
if (IsPermissionGranted(new FileIOPermission(FileIOPermissionAccess.Write, @"c:\newfile.txt")))
{
// Write to local disk
using (FileStream stream = File.Create(@"c:\newfile.txt"))
using (StreamWriter writer = new StreamWriter(stream))
{
writer.WriteLine("I can write to local disk.");
}
}
else
{
// Persist application-scope property to
// isolated storage
IsolatedStorageFile storage = IsolatedStorageFile.GetUserStoreForApplication();
using (IsolatedStorageFileStream stream =
new IsolatedStorageFileStream("newfile.txt", FileMode.Create, storage))
using (StreamWriter writer = new StreamWriter(stream))
{
writer.WriteLine("I can write to Isolated Storage");
}
}
}
// Detect whether or not this application has the requested permission
bool IsPermissionGranted(CodeAccessPermission requestedPermission)
{
try
{
// Try and get this permission
requestedPermission.Demand();
return true;
}
catch
{
return false;
}
}
Imports System.IO
Imports System.IO.IsolatedStorage
Imports System.Security
Imports System.Security.Permissions
Imports System.Windows
Namespace SDKSample
Public Class FileHandlingGraceful
Public Sub Save()
If IsPermissionGranted(New FileIOPermission(FileIOPermissionAccess.Write, "c:\newfile.txt")) Then
' Write to local disk
Using stream As FileStream = File.Create("c:\newfile.txt")
Using writer As New StreamWriter(stream)
writer.WriteLine("I can write to local disk.")
End Using
End Using
Else
' Persist application-scope property to
' isolated storage
Dim storage As IsolatedStorageFile = IsolatedStorageFile.GetUserStoreForApplication()
Using stream As New IsolatedStorageFileStream("newfile.txt", FileMode.Create, storage)
Using writer As New StreamWriter(stream)
writer.WriteLine("I can write to Isolated Storage")
End Using
End Using
End If
End Sub
' Detect whether or not this application has the requested permission
Private Function IsPermissionGranted(ByVal requestedPermission As CodeAccessPermission) As Boolean
Try
' Try and get this permission
requestedPermission.Demand()
Return True
Catch
Return False
End Try
End Function
}
}
End Class
End Namespace
I många fall bör du kunna hitta ett delvis förtroendealternativ.
I en kontrollerad miljö, till exempel ett intranät, kan anpassade hanterade ramverk installeras över klientbasen i den globala sammansättningscachen (GAC). Dessa bibliotek kan köra kod som kräver fullständigt förtroende och refereras från program som endast tillåts delvis förtroende med hjälp AllowPartiallyTrustedCallersAttribute av (mer information finns i Säkerhet och WPF-säkerhetsstrategi – Plattformssäkerhet).
Identifiering av webbläsares värd
Att använda CAS för att kontrollera behörigheter är en lämplig metod när du behöver göra det för varje behörighet specifikt. Även om den här tekniken är beroende av att fånga undantag som en del av normal bearbetning, vilket inte rekommenderas i allmänhet och kan ha prestandaproblem. Om ditt XAML-webbläsarprogram (XBAP) istället bara körs inom sandlådan för Internetzonen kan du använda egenskapen BrowserInteropHelper.IsBrowserHosted, som returnerar true för XAML-webbläsarprogram (XBAPs).
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).
Anmärkning
IsBrowserHosted anger endast om ett program körs i en webbläsare, inte vilken uppsättning behörigheter ett program körs med.
Hantera behörigheter
Som standard körs XBAP:er med partiellt förtroende (standardbehörighetsuppsättningen i zonen Internet). Beroende på programmets krav är det dock möjligt att ändra behörighetsuppsättningen från standardinställningen. Om till exempel en XBAPs startas från ett lokalt intranät kan den dra nytta av en ökad behörighetsuppsättning som visas i följande tabell.
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).
Tabell 3: LocalIntranet- och Internetbehörigheter
| Tillåtelse | Egenskap | LocalIntranet | Internet |
|---|---|---|---|
| DNS (Domännamnssystem) | Få åtkomst till DNS-servrar | Ja | Nej |
| Miljövariabler | Läs | Ja | Nej |
| Fildialoger | Öppna | Ja | Ja |
| Fildialoger | Obegränsat | Ja | Nej |
| Isolerad lagring | Sammansättningsisolering efter användare | Ja | Nej |
| Isolerad lagring | Okänd isolering | Ja | Ja |
| Isolerad lagring | Obegränsad användarkvot | Ja | Nej |
| Media | Säkert ljud, video och bilder | Ja | Ja |
| Utskrift | Standardutskrift | Ja | Nej |
| Utskrift | Säker utskrift | Ja | Ja |
| Reflektion | Avge | Ja | Nej |
| Säkerhet | Körning av hanterad kod | Ja | Ja |
| Säkerhet | Bekräfta beviljade behörigheter | Ja | Nej |
| Användargränssnitt | Obegränsat | Ja | Nej |
| Användargränssnitt | Säkra fönster på översta nivån | Ja | Ja |
| Användargränssnitt | Personligt Urklipp | Ja | Ja |
| Webbläsare | Säker ramnavigering till HTML | Ja | Ja |
Anmärkning
Klipp och klistra tillåts endast vid begränsad tillit när det är användarinitierat.
Om du behöver öka behörigheterna måste du ändra projektinställningarna och ClickOnce-programmanifestet. Mer information finns i Översikt över WPF XAML-webbläsarprogram. Följande dokument kan också vara till hjälp.
Om XBAP kräver fullständigt förtroende kan du använda samma verktyg för att öka de begärda behörigheterna. Även om en XBAP endast får fullständigt förtroende om den är installerad på och startad från den lokala datorn, intranätet eller från en URL som visas i webbläsarens betrodda eller tillåtna webbplatser. Om programmet installeras från intranätet eller en betrodd plats får användaren den vanliga ClickOnce-uppmaningen som meddelar dem om de utökade behörigheterna. Användaren kan välja att fortsätta eller avbryta installationen.
Du kan också använda ClickOnce Trusted Deployment-modellen för fullständig förtroendedistribution från valfri säkerhetszon. Mer information finns i Översikt över distribution av betrodda program och säkerhet.
Se även
.NET Desktop feedback