Isolierte SpeicherungIsolated Storage

Die isolierte Speicherung ist ein Mechanismus zur Datenspeicherung von Desktop-Apps, der Isolation und Sicherheit gewährleistet, indem er standardisierte Möglichkeiten zur Verknüpfung von Code mit gespeicherten Daten definiert.For desktop apps, isolated storage is a data storage mechanism that provides isolation and safety by defining standardized ways of associating code with saved data. Die Standardisierung hat weitere Vorteile.Standardization provides other benefits as well. Administratoren können spezielle Tools zum Ändern isolierter Speichervorgänge verwenden, um Speicherplätze für Dateien zu konfigurieren, Sicherheitsrichtlinien festzulegen und nicht verwendete Daten zu löschen.Administrators can use tools designed to manipulate isolated storage to configure file storage space, set security policies, and delete unused data. Dank isolierter Speicherung benötigt der Code keine eindeutigen Pfade zur Festlegung sicherer Speicherplätze im Dateisystem. Außerdem werden die Daten vor anderen Anwendungen geschützt, die nur über Zugriff auf isolierte Speicherplätze verfügen.With isolated storage, your code no longer needs unique paths to specify safe locations in the file system, and data is protected from other applications that only have isolated storage access. Fest codierte Daten, die den Speicherbereich einer Anwendung angeben, sind nicht erforderlich.Hard-coded information that indicates where an application's storage area is located is unnecessary.

Wichtig

Die isolierte Speicherung ist nicht für Windows 8.x Store-Apps verfügbar.Isolated storage is not available for Windows 8.x Store apps. Verwenden Sie stattdessen zum Speichern von lokalen Daten und Dateien die in der Windows-Runtime-API enthaltenen Anwendungsdatenklassen in den Windows.Storage-Namespaces.Instead, use the application data classes in the Windows.Storage namespaces included in the Windows Runtime API to store local data and files. Weitere Informationen finden Sie im Windows Developer Center unter Anwendungsdaten .For more information, see Application data in the Windows Dev Center.

Dieses Thema enthält folgende Abschnitte:This topic contains the following sections:

Datendepots und -speicherData Compartments and Stores

Wenn eine Anwendung Daten in einer Datei speichert, müssen Dateiname und Speicherplatz sorgfältig ausgewählt werden, um weitestgehend zu verhindern, dass der Speicherplatz einer anderen Anwendung zugänglich und damit anfällig für Datenbeschädigungen wird.When an application stores data in a file, the file name and storage location must be carefully chosen to minimize the possibility that the storage location will be known to another application and, therefore, will be vulnerable to corruption. Ohne die Verwendung eines Standardsystems zur Behebung solcher Probleme kann die Entwicklung von Ad-hoc-Techniken zur Minimierung von Speicherkonflikten sehr komplex sein und zu unzuverlässigen Ergebnissen führen.Without a standard system in place to manage these problems, developing ad hoc techniques that minimize storage conflicts can be complex, and the results can be unreliable.

Bei der isolierten Speicherung werden die Daten immer nach Benutzer oder nach Assembly isoliert.With isolated storage, data is always isolated by user and by assembly. Informationen wie der Ursprung oder der starke Name der Assembly bestimmen die Identität der Assembly.Credentials such as the origin or the strong name of the assembly determine assembly identity. Daten können auch nach Anwendungsdomäne isoliert werden, wobei ähnliche Informationen verwendet werden.Data can also be isolated by application domain, using similar credentials.

Bei der Verwendung der isolierten Speicherung speichert Ihre Anwendung Daten in einem eindeutigem Datendepot, das einem bestimmten Aspekt der Identität des Codes zugeordnet ist, beispielsweise dem Herausgeber oder der Signatur.When you use isolated storage, your application saves data to a unique data compartment that is associated with some aspect of the code's identity, such as its publisher or signature. Das Datendepot ist abstrakt und stellt keinen spezifischen Speicherplatz dar. Es besteht aus einer oder mehreren Dateien der isolierten Speicherung, so genannten Speichern. Diese enthalten den tatsächlichen Verzeichnisort, an dem die Daten gespeichert sind.The data compartment is an abstraction, not a specific storage location; it consists of one or more isolated storage files, called stores, which contain the actual directory locations where data is stored. So kann z. B. einer Anwendung ein Datendepot zugeordnet sein. In diesem Fall ist es das Verzeichnis im Dateisystem, das den Speicher implementiert. Dort sind die Daten dieser Anwendung gespeichert.For example, an application might have a data compartment associated with it, and a directory in the file system would implement the store that actually preserves the data for that application. In diesem Speicher können beliebige Daten gespeichert werden, z. B. Informationen zur Benutzereinstellung oder der Anwendungszustand.The data saved in the store can be any kind of data, from user preference information to application state. Für den Entwickler ist der Speicherplatz des Datendepots transparent.For the developer, the location of the data compartment is transparent. Speicher befinden sich normalerweise auf dem Client. Eine Serveranwendung könnte jedoch isolierte Speicher zum Speichern von Informationen verwenden, indem sie die Identität des Benutzers annimmt, in dessen Auftrag sie arbeitet.Stores usually reside on the client, but a server application could use isolated stores to store information by impersonating the user on whose behalf it is functioning. Mit isolierter Speicherung können Daten auf einem Server mit einem Roamingbenutzerprofil gespeichert werden. Dadurch wandern die Daten mit dem Benutzer mit.Isolated storage can also store information on a server with a user's roaming profile so that the information will travel with the roaming user.

Kontingente für isolierte SpeicherungQuotas for Isolated Storage

Bei einem Kontingent handelt es sich um eine Begrenzung des Umfangs an isoliertem Speicherplatz, der verwendet werden kann.A quota is a limit on the amount of isolated storage that can be used. Das Kontingent umfasst Speicherplatzangaben in Bytes sowie den Mehrbedarf in Verbindung mit dem Verzeichnis und anderen Informationen im Speicher.The quota includes bytes of file space as well as the overhead associated with the directory and other information in the store. Bei der isolierten Speicherung werden Berechtigungskontingente verwendet, bei denen es sich um eine mithilfe von IsolatedStoragePermission -Objekten eingestellte Speicherplatzbegrenzung handelt.Isolated storage uses permission quotas, which are storage limits that are set by using IsolatedStoragePermission objects. Versuchen Sie, über das Kontingent hinausgehende Daten zu schreiben, wird eine IsolatedStorageException -Ausnahme ausgelöst.If you try to write data that exceeds the quota, an IsolatedStorageException exception is thrown. In einer Sicherheitsrichtlinie, die mithilfe des .NET Framework-Konfigurationstools (Mscorcfg.msc) geändert werden kann, wird festgelegt, welche Berechtigungen Code erteilt werden.Security policy, which can be modified using the .NET Framework Configuration Tool (Mscorcfg.msc), determines which permissions are granted to code. Code, dem IsolatedStoragePermission gewährt wurde, kann nicht mehr Speicherplatz verwenden, als die UserQuota -Eigenschaft zulässt.Code that has been granted IsolatedStoragePermission is restricted to using no more storage than the UserQuota property allows. Da Code allerdings Berechtigungskontingente durch die Angabe verschiedener Benutzeridentitäten umgehen kann, dienen diese lediglich als Richtlinien und nicht als strenge Einschränkungen für das Verhalten des Codes.However, because code can bypass permission quotas by presenting different user identities, permission quotas serve as guidelines for how code should behave rather than as a firm limit on code behavior.

Kontingente werden nicht in Roamingspeichern durchgesetzt.Quotas are not enforced on roaming stores. Dies ist der Grund, weshalb für ihre Verwendung eine etwas höhere Berechtigungsebene erforderlich ist.Because of this, a slightly higher level of permission is required for code to use them. Die Enumerationswerte AssemblyIsolationByRoamingUser und DomainIsolationByRoamingUser geben eine Berechtigung zur Verwendung von isolierter Speicherung für einen Roamingbenutzer an.The enumeration values AssemblyIsolationByRoamingUser and DomainIsolationByRoamingUser specify a permission to use isolated storage for a roaming user.

Sicherer ZugriffSecure Access

Durch isolierte Speicherung können Daten von teilweise vertrauenswürdigen Anwendungen so gespeichert werden, dass eine Kontrolle durch die Sicherheitsrichtlinien des Computers gewährleistet ist.Using isolated storage enables partially trusted applications to store data in a manner that is controlled by the computer's security policy. Dies ist besonders für heruntergeladene Komponenten von Nutzen, bei deren Ausführung Vorsicht geboten ist.This is especially useful for downloaded components that a user might want to run cautiously. Wenn Sie standardmäßige E/A-Mechanismen zum Zugriff auf das Dateisystem verwenden, lassen die Sicherheitsrichtlinien selten diese Art der Codeberechtigung zu.Security policy rarely grants this kind of code permission when you access the file system by using standard I/O mechanisms. Code, der vom lokalen Computer, von einem lokalen Netzwerk oder über das Internet ausgeführt wird, erhält jedoch standardmäßig die Berechtigung zur Verwendung von isoliertem Speicher.However, by default, code running from the local computer, a local network, or the Internet is granted the right to use isolated storage.

Administratoren können auf Basis einer entsprechenden Vertrauensebene festlegen, wie viel isolierter Speicherplatz einer Anwendung oder einem Benutzer zur Verfügung steht.Administrators can limit how much isolated storage an application or a user has available, based on an appropriate trust level. Darüber hinaus können Administratoren die gespeicherten Daten eines Benutzers vollständig löschen.In addition, administrators can remove a user's persisted data completely. Um isolierten Speicherplatz erstellen oder darauf zugreifen zu können, muss dem Code die entsprechende IsolatedStorageFilePermission -Berechtigung erteilt werden.To create or access isolated storage, code must be granted the appropriate IsolatedStorageFilePermission permission.

Für den Zugriff auf isolierten Speicherplatz muss der Code über alle notwendigen systemeigenen Rechte der Betriebssystemplattform verfügen.To access isolated storage, code must have all necessary native platform operating system rights. Die Bedingungen der Zugriffssteuerungslisten (ACLs, Access Control Lists), die festlegen, welche Benutzer zur Verwendung des Dateisystems berechtigt sind, müssen erfüllt sein.The access control lists (ACLs) that control which users have the rights to use the file system must be satisfied. .NET Framework-Anwendungen verfügen bereits über Betriebssystemrechte für den Zugriff auf isolierten Speicherplatz, sofern sie keine (plattformspezifische) Imitation ausführen..NET Framework applications already have operating system rights to access isolated storage unless they perform (platform-specific) impersonation. In diesem Fall ist die Anwendung dafür zuständig, dass die imitierte Benutzeridentität über die entsprechenden Rechte des Betriebssystems verfügt, um auf den isolierten Speicherplatz zuzugreifen.In this case, the application is responsible for ensuring that the impersonated user identity has the proper operating system rights to access isolated storage. Mithilfe dieses Zugriffs kann aus dem Web ausgeführter bzw. heruntergeladener Code auf einfache Weise aus dem Speicherbereich, der einem bestimmten Benutzer zugeordnet ist, lesen bzw. in diesen schreiben.This access provides a convenient way for code that is run or downloaded from the web to read and write to a storage area related to a particular user.

Zur Steuerung des Zugriffs auf isolierte Speicherplätze verwendet Common Language Runtime IsolatedStorageFilePermission -Objekte.To control access to isolated storage, the common language runtime uses IsolatedStorageFilePermission objects. Jedes Objekt verfügt über Eigenschaften, die folgende Werte festlegen:Each object has properties that specify the following values:

  • Zulässige Verwendung, die den erlaubten Zugriffstyp anzeigt.Allowed usage, which indicates the type of access that is allowed. Die Werte sind Member der IsolatedStorageContainment -Enumeration.The values are members of the IsolatedStorageContainment enumeration. Weitere Informationen über diese Werte finden Sie in der Tabelle im nächsten Abschnitt.For more information about these values, see the table in the next section.

  • Speicherkontingent, wie im vorherigen Abschnitt erläutert.Storage quota, as discussed in the preceding section.

Beim ersten Versuch des Codes, einen Speicher zu öffnen, fordert die Runtime eine IsolatedStorageFilePermission -Berechtigung an.The runtime demands IsolatedStorageFilePermission permission when code first attempts to open a store. Sie entscheidet basierend auf der Vertrauenswürdigkeit des Codes, ob diese Berechtigung erteilt wird.It decides whether to grant this permission, based on how much the code is trusted. Falls die Berechtigung erteilt wird, werden die Werte für die zulässige Verwendung und für das Speicherkontingent durch die Sicherheitsrichtlinien und durch die Anforderung von IsolatedStorageFilePermissiondurch den Code festgelegt.If the permission is granted, the allowed usage and storage quota values are determined by security policy and by the code's request for IsolatedStorageFilePermission. Die Sicherheitsrichtlinien werden mit dem .NET Framework-Konfigurationstool (Mscorcfg.msc) festgelegt.Security policy is set by using the .NET Framework Configuration Tool (Mscorcfg.msc). Alle Aufrufer in der Aufrufliste werden überprüft, um sicherzustellen, dass jeder mindestens über die entsprechende zulässige Verwendung verfügt.All callers in the call stack are checked to ensure that each caller has at least the appropriate allowed usage. Durch die Laufzeit werden auch die Kontingente überprüft, die dem Code auferlegt wurden, durch welchen der Speicher für die zu speichernde Datei geöffnet oder erstellt wurde.The runtime also checks the quota imposed on the code that opened or created the store in which the file is to be saved. Falls diese Bedingungen erfüllt sind, wird die Berechtigung erteilt.If these conditions are satisfied, permission is granted. Die Überprüfung des Kontingents erfolgt jedes Mal erneut, wenn eine Datei in den Speicher geschrieben wird.The quota is checked again every time a file is written to the store.

Für Anwendungscode muss keine Berechtigung angefordert werden, da Common Language Runtime jede gemäß den Sicherheitsrichtlinien angemessene IsolatedStorageFilePermission erteilt.Application code is not required to request permission because the common language runtime will grant whatever IsolatedStorageFilePermission is appropriate based on security policy. Allerdings gibt es gute Gründe, bestimmte Berechtigungen, die für Ihre Anwendung erforderlich sind, einschließlich von IsolatedStorageFilePermission, anzufordern.However, there are good reasons to request specific permissions that your application needs, including IsolatedStorageFilePermission.

Zulässige Verwendung und SicherheitsrisikenAllowed Usage and Security Risks

Die durch IsolatedStorageFilePermission festgelegte zulässige Verwendung bestimmt, bis zu welchem Grad das Erstellen und Verwenden von isolierter Speicherung durch Code zugelassen wird.The allowed usage specified by IsolatedStorageFilePermission determines the degree to which code will be allowed to create and use isolated storage. Aus der folgenden Tabelle geht hervor, inwiefern die in der Berechtigung festgelegte zulässige Verwendung den Isolationstypen entspricht. Ferner werden die Sicherheitsrisiken zusammengefasst, die jede zulässigen Verwendung mit sich bringt.The following table shows how the allowed usage specified in the permission corresponds to types of isolation and summarizes the security risks associated with each allowed usage.

Zulässige VerwendungAllowed usage IsolationstypenIsolation types SicherheitsrisikoSecurity impact
None Es ist keine Verwendung von isolierter Speicherung zulässig.No isolated storage use is allowed. Es besteht kein Sicherheitsrisiko.There is no security impact.
DomainIsolationByUser Isolation nach Benutzer, Domäne und Assembly.Isolation by user, domain, and assembly. Jede Assembly verfügt über einen separaten Unterspeicher innerhalb der Domäne.Each assembly has a separate substore within the domain. Speicher, die diese Berechtigung verwenden, werden auch implizit nach Computer isoliert.Stores that use this permission are also implicitly isolated by computer. Diese Berechtigungsebene bietet Ressourcen keinen Schutz vor unbefugter Überbeanspruchung, wobei erzwungene Kontingente allerdings die Funktion haben, dies zu erschweren.This permission level leaves resources open to unauthorized overuse, although enforced quotas make it more difficult. Dies wird Denial-of-Service-Angriff genannt.This is called a denial of service attack.
DomainIsolationByRoamingUser Wie bei DomainIsolationByUser, jedoch befindet sich der Speicher an einem Speicherplatz, für den Roaming möglich ist, sofern Roamingbenutzerprofile aktiviert und Kontingente nicht erzwungen sind.Same as DomainIsolationByUser, but store is saved to a location that will roam if roaming user profiles are enabled and quotas are not enforced. Da Kontingente deaktiviert sein müssen, sind die Speicherressourcen anfälliger für Denial-of-Service-Angriffe.Because quotas must be disabled, storage resources are more vulnerable to a denial of service attack.
AssemblyIsolationByUser Isolation nach Benutzer und Assembly.Isolation by user and assembly. Speicher, die diese Berechtigung verwenden, werden auch implizit nach Computer isoliert.Stores that use this permission are also implicitly isolated by computer. Kontingente werden auf dieser Ebene erzwungen, um einen Denial-of-Service-Angriff zu verhindern.Quotas are enforced at this level to help prevent a denial of service attack. Dieselbe Assembly in einer anderen Domäne kann auf diesen Speicher zugreifen, wodurch ein Verlust von Informationen zwischen Anwendungen möglich ist.The same assembly in another domain can access this store, opening the possibility that information could be leaked between applications.
AssemblyIsolationByRoamingUser Wie bei AssemblyIsolationByUser, jedoch befindet sich der Speicher an einem Speicherplatz, für den Roaming möglich ist, sofern Roamingbenutzerprofile aktiviert und Kontingente nicht erzwungen sind.Same as AssemblyIsolationByUser, but store is saved to a location that will roam if roaming user profiles are enabled and quotas are not enforced. Wie bei AssemblyIsolationByUser. Allerdings erhöht sich ohne Kontingente das Risiko eines Denial-of-Service-Angriffs.Same as in AssemblyIsolationByUser, but without quotas, the risk of a denial of service attack increases.
AdministerIsolatedStorageByUser Isolation nach Benutzer.Isolation by user. Normalerweise gilt diese Berechtigungsebene nur für Verwaltungs- oder Debugtools.Typically, only administrative or debugging tools use this level of permission. Durch den Zugriff mit dieser Berechtigung kann Code jede der Dateien oder Verzeichnisse in isolierten Speicherplätzen anzeigen oder löschen (unabhängig von Assemblyisolation).Access with this permission allows code to view or delete any of a user's isolated storage files or directories (regardless of assembly isolation). Es besteht u. a. das Risiko eines Informationslecks und des Datenverlusts.Risks include, but are not limited to, leaking information and data loss.
UnrestrictedIsolatedStorage Isolation nach Benutzern, Domänen und Assemblys.Isolation by all users, domains, and assemblies. Normalerweise gilt diese Berechtigungsebene nur für Verwaltungs- oder Debugtools.Typically, only administrative or debugging tools use this level of permission. Durch diese Berechtigung sind sämtliche isolierte Speicher aller Benutzer potenziell gefährdet.This permission creates the potential for a total compromise of all isolated stores for all users.

Sicherheit isolierter Speicherkomponenten in Bezug auf nicht vertrauenswürdige DatenSafety of isolated storage components with regard to untrusted data

Dieser Abschnitt gilt für die folgenden Frameworks:This section applies to the following frameworks:

  • .NET Framework (alle Versionen).NET Framework (all versions)
  • .NET Core 2.1 oder höher.NET Core 2.1+
  • .NET 5.0 oder höher.NET 5.0+

Das .NET Framework und .NET Core bieten die isolierte Speicherung als Mechanismus zum Speichern von Daten für einen Benutzer, eine Anwendung oder eine Komponente.The .NET Framework and .NET Core offer isolated storage as a mechanism to persist data for a user, an application, or a component. Dabei handelt es sich um eine Legacykomponente, die in erster Linie für mittlerweile veraltete Szenarios für die Codezugriffssicherheit entwickelt wurde.This is a legacy component primarily designed for now-deprecated Code Access Security scenarios.

Verschiedene isolierte Speicher-APIs und -Tools können zum vertrauensgrenzenübergreifenden Lesen von Daten verwendet werden.Various isolated storage APIs and tools can be used to read data across trust boundaries. Durch das Lesen von Daten aus computerweiten Bereichen können möglicherweise Daten von weniger vertrauenswürdigen Benutzerkonten auf dem Computer aggregiert werden.For example, reading data from a machine-wide scope can aggregate data from other, possibly less-trusted user accounts on the machine. Komponenten oder Anwendungen, die Elemente aus den isolierten computerweiten Speicherbereichen lesen, sollten die Konsequenzen des Lesens dieser Daten kennen.Components or applications which read from machine-wide isolated storage scopes should be aware of the consequences of reading this data.

Sicherheitsrelevante APIs zum Lesen von computerweiten DateienSecurity-sensitive APIs which can read from the machine-wide scope

Komponenten oder Anwendungen, die eine der folgenden APIs aufrufen, können computerweite Dateien lesen:Components or applications that call any of the following APIs read from the machine-wide scope:

Das Isolated Storage-Tool storeadm.exe ist betroffen, wenn es wie im folgenden Code veranschaulicht mit dem Switch /machine aufgerufen wird:The isolated storage tool storeadm.exe is impacted if called with the /machine switch, as shown in the following code:

storeadm.exe /machine [any-other-switches]

Das Isolated Storage-Tool wird als Teil von Visual Studio und des .NET Framework SDK bereitgestellt.The isolated storage tool is provided as part of Visual Studio and the .NET Framework SDK.

Wenn die Anwendung keine Aufrufe der vorangehenden APIs umfasst oder der Workflow keinen Aufruf von storeadm.exe auf diese Weise erfordert, gilt dieses Dokument nicht.If the application doesn't involve calls to the preceding APIs, or if the workflow doesn't involve calling storeadm.exe in this manner, this document doesn't apply.

Auswirkungen auf Umgebungen mit mehreren BenutzernImpact in multi-user environments

Wie bereits erwähnt sind die Auswirkungen dieser APIs auf die Sicherheit eine Folge davon, dass Daten aus einer vertrauenswürdigen Umgebung von einer anderen vertrauenswürdigen Umgebung gelesen werden.As mentioned previously, the security impact from these APIs results from data written from one trust environment is read from a different trust environment. Bei der isolierten Speicherung wird im Allgemeinen einer von drei Speicherorten verwendet, um Daten zu lesen und zu schreiben:Isolated storage generally uses one of three locations to read and write data:

  1. %LOCALAPPDATA%\IsolatedStorage\: Beispielsweise C:\Users\<username>\AppData\Local\IsolatedStorage\ für den User-Bereich%LOCALAPPDATA%\IsolatedStorage\: For example, C:\Users\<username>\AppData\Local\IsolatedStorage\, for User scope.
  2. %APPDATA%\IsolatedStorage\: Beispielsweise C:\Users\<username>\AppData\Roaming\IsolatedStorage\ für den User|Roaming-Bereich%APPDATA%\IsolatedStorage\: For example, C:\Users\<username>\AppData\Roaming\IsolatedStorage\, for User|Roaming scope.
  3. %PROGRAMDATA%\IsolatedStorage\: Beispielsweise C:\ProgramData\IsolatedStorage\ für den Machine-Bereich%PROGRAMDATA%\IsolatedStorage\: For example, C:\ProgramData\IsolatedStorage\, for Machine scope.

Die ersten beiden Speicherorte sind pro Benutzer isoliert.The first two locations are isolated per-user. Windows stellt sicher, dass unterschiedliche Benutzerkonten auf dem gleichen Computer nicht auf die Benutzerprofilordner der anderen Benutzer zugreifen können.Windows ensures that different user accounts on the same machine cannot access each other's user profile folders. Zwei verschiedene Benutzerkonten, die die Speicher User oder User|Roaming verwenden, können die Daten der anderen Benutzer nicht anzeigen und bearbeiten.Two different user accounts who use the User or User|Roaming stores will not see each other's data and cannot interfere with each other's data.

Der dritte Speicherort wird für alle Benutzerkonten auf dem Computer freigegeben.The third location is shared across all user accounts on the machine. Verschiedene Konten können im Zusammenhang mit diesem Speicherort Lese- und Schreibvorgänge durchführen und die Daten anderer Benutzer anzeigen.Different accounts can read from and write to this location, and they're able to see each other's data.

Die vorangehenden Pfade können sich abhängig von der verwendeten Windows-Version unterscheiden.The preceding paths may differ based on the version of Windows in use.

Gehen wir jetzt von einem System mit den beiden registrierten Benutzern Mallory und Bob aus.Now consider a multi-user system with two registered users Mallory and Bob. Mallory kann auf ihr Benutzerprofilverzeichnis C:\Users\Mallory\ und den freigegebenen computerweiten Speicherort C:\ProgramData\IsolatedStorage\ zugreifen.Mallory has the ability to access her user profile directory C:\Users\Mallory\, and she can access the shared machine-wide storage location C:\ProgramData\IsolatedStorage\. Sie kann nicht auf das Benutzerprofilverzeichnis C:\Users\Bob\ von Bob zugreifen.She cannot access Bob's user profile directory C:\Users\Bob\.

Wenn Mallory Bob angreifen möchte, könnte sie Daten in den computerweiten Speicherort schreiben und dann versuchen, Bob zu Lesevorgängen in diesem computerweiten Speicher zu bringen.If Mallory wishes to attack Bob, she might write data to the machine-wide storage location, then attempt to influence Bob into reading from the machine-wide store. Wenn Bob eine App ausführt, die aus diesem Speicher liest, wird die App mit den dort von Mallory platzierten Daten und im Rahmen von Bobs Benutzerkonto ausgeführt.When Bob runs an app that reads from this store, that app will operate on the data Mallory placed there, but from within the context of Bob's user account. Im restlichen Teil dieses Dokuments werden verschiedene Angriffsvektoren und die Schritte beschrieben, mit denen das Risiko für Apps durch diese Angriffe minimiert werden kann.The remainder of this document contemplates various attack vectors and what steps apps can do to minimize their risk to these attacks.

Hinweis: Mallory benötigt Folgendes, damit ein solcher Angriff stattfinden kann:Note: In order for such an attack to take place, Mallory requires:

  • Benutzerkonto auf dem ComputerA user account on the machine.
  • Möglichkeit, eine Datei in einem bekannten Speicherort im Dateisystem zu platzierenThe ability to place a file into a known location on the file system.
  • Gewissheit, dass Bob irgendwann eine App ausführt, die versucht, diese Daten zu lesenKnowledge that Bob will at some point run an app which attempts to read this data.

Dies sind nicht die Bedrohungsvektoren, die für Standarddesktopumgebungen mit einem Benutzer wie beispielsweise private PCs oder Arbeitsstationen von Einmannbetrieben gelten.These are not threat vectors which apply to standard single-user desktop environments like home PCs or single-employee enterprise workstations.

RechteerweiterungenElevation of privilege

Ein Angriff durch Rechteerweiterungen liegt vor, wenn Bobs App Mallorys Datei liest und automatisch versucht, basierend auf dem Inhalt dieser Nutzlast Aktionen auszuführen.An elevation of privilege attack occurs when Bob's app reads Mallory's file and automatically tries to take some action based on the contents of that payload. Angenommen, eine App liest den Inhalt eines Startskripts aus dem computerweiten Speicher und übergibt diese Inhalte an Process.Start.Consider an app that reads the contents of a startup script from the machine-wide store and passes those contents to Process.Start. Wenn Mallory ein schädliches Skript innerhalb des computerweiten Speichers platzieren kann und Bob dann seine App startet, geschieht Folgendes:If Mallory can place a malicious script inside the machine-wide store, when Bob launches his app:

  • Seine App analysiert und startet Mallorys bösartiges Skript im Kontext seines Benutzerprofils.His app parses and launches Mallory's malicious script under the context of Bob's user profile.
  • Mallory erhält Zugriff auf Bobs Konto auf dem lokalen Computer.Mallory gaines access to Bob's account on the local machine.

Denial-of-Service-AngriffeDenial of service

Ein Denial-of-Service-Angriff tritt auf, wenn Bobs App Mallorys Datei liest und abstürzt oder andernfalls nicht mehr ordnungsgemäß funktioniert.A denial of service attack occurs when Bob's app reads Mallory's file and crashes or otherwise stops functioning correctly. Angenommen, die zuvor erwähnte App versucht wieder, ein Startskript aus dem computerweiten Speicher zu analysieren.Consider again the app mentioned previously, which attempts to parse a startup script from the machine-wide store. Wenn Mallory eine Datei mit falsch formatierten Inhalten im computerweiten Speicher platzieren kann, ist Folgendes möglich:If Mallory can place a file with malformed contents inside the machine-wide store, she might:

  • Sie kann veranlassen, dass Bobs App früh im Startpfad eine Ausnahme auslöst.Cause Bob's app to throw an exception early in the startup path.
  • Sie kann durch die Ausnahme verhindern, dass die App ordnungsgemäß gestartet wird.Prevent the app from launching successfully because of the exception.

Sie hat Bob dann das Starten der App im Kontext seines eigenen Benutzerkontos verweigert.She has then denied Bob the ability to launch the app under his own user account.

Offenlegung vertraulicher InformationenInformation disclosure

Ein Angriff durch die Veröffentlichung von Informationen liegt vor, wenn Mallory Bob dazu bringen kann, den Inhalt einer Datei offenzulegen, auf die Mallory normalerweise keinen Zugriff hat.An information disclosure attack occurs when Mallory can trick Bob into disclosing the contents of a file that Mallory does not normally have access to. Angenommen, Bob verfügt über die Geheimnisdatei C:\Users\Bob\secret.txt, die Mallory lesen möchte.Consider that Bob has a secret file C:\Users\Bob\secret.txt that Mallory wants to read. Sie kennt den Pfad zu dieser Datei, kann sie aber nicht lesen, da Windows ihr den Zugriff auf Bobs Benutzerprofilverzeichnis verbietet.She knows the path to this file, but she cannot read it because Windows forbids her from gaining access to Bob's user profile directory.

Stattdessen platziert Mallory einen Hardlink zum computerweiten Speicher.Instead, Mallory places a hard link into the machine-wide store. Dabei handelt es sich um eine spezielle Datei, die selbst keinen Inhalt enthält, sondern auf eine andere Datei auf dem Datenträger verweist.This is a special kind of file that itself does not contain any contents, rather, it points to another file on disk. Beim Versuch, die Hardlinkdatei zu lesen, wird stattdessen der Inhalt der Datei gelesen, auf die der Hardlink verweist.Attempting to read the hard link file will instead read the contents of the file targeted by the link. Nachdem Mallory den Hardlink erstellt hat, kann sie den Inhalt der Datei noch immer nicht lesen, da sie keinen Zugriff auf das Ziel (C:\Users\Bob\secret.txt) des Links hat.After creating the hard link, Mallory still cannot read the file contents because she does not have access to the target (C:\Users\Bob\secret.txt) of the link. Bob hingegen hat Zugriff auf diese Datei.However, Bob does have access to this file.

Wenn Bobs App aus dem computerweiten Speicher liest, liest sie nun versehentlich den Inhalt der secret.txt-Datei, so als wäre die Datei selbst im computerweiten Speicher vorhanden.When Bob's app reads from the machine-wide store, it now inadvertently reads the contents of his secret.txt file, just as if the file itself had been present in the machine-wide store. Wenn Bobs App den Vorgang beendet und versucht, die Datei erneut im computerweiten Speicher zu speichern, wird tatsächlich eine Kopie der Datei im Verzeichnis C:\ProgramData\IsolatedStorage* platziert.When Bob's app exits, if it attempts to resave the file to the machine-wide store, it will end up placing an actual copy of the file in the *C:\ProgramData\IsolatedStorage* directory. Da dieses Verzeichnis für jeden Benutzer auf dem Computer lesbar ist, kann Mallory nun den Inhalt der Datei lesen.Since this directory is readable by any user on the machine, Mallory can now read the contents of the file.

Bewährte Methoden für die Verteidigung gegen diese AngriffeBest practices to defend against these attacks

Wichtig: Wenn Ihre Umgebung mehrere Benutzer umfasst, die gegenseitig nicht vertrauenswürdig sind, sollten Sie die API IsolatedStorageFile.GetEnumerator(IsolatedStorageScope.Machine) oder das Tool storeadm.exe /machine /list nicht aufrufen.Important: If your environment has multiple mutually untrusted users, do not call the API IsolatedStorageFile.GetEnumerator(IsolatedStorageScope.Machine) or invoke the tool storeadm.exe /machine /list. In beiden Fällen wird davon ausgegangen, dass sie vertrauenswürdige Daten verarbeiten.Both of these assume that they're operating on trusted data. Wenn ein Angreifer eine schädliche Nutzlast im computerweiten Speicher platzieren kann, kann diese Nutzlast zu einem Angriff durch Rechteerweiterungen im Kontext des Benutzers führen, der diese Befehle ausführt.If an attacker can seed a malicious payload in the machine-wide store, that payload can lead to an elevation of privilege attack under the context of the user who runs these commands.

Bei Arbeiten in einer Umgebung mit mehreren Benutzern sollten Sie die Verwendung der Features für den isolierten Speicher überdenken, die den gesamten Computer als Ziel haben.If operating in a multi-user environment, reconsider use of isolated storage features which target the Machine scope. Wenn eine App Daten aus einem computerweiten Speicherort lesen muss, empfiehlt es sich, die Daten aus einem Speicherort zu lesen, der nur für Administratorkonten beschreibbar ist.If an app must read data from a machine-wide location, prefer to read the data from a location that are writable only by admin accounts. Das Verzeichnis %PROGRAMFILES% und die Registrierungsstruktur HKLM sind Beispiele für Speicherorte, die nur für Administratoren beschreibbar und lesbar für alle anderen Benutzer sind.The %PROGRAMFILES% directory and the HKLM registry hive are examples of locations which are writable by only administrators and readable by everyone. Daten, die aus diesen Speicherorten gelesen werden, werden daher als vertrauenswürdig eingestuft.Data read from those locations is therefore considered trustworthy.

Wenn eine App in einer Umgebung mit mehreren Benutzern den gesamten Computerbereich verwenden muss, sollten Sie den Inhalt aller Dateien überprüfen, die Sie aus dem computerweiten Speicher lesen.If an app must use the Machine scope in a multi-user environment, validate the contents of any file that you read from the machine-wide store. Wenn die App Objektgraphen aus diesen Dateien liest, empfiehlt es sich, sicherere Serialisierungsmodule wie XmlSerializer anstelle von gefährlichen Serialisierungsmodulen wie BinaryFormatter oder NetDataContractSerializer zu verwenden.If the app deserializing object graphs from these files, consider using safer serializers like XmlSerializer instead of dangerous serializers like BinaryFormatter or NetDataContractSerializer. Seien Sie vorsichtig bei der Verwendung von tief geschachtelten Objektgraphen oder Objektgraphen, die die Ressourcenzuordnung basierend auf dem Inhalt der Datei durchführen.Use caution with deeply nested object graphs or object graphs which perform resource allocation based on the file contents.

Isolierte SpeicherorteIsolated Storage Locations

Gelegentlich sollten Änderungen an isolierten Speicherplätzen mit dem Dateisystem des Betriebssystems überprüft werden.Sometimes it is helpful to verify a change to isolated storage by using the file system of the operating system. Sie möchten vielleicht auch wissen, wo die Dateien im isolierten Speicherplatz gespeichert sind.You might also want to know the location of isolated storage files. Der Speicherort hängt vom Betriebssystem ab.This location is different depending on the operating system. Die folgende Tabelle gibt für einige geläufige Betriebssysteme die Stammorte an, an denen isolierter Speicherplatz erstellt wird.The following table shows the root locations where isolated storage is created on a few common operating systems. Suchen Sie in diesem Stammspeicherort nach „Microsoft\IsolatedStorage“-Verzeichnissen.Look for Microsoft\IsolatedStorage directories under this root location. Zum Anzeigen versteckter Dateien und Ordner müssen die Ordnereinstellungen geändert werden, sodass isolierte Speicherplätze im Dateisystem angezeigt werden können.You must change folder settings to show hidden files and folders in order to see isolated storage in the file system.

BetriebssystemOperating system Speicherplatz im DateisystemLocation in file system
Windows 2000, Windows XP, Windows Server 2003 (Upgrade von Windows NT 4.0)Windows 2000, Windows XP, Windows Server 2003 (upgrade from Windows NT 4.0) Für Roaming aktivierte Speicher =Roaming-enabled stores =

<SYSTEMROOT>\Profile\<Benutzer>\Anwendungsdaten<SYSTEMROOT>\Profiles\<user>\Application Data

Nicht für Roaming eingerichtete Speicher =Nonroaming stores =

<SYSTEMROOT>\Profile\<Benutzer>\Lokale Einstellungen\Anwendungsdaten<SYSTEMROOT>\Profiles\<user>\Local Settings\Application Data
Windows 2000 – Neuinstallation (und Upgrades von Windows 98 und Windows NT 3.51)Windows 2000 - clean installation (and upgrades from Windows 98 and Windows NT 3.51) Für Roaming aktivierte Speicher =Roaming-enabled stores =

<SYSTEMDRIVE>\Dokumente und Einstellungen\<Benutzer>\Anwendungsdaten<SYSTEMDRIVE>\Documents and Settings\<user>\Application Data

Nicht für Roaming eingerichtete Speicher =Nonroaming stores =

<SYSTEMDRIVE>\Dokumente und Einstellungen\<Benutzer>\Lokale Einstellungen\Anwendungsdaten<SYSTEMDRIVE>\Documents and Settings\<user>\Local Settings\Application Data
Windows XP, Windows Server 2003 – Neuinstallation (und Upgrades von Windows 2000 und Windows 98)Windows XP, Windows Server 2003 - clean installation (and upgrades from Windows 2000 and Windows 98) Für Roaming aktivierte Speicher =Roaming-enabled stores =

<SYSTEMDRIVE>\Dokumente und Einstellungen\<Benutzer>\Anwendungsdaten<SYSTEMDRIVE>\Documents and Settings\<user>\Application Data

Nicht für Roaming eingerichtete Speicher =Nonroaming stores =

<SYSTEMDRIVE>\Dokumente und Einstellungen\<Benutzer>\Lokale Einstellungen\Anwendungsdaten<SYSTEMDRIVE>\Documents and Settings\<user>\Local Settings\Application Data
Windows 8, Windows 7, Windows Server 2008, Windows VistaWindows 8, Windows 7, Windows Server 2008, Windows Vista Für Roaming aktivierte Speicher =Roaming-enabled stores =

<SYSTEMDRIVE>\Benutzer\<Benutzer>\AppData\Roaming<SYSTEMDRIVE>\Users\<user>\AppData\Roaming

Nicht für Roaming eingerichtete Speicher =Nonroaming stores =

<SYSTEMDRIVE>\Benutzer\<Benutzer>\AppData\Local<SYSTEMDRIVE>\Users\<user>\AppData\Local

Erstellen, Auflisten und Löschen von isoliertem SpeicherCreating, Enumerating, and Deleting Isolated Storage

Das .NET Framework stellt drei Klassen im System.IO.IsolatedStorage -Namespace bereit, um Ihnen bei der Ausführung von Aufgaben im Zusammenhang mit isolierter Speicherung zu helfen:The .NET Framework provides three classes in the System.IO.IsolatedStorage namespace to help you perform tasks that involve isolated storage:

Mit den Klassen der isolierten Speicherung können Sie isolierte Speicherplätze erstellen, auflisten und löschen.The isolated storage classes enable you to create, enumerate, and delete isolated storage. Die Methoden zur Ausführung dieser Aufgaben sind über das IsolatedStorageFile -Objekt verfügbar.The methods for performing these tasks are available through the IsolatedStorageFile object. Für einige Operationen benötigen Sie zum Verwalten isolierter Speicher die IsolatedStorageFilePermission -Berechtigung. Für den Zugriff auf die Datei oder das Verzeichnis benötigen Sie gegebenenfalls auch Betriebssystemrechte.Some operations require you to have the IsolatedStorageFilePermission permission that represents the right to administer isolated storage; you might also need to have operating system rights to access the file or directory.

Eine Reihe von Beispielen, die allgemeine isolierte Speicheraufgaben veranschaulichen, finden Sie in den Gewusst-wie-Themen in Verwandte Themen.For a series of examples that demonstrate common isolated storage tasks, see the how-to topics listed in Related Topics.

Szenarien für die isolierte SpeicherungScenarios for Isolated Storage

Isolierte Speicherung kann in vielen Situationen hilfreich sein, zum Beispiel in diesen vier Szenarien:Isolated storage is useful in many situations, including these four scenarios:

  • Heruntergeladene Steuerelemente.Downloaded controls. Aus dem Internet heruntergeladene Steuerelemente für verwalteten Code sind nicht berechtigt, über normale E/A-Klassen auf die Festplatte zu schreiben. Allerdings können sie mithilfe von isolierter Speicherung die Einstellungen eines Benutzers sowie den Anwendungszustand speichern.Managed code controls downloaded from the Internet are not allowed to write to the hard drive through normal I/O classes, but they can use isolated storage to persist users' settings and application states.

  • Speicher für gemeinsame Komponenten.Shared component storage. Von Anwendungen gemeinsam verwendete Komponenten können mithilfe von isolierter Speicherung einen kontrollierten Zugriff auf Datenspeicher bereitstellen.Components that are shared between applications can use isolated storage to provide controlled access to data stores.

  • Speicher auf dem Server.Server storage. Serveranwendungen können isolierte Speicherung verwenden, um einzelne Speicher für eine große Zahl von Benutzern bereitzustellen, die Anforderungen an die Anwendung richten.Server applications can use isolated storage to provide individual stores for a large number of users making requests to the application. Da isolierte Speicherplätze auf die einzelnen Benutzer verteilt werden, muss der Server den anfordernden Benutzer imitieren.Because isolated storage is always segregated by user, the server must impersonate the user making the request. In diesem Fall werden Daten auf Basis der Identität des Prinzipals isoliert, bei der es sich um dieselbe Identität handelt, anhand derer die Anwendung Benutzer voneinander unterscheidet.In this case, data is isolated based on the identity of the principal, which is the same identity the application uses to distinguish between its users.

  • Roaming.Roaming. Anwendungen können isolierte Speicherplätze auch mit Roamingbenutzerprofilen verwenden.Applications can also use isolated storage with roaming user profiles. Dadurch können die isolierten Speicher eines Benutzers wie die Profile von überall zugänglich sein.This allows a user's isolated stores to roam with the profile.

Sie sollten isolierten Speicher in den folgenden Situationen nicht verwenden:You should not use isolated storage in the following situations:

  • Zum Speichern hochsensibler Daten wie unverschlüsselte Schlüssel oder Kennwörter, da isolierte Speicherplätze nicht vor besonders vertrauenswürdigem Code, nicht verwaltetem Code bzw. vor vertrauenswürdigen Benutzern des Computers geschützt sind.To store high-value secrets, such as unencrypted keys or passwords, because isolated storage is not protected from highly trusted code, from unmanaged code, or from trusted users of the computer.

  • Zum Speichern von Code.To store code.

  • Zum Speichern von administratorgesteuerten Konfigurations- und Bereitstellungseinstellungen.To store configuration and deployment settings, which administrators control. (Benutzereinstellungen gelten nicht als Konfigurationseinstellungen, da sie nicht vom Administrator gesteuert werden.)(User preferences are not considered to be configuration settings because administrators do not control them.)

Viele Anwendungen verwenden Datenbanken zur Speicherung und Isolation von Daten, wobei eine oder mehrere Zeilen einer Datenbank den Speicherplatz für einen bestimmten Benutzer darstellen können.Many applications use a database to store and isolate data, in which case one or more rows in a database might represent storage for a specific user. Sie können in folgenden Fällen gegebenenfalls isolierte Speicherung anstelle einer Datenbank verwenden: bei geringer Benutzerzahl, bei beträchtlichem Verwaltungsaufwand durch Verwendung einer Datenbank oder wenn keine Datenbankfunktion zur Verfügung steht.You might choose to use isolated storage instead of a database when the number of users is small, when the overhead of using a database is significant, or when no database facility exists. Wenn eine Anwendung zudem Speicherplatz benötigt, der flexibler und komplexer ist als die Zeilen einer Datenbank, bietet isolierte Speicherung eine gute Alternative.Also, when the application requires storage that is more flexible and complex than what a row in a database provides, isolated storage can provide a viable alternative.

TitelTitle BeschreibungDescription
IsolationstypenTypes of Isolation Beschreibt verschiedene Isolationstypen.Describes the different types of isolation.
How to: Erhalten von Speichern für isolierten SpeicherHow to: Obtain Stores for Isolated Storage Stellt ein Beispiel für die Verwendung der IsolatedStorageFile -Klasse bereit, um einen nach Benutzer und Assembly isolierten Speicher abzurufen.Provides an example of using the IsolatedStorageFile class to obtain a store isolated by user and assembly.
How to: Auflisten von Speichern für isolierten SpeicherHow to: Enumerate Stores for Isolated Storage Zeigt, wie mithilfe der IsolatedStorageFile.GetEnumerator -Methode die Größe des gesamten isolierten Speichers für den Benutzer berechnet wird.Shows how to use the IsolatedStorageFile.GetEnumerator method to calculate the size of all isolated storage for the user.
How to: Löschen von Speichern im isolierten SpeicherHow to: Delete Stores in Isolated Storage Zeigt, wie mit der IsolatedStorageFile.Remove -Methode isolierte Speicher auf zwei unterschiedliche Arten gelöscht werden.Shows how to use the IsolatedStorageFile.Remove method in two different ways to delete isolated stores.
How to: Vorhersehen von Speicherengpässen bei isoliertem SpeicherHow to: Anticipate Out-of-Space Conditions with Isolated Storage Zeigt, wie der restliche Speicherplatz in einem isolierten Speicher ermittelt wird.Shows how to measure the remaining space in an isolated store.
How to: Erstellen von Dateien und Verzeichnissen in isoliertem SpeicherHow to: Create Files and Directories in Isolated Storage Einige Beispiele für das Erstellen von Dateien und Verzeichnissen in einem isolierten Speicher.Provides some examples of creating files and directories in an isolated store.
How to: Suchen von vorhandenen Dateien und Verzeichnissen im isolierten SpeicherHow to: Find Existing Files and Directories in Isolated Storage Zeigt, wie die Verzeichnisstruktur und die Dateien bei isolierter Speicherung gelesen werden.Demonstrates how to read the directory structure and files in isolated storage.
How to: Lesen von bzw. Schreiben in Dateien im isolierten SpeicherHow to: Read and Write to Files in Isolated Storage Beispiel dafür, wie eine Zeichenfolge in eine isolierte Speicherdatei geschrieben und von dort gelesen wird.Provides an example of writing a string to an isolated storage file and reading it back.
How to: Löschen von Dateien und Verzeichnissen in isoliertem SpeicherHow to: Delete Files and Directories in Isolated Storage Beschreibt das Löschen von Dateien und Verzeichnissen der isolierten Speicherung.Demonstrates how to delete isolated storage files and directories.
Datei- und Stream-E/AFile and Stream I/O Erläutert, wie Sie einen synchronen und asynchronen Datei- und Datenstreamzugriff ausführen können.Explains how you can perform synchronous and asynchronous file and data stream access.

ReferenzReference