Sicherheitsüberlegungen (Entity Framework)Security Considerations (Entity Framework)

In diesem Thema werden Sicherheitsüberlegungen beschrieben, die für die Entwicklung, Bereitstellung und Ausführung von Entity Framework-Anwendungen spezifisch sind.This topic describes security considerations that are specific to developing, deploying, and running Entity Framework applications. Außerdem sollten Sie die Empfehlungen zum Erstellen von sicheren .NET Framework-Anwendungen befolgen.You should also follow recommendations for creating secure .NET Framework applications. Weitere Informationen finden Sie unter Sicherheitsübersicht.For more information, see Security Overview.

Allgemeine Überlegungen zur SicherheitGeneral Security Considerations

Die folgenden Sicherheitsüberlegungen gelten für alle Anwendungen, die die Entity Framework verwenden.The following security considerations apply to all applications that use the Entity Framework.

Verwenden Sie nur vertrauenswürdige Datenquellenanbieter.Use only trusted data source providers.

Um mit der Datenquelle zu kommunizieren, muss ein Anbieter wie folgt vorgehen:To communicate with the data source, a provider must do the following:

  • Empfangen Sie die Verbindungs Zeichenfolge aus der Entity Framework.Receive the connection string from the Entity Framework.

  • Übersetzen der Befehlsstruktur in die native Abfragesprache der DatenquelleTranslate the command tree to the data source's native query language.

  • Zusammenstellen und Zurückgeben von ResultsetsAssemble and return result sets.

Während des Anmeldevorgangs werden Informationen auf der Grundlage des Benutzerkennworts über die Netzwerkbibliotheken der zugrunde liegenden Datenquelle an den Server übertragen.During the logon operation, information that is based on the user password is passed to the server through the network libraries of the underlying data source. Ein böswilliger Anbieter kann Benutzeranmeldeinformationen stehlen, böswillige Abfragen generieren oder das Resultset manipulieren.A malicious provider can steal user credentials, generate malicious queries, or tamper with the result set.

Verschlüsseln Sie die Verbindung, um vertrauliche Daten zu schützen.Encrypt your connection to protect sensitive data.

Der Entity Framework verarbeitet die Datenverschlüsselung nicht direkt.The Entity Framework does not directly handle data encryption. Wenn Benutzer über ein öffentliches Netzwerk auf Daten zugreifen, sollte die Anwendung eine verschlüsselte Verbindung mit der Datenquelle herstellen, um die Sicherheit zu erhöhen.If users access data over a public network, your application should establish an encrypted connection to the data source to increase security. Weitere Informationen finden Sie in der die Sicherheit betreffenden Dokumentation für die Datenquelle.For more information, see the security-related documentation for your data source. Eine SQL Server Datenquelle finden Sie unter Verschlüsseln von Verbindungen zu SQL Server.For a SQL Server data source, see Encrypting Connections to SQL Server.

Sichern Sie die Verbindungszeichenfolge ab.Secure the connection string.

Eines der wichtigsten Ziele beim Sichern einer Anwendung besteht darin, den Zugriff auf die Datenquelle zu schützen.Protecting access to your data source is one of the most important goals when securing an application. Eine Verbindungszeichenfolge stellt ein potenzielles Sicherheitsrisiko dar, wenn sie nicht gesichert wird oder nicht ordnungsgemäß aufgebaut ist.A connection string presents a potential vulnerability if it is not secured or if it is improperly constructed. Das Speichern von Verbindungsinformationen als Klartext oder das Aufbewahren dieser Informationen im Arbeitsspeicher gefährdet das gesamte System.When you store connection information in plain text or persist it in memory, you risk compromising your entire system. Folgende Methoden werden zum Sichern von Verbindungszeichenfolgen empfohlen:The following are the recommended methods for securing connection strings:

  • Verwenden Sie die Windows-Authentifizierung bei einer SQL Server-Datenquelle.Use Windows Authentication with a SQL Server data source.

    Wenn Sie die Windows-Authentifizierung verwenden, um eine Verbindung mit einer SQL Server-Datenquelle herzustellen, enthält die Verbindungszeichenfolge keine Anmelde- und Kennwortinformationen.When you use Windows Authentication to connect to a SQL Server data source, the connection string does not contain logon and password information.

  • Verschlüsseln Sie Konfigurationsdateiabschnitte mithilfe der geschützten Konfiguration.Encrypt configuration file sections using protected configuration.

    ASP.NET bietet ein als geschützte Konfiguration bezeichnetes Feature, mit dem Sie sicherheitsrelevante Informationen in einer Konfigurationsdatei verschlüsseln können.ASP.NET provides a feature called protected configuration that enables you to encrypt sensitive information in a configuration file. Die geschützte Konfiguration wurde zwar primär für ASP.NET entwickelt, sie kann jedoch auch zum Verschlüsseln von Konfigurationsdateiabschnitten in Windows-Anwendungen verwendet werden.Although primarily designed for ASP.NET, you can also use protected configuration to encrypt sections of configuration files in Windows applications. Eine ausführliche Beschreibung der neuen Funktionen für die geschützte Konfiguration finden Sie unter Verschlüsseln von Konfigurationsinformationen mithilfe der geschützten Konfiguration.For a detailed description of the new protected configuration capabilities, see Encrypting Configuration Information Using Protected Configuration.

  • Speichern Sie Verbindungszeichenfolgen in gesicherten Konfigurationsdateien.Store connection strings in secured configuration files.

    Sie sollten Verbindungszeichenfolgen niemals in den Quellcode aufnehmen.You should never embed connection strings in your source code. Sie können die Verbindungszeichenfolgen in Konfigurationsdateien speichern. Damit erübrigt sich die Notwendigkeit, sie in den Code der Anwendung einzubetten.You can store connection strings in configuration files, which eliminates the need to embed them in your application's code. Standardmäßig speichert der Assistent für Entity Data Model Verbindungszeichenfolgen in der Anwendungskonfigurationsdatei.By default, the Entity Data Model Wizard stores connection strings in the application configuration file. Sie müssen diese Datei sichern, um den nicht autorisierten Zugriff zu verhindern.You must secure this file to prevent unauthorized access.

  • Verwenden Sie Verbindungszeichenfolgen-Generatoren, wenn Sie Verbindungen dynamisch erstellen.Use connection string builders when dynamically creating connections.

    Wenn Sie Verbindungszeichenfolgen zur Laufzeit erstellen müssen, verwenden Sie die EntityConnectionStringBuilder-Klasse.If you must construct connection strings at runtime, use the EntityConnectionStringBuilder class. Diese Zeichenfolgen-Generator-Klasse hilft durch Überprüfen und Versehen von ungültigen Eingabeinformationen mit Escapezeichen, Angriffe durch Einschleusen von Verbindungszeichenfolgen zu verhindern.This string builder class helps prevent connection string injection attacks by validating and escaping invalid input information. Weitere Informationen finden Sie unter Gewusst wie: Erstellen einer EntityConnection-Verbindungs Zeichenfolge.For more information, see How to: Build an EntityConnection Connection String. Verwenden Sie auch die entsprechende String Builder-Klasse, um die Datenquellen-Verbindungs Zeichenfolge zu erstellen, die Teil der Entity Framework Verbindungs Zeichenfolge ist.Also use the appropriate string builder class to construct the data source connection string that is part of the Entity Framework connection string. Informationen zu Verbindungs Zeichenfolgen-Generatoren für ADO.NET-Anbieter finden Sie unter Verbindungs Zeichenfolgen-Generatoren.For information about connection string builders for ADO.NET providers, see Connection String Builders.

Weitere Informationen finden Sie unter Protecting Connection Information (Schützen von Verbindungsinformationen).For more information, see Protecting Connection Information.

Machen Sie keine EntityConnection für nicht vertrauenswürdige Benutzer verfügbar.Do not expose an EntityConnection to untrusted users.

Ein EntityConnection-Objekt macht die Verbindungszeichenfolge der zugrunde liegenden Verbindung verfügbar.An EntityConnection object exposes the connection string of the underlying connection. Ein Benutzer mit Zugriff auf ein EntityConnection-Objekt kann auch den ConnectionState der zugrunde liegenden Verbindung ändern.A user with access to an EntityConnection object can also change the ConnectionState of the underlying connection. Die EntityConnection-Klasse ist nicht threadsicher.The EntityConnection class is not thread safe.

Übergeben Sie Verbindungen nicht außerhalb des Sicherheitskontexts.Do not pass connections outside the security context.

Nachdem eine Verbindung hergestellt wurde, dürfen Sie diese nicht außerhalb des Sicherheitskontexts übergeben.After a connection has been established, you must not pass it outside the security context. Ein Thread, der über die Berechtigung zum Öffnen einer Verbindung verfügt, sollte die Verbindung nicht an einem globalen Speicherort speichern.For example, one thread with permission to open a connection should not store the connection in a global location. Wenn die Verbindung an einem globalen Speicherort zur Verfügung steht, kann ein bösartiger Thread die offene Verbindung verwenden, ohne dass diesem die Berechtigung dazu explizit gewährt wurde.If the connection is available in a global location, then another malicious thread can use the open connection without having that permission explicitly granted to it.

Beachten Sie, dass Anmeldeinformationen und Kennwörter möglicherweise in einem Speicherabbild sichtbar sind.Be aware that logon information and passwords may be visible in a memory dump.

Wenn Anmelde- und Kennwortinformationen für die Datenquelle in der Verbindungszeichenfolge übergeben werden, bleiben diese Informationen im Arbeitsspeicher erhalten, bis die Garbage Collection die Ressourcen wieder freigibt.When data source logon and password information is supplied in the connection string, this information is maintained in memory until garbage collection reclaims the resources. Dies macht es unmöglich, festzustellen, wann sich eine Kennwortzeichenfolge nicht mehr im Arbeitsspeicher befindet.This makes it impossible to determine when a password string is no longer in memory. Wenn eine Anwendung abstürzt, kann eine Speicherabbilddatei vertrauliche Informationen enthalten, die der Benutzer der Anwendung und jeder Benutzer mit Administratorzugriffsrechten für den Computer anzeigen kann.If an application crashes, a memory dump file may contain sensitive security information, and the user running the application and any user with administrative access to the computer can view the memory dump file. Verwenden Sie die Windows-Authentifizierung für Verbindungen mit Microsoft SQL Server.Use Windows Authentication for connections to Microsoft SQL Server.

Gewähren Sie Benutzern nur die notwendigen Berechtigungen für die Datenquelle.Grant users only the necessary permissions in the data source.

Ein Datenquellenadministrator sollte Benutzern nur die notwendigen Berechtigungen gewähren.A data source administrator should grant only the necessary permissions to users. Auch wenn Entity SQLEntity SQL DML-Anweisungen zum Ändern von Daten, wie beispielsweise INSERT, UPDATE oder DELETE, nicht unterstützt, können Benutzer dennoch auf die Verbindung zur Datenquelle zugreifen.Even though Entity SQLEntity SQL does not support DML statements that modify data, such as INSERT, UPDATE, or DELETE, users can still access the connection to the data source. Ein böswilliger Benutzer könnte diese Verbindung verwenden, um DML-Anweisungen in der systemeigenen Sprache der Datenquelle auszuführen.A malicious user could use this connection to execute DML statements in the native language of the data source.

Führen Sie Anwendungen mit den minimalen Berechtigungen aus.Run applications with the minimum permissions.

Wenn Sie zulassen, dass eine verwaltete Anwendung mit voller Vertrauenswürdigkeit ausgeführt wird, wird der Zugriff der Anwendung auf Ihren Computer durch die .NET Framework nicht eingeschränkt.When you allow a managed application to run with full-trust permission, the .NET Framework does not limit the application's access to your computer. Dies kann zu einer Sicherheitslücke in der Anwendung führen, durch die das gesamte System gefährdet werden kann.This may enable a security vulnerability in your application to compromise the entire system. Um die Code Zugriffssicherheit und andere Sicherheitsmechanismen in der .NET Framework zu verwenden, sollten Sie Anwendungen mithilfe von teilweise vertrauenswürdigen Berechtigungen und mit mindestens einem Berechtigungs Satz ausführen, der für die Funktionsweise der Anwendung erforderlich ist.To use code access security and other security mechanisms in the .NET Framework, you should run applications by using partial-trust permissions and with the minimum set of permissions that are needed to enable the application to function. Die folgenden Code Zugriffsberechtigungen sind die minimalen Berechtigungen, die ihre Entity Framework Anwendung benötigt:The following code access permissions are the minimum permissions your Entity Framework application needs:

Weitere Informationen finden Sie unter Code Access Security and ADO.NET.For more information, see Code Access Security and ADO.NET.

Installieren Sie keine nicht vertrauenswürdigen Anwendungen.Do not install untrusted applications.

Der Entity Framework erzwingt keine Sicherheits Berechtigungen und ruft jeden vom Benutzer bereitgestellten Datenobjekt Code im Prozess auf, unabhängig davon, ob er vertrauenswürdig ist.The Entity Framework does not enforce any security permissions and will invoke any user-supplied data object code in process regardless of whether it is trusted or not. Stellen Sie sicher, dass die Authentifizierung und die Autorisierung des Clients durch den Datenspeicher und Ihre Anwendung erfolgen.Ensure that authentication and authorization of the client is performed by the data store and by your application.

Schränken Sie den Zugriff auf alle Konfigurationsdateien ein.Restrict access to all configuration files.

Ein Administrator muss den Schreibzugriff auf alle Dateien beschränken, die die Konfiguration für eine Anwendung angeben, einschließlich der Dateien "enterprisesec. config", "Security. config", "Machine. conf" und der Anwendungs Konfigurationsdatei <Anwendungs>. exe. config.An administrator must restrict write access to all files that specify configuration for an application, including to enterprisesec.config, security.config, machine.conf, and the application configuration file <application>.exe.config.

Der invariante Name des Anbieters kann in der Datei "App. config" geändert werden. Die Client Anwendung muss die Verantwortung für den Zugriff auf den zugrunde liegenden Anbieter über das standardanbieterfactory-Modell mit einem starken Namen übernehmen.The provider invariant name is modifiable in the app.config. The client application must take responsibility for accessing the underlying provider through the standard provider factory model by using a strong name.

Schränken Sie die Zugriffsberechtigungen auf die Modell- und Zuordnungsdateien ein.Restrict permissions to the model and mapping files.

Ein Administrator muss den Schreibzugriff auf die Modell- und Zuordnungsdateien (EDMX-, CSDL-, SSDL- und MSL-Dateien) auf die Benutzer beschränken, die das Modell oder die Zuordnungen ändern.An administrator must restrict write access to the model and mapping files (.edmx, .csdl, .ssdl, and .msl) to only users who modify the model or mappings. Der Entity Framework benötigt zur Laufzeit nur Lesezugriff auf diese Dateien.The Entity Framework only requires read access to these files at run time. Ein Administrator sollte auch den Zugriff auf Objektebene und vorkompilierte Quell Code Dateien der Ansicht einschränken, die von den Entity Data Model Tools generiert werden.An administrator should also restrict access to object layer and pre-compiled view source code files that are generated by the Entity Data Model tools.

Sicherheitsaspekte bei AbfragenSecurity Considerations for Queries

Folgende Sicherheitsaspekte sollten beim Abfragen eines konzeptionellen Modells beachtet werden.The following security considerations apply when querying a conceptual model. Diese Aspekte gelten für Entity SQLEntity SQL-Abfragen, die EntityClient verwenden, und für Objektabfragen mithilfe von LINQ, Entity SQLEntity SQL und Abfrage-Generator-Methoden.These considerations apply to Entity SQLEntity SQL queries using EntityClient and to object queries using LINQ, Entity SQLEntity SQL, and query builder methods.

Verhindern Sie Angriffe durch Einschleusung von SQL-Befehlen.Prevent SQL injection attacks.

Anwendungen verwenden häufig externe Eingaben (eines Benutzers oder eines anderen externen Agenten) und führen entsprechend dieser Eingaben Aktionen aus.Applications frequently take external input (from a user or another external agent) and perform actions based on that input. Jede direkt oder indirekt vom Benutzer oder einem externen Agenten stammende Eingabe kann über Inhalt verfügen, der die Syntax der Zielsprache nutzt, um nicht autorisierte Aktionen auszuführen.Any input that is directly or indirectly derived from the user or an external agent might have content that uses the syntax of the target language in order to perform unauthorized actions. Wenn die Zielsprache eine strukturierte Abfragesprache (SQL) ist, wie z. b. Transact-SQL, wird diese Manipulation als SQL Injection-Angriff bezeichnet.When the target language is a Structured Query Language (SQL), such as Transact-SQL, this manipulation is known as a SQL injection attack. Ein böswilliger Benutzer kann Befehle direkt in Abfragen einschleusen und eine Datenbanktabelle löschen, einen Denial-of-Service-Angriff verursachen oder auf andere Art und Weise die auszuführende Operation ändern.A malicious user can inject commands directly into the query and drop a database table, cause a denial of service, or otherwise change the nature of the operation being performed.

  • Angriffe durch Einschleusen von Entity SQLEntity SQL:Entity SQLEntity SQL injection attacks:

    Angriffe durch Einschleusung von SQL-Befehlen können in Entity SQLEntity SQL ausgeführt werden, indem böswillige Eingaben für Werte vorgenommen werden, die in Abfrageprädikaten und Parameternamen verwendet werden.SQL injection attacks can be performed in Entity SQLEntity SQL by supplying malicious input to values that are used in a query predicate and in parameter names. Um das Risiko von Angriffen durch Einschleusung von SQL-Befehlen zu vermeiden, sollten Sie niemals Benutzereingaben mit Entity SQLEntity SQL-Befehlstext kombinieren.To avoid the risk of SQL injection, you should never combine user input with Entity SQLEntity SQL command text.

    Entity SQLEntity SQL-Abfragen akzeptieren Parameter an allen Stellen, an denen Literale akzeptiert werden.queries accept parameters everywhere that literals are accepted. Sie sollten parametrisierte Abfragen verwenden, anstatt Literale von einem externen Agenten direkt in die Abfrage einzufügen.You should use parameterized queries instead of injecting literals from an external agent directly into the query. Sie sollten auch die Verwendung von Abfrage-Generator- Methoden verwenden, um Entity SQL sicher zu erstellen.You should also consider using query builder methods to safely construct Entity SQL.

  • LINQ to Entities Injection-Angriffe:LINQ to Entities injection attacks:

    Obwohl die Abfrage Komposition in LINQ to Entities möglich ist, wird Sie über die Objektmodell-API ausgeführt.Although query composition is possible in LINQ to Entities, it is performed through the object model API. Im Gegensatz zu Entity SQLEntity SQL-Abfragen werden LINQ to Entities Abfragen nicht mithilfe von Zeichen folgen Bearbeitung oder-Verkettung erstellt, und Sie sind nicht anfällig für herkömmliche Einschleusung von SQL-Befehlen.Unlike Entity SQLEntity SQL queries, LINQ to Entities queries are not composed by using string manipulation or concatenation, and they are not susceptible to traditional SQL injection attacks.

Verhindern Sie sehr umfangreiche Resultsets.Prevent very large result sets.

Ein sehr umfangreiches Resultset kann dazu führen, dass das Clientsystem heruntergefahren wird, wenn der Client Vorgänge ausführt, die Ressourcen proportional zum Umfang des Resultsets ausführt.A very large result set could cause the client system to shut down if the client is performing operations that consume resources proportional to the size of the result set. Unerwartet große Resultsets können unter den folgenden Bedingungen auftreten:Unexpectedly large result sets can occur under the following conditions:

  • In Abfragen an eine große Datenbank, die keine entsprechenden Filterbedingungen enthalten.In queries against a large database that do not include appropriate filter conditions.

  • In Abfragen, die kartesische Verknüpfungen auf dem Server erstellen.In queries that create Cartesian joins on the server.

  • In geschachtelten Entity SQLEntity SQL-Abfragen.In nested Entity SQLEntity SQL queries.

Wenn Sie Benutzereingaben akzeptieren, müssen Sie sicherstellen, dass die Eingaben keine Resultsets verursachen können, die umfangreicher sind als die Datenmengen, die das System verarbeiten kann.When accepting user input, you must make sure that the input cannot cause result sets to become larger than what the system can handle. Sie können auch die Take-Methode in LINQ to Entities oder den Limit -Operator in Entity SQLEntity SQL verwenden, um die Größe des Resultsets einzuschränken.You can also use the Take method in LINQ to Entities or the LIMIT operator in Entity SQLEntity SQL to limit the size of the result set.

Vermeiden Sie es, IQueryable-Ergebnisse zurückzugeben, wenn Sie Methoden für potenziell nicht vertrauenswürdige Aufrufer verfügbar machen.Avoid Returning IQueryable Results When Exposing Methods to Potentially Untrusted Callers.

Vermeiden Sie es aus den folgenden Gründen, IQueryable<T>-Typen von Methoden zurückzugeben, die für potenziell nicht vertrauenswürdige Aufrufer verfügbar gemacht wurden:Avoid returning IQueryable<T> types from methods that are exposed to potentially untrusted callers for the following reasons:

  • Der Consumer einer Abfrage, die einen IQueryable<T>-Typ verfügbar macht, könnte mit dem Ergebnis Methoden aufrufen, die sichere Daten verfügbar machen oder die Größe des Resultsets erhöhen.A consumer of a query that exposes an IQueryable<T> type could call methods on the result that expose secure data or increase the size of the result set. Betrachten Sie beispielsweise die folgende Methodensignatur:For example, consider the following method signature:

    public IQueryable<Customer> GetCustomer(int customerId)  
    

    Ein Consumer dieser Abfrage könnte .Include("Orders") für den zurückgegebenen IQueryable<Customer> aufrufen, um Daten abrufen, die durch die Abfrage nicht verfügbar gemacht werden sollten.A consumer of this query could call .Include("Orders") on the returned IQueryable<Customer> to retrieve data that the query did not intend to expose. Dies kann vermieden werden, indem der Rückgabetyp der Methode in IEnumerable<T> geändert und eine Methode aufgerufen wird (beispielsweise .ToList()), die die Ergebnisse materialisiert.This can be avoided by changing the return type of the method to IEnumerable<T> and calling a method (such as .ToList()) that materializes the results.

  • Da IQueryable<T>-Abfragen ausgeführt werden, während die Ergebnisse durchlaufen werden, könnte der Consumer einer Abfrage, die einen IQueryable<T>-Typ verfügbar macht, eventuell ausgelöste Ausnahmen abfangen.Because IQueryable<T> queries are executed when the results are iterated over, a consumer of a query that exposes an IQueryable<T> type could catch exceptions that are thrown. Ausnahmen könnten Informationen enthalten, die nicht für den Consumer bestimmt sind.Exceptions could contain information not intended for the consumer.

Sicherheitsaspekte bei EntitätenSecurity Considerations for Entities

Die folgenden Sicherheitsaspekte gelten, wenn Sie Entitätstypen generieren und mit Entitätstypen arbeiten.The following security considerations apply when generating and working with entity types.

Geben Sie einen ObjectContext nicht über Anwendungsdomänen hinweg frei.Do not share an ObjectContext across application domains.

Einen ObjectContext für mehr als eine Anwendungsdomäne freizugeben macht möglicherweise Informationen in der Verbindungszeichenfolge verfügbar.Sharing an ObjectContext with more than one application domain may expose information in the connection string. Stattdessen sollten Sie serialisierte Objekte oder Objektdiagramme an die andere Anwendungsdomäne übertragen und dann diese Objekte einem ObjectContext in der Anwendungsdomäne anfügen.Instead, you should transfer serialized objects or object graphs to the other application domain and then attach those objects to an ObjectContext in that application domain. Weitere Informationen finden Sie unter Serialisieren von Objekten.For more information, see Serializing Objects.

Verhindern Sie Verletzungen der Typsicherheit.Prevent type safety violations.

Wenn die Typsicherheit verletzt wird, kann die Entity Framework die Integrität der Daten in Objekten nicht garantieren.If type safety is violated, the Entity Framework cannot guarantee the integrity of data in objects. Verletzungen der Typsicherheit könnten auftreten, wenn Sie zulassen, dass nicht vertrauenswürdige Anwendungen mit voll vertrauenswürdiger Codezugriffssicherheit ausgeführt werden.Type safety violations could occur if you allow untrusted applications to run with full-trust code access security.

Behandeln von AusnahmenHandle exceptions.

Greifen Sie auf die Methoden und Eigenschaften von ObjectContext innerhalb eines try-catch-Blocks zu.Access methods and properties of an ObjectContext within a try-catch block. Das Abfangen von Ausnahmen verhindert, dass nicht behandelte Ausnahmen Benutzern der Anwendung Einträge im ObjectStateManager oder Modellinformationen (beispielsweise Tabellennamen), verfügbar machen.Catching exceptions prevents unhandled exceptions from exposing entries in the ObjectStateManager or model information (such as table names) to users of your application.

Sicherheitsaspekte für ASP.NET-AnwendungenSecurity Considerations for ASP.NET Applications

Beachten Sie Folgendes, wenn Sie mit Pfaden in ASP.NET-Anwendungen arbeiten.You should consider the following when you work with paths in ASP.NET applications.

Überprüfen Sie, ob der Host Pfadprüfungen ausführt.Verify whether your host performs path checks.

Wenn die Ersetzungs Zeichenfolge des |DataDirectory| (in Pipe-Symbole eingeschlossen) verwendet wird, überprüft ADO.net, ob der aufgelöste Pfad unterstützt wird.When the |DataDirectory| (enclosed in pipe symbols) substitution string is used, ADO.NET verifies that the resolved path is supported. Beispielsweise ist ".." hinter DataDirectory nicht zulässig.For example, ".." is not allowed behind DataDirectory. Dieselbe Überprüfung zum Auflösen des Webanwendungs-Stamm Operators (~) erfolgt durch den Prozess, der ASP.net gehostet.That same check for resolving the Web application root operator (~) is performed by the process hosting ASP.NET. IIS führt diese Überprüfung aus. Andere Hosts als IIS können möglicherweise nicht überprüfen, ob der aufgelöste Pfad unterstützt wird.IIS performs this check; however, hosts other than IIS may not verify that the resolved path is supported. Sie sollten das Verhalten des Hosts kennen, auf dem Sie eine Entity Framework Anwendung bereitstellen.You should know the behavior of the host on which you deploy an Entity Framework application.

Gehen Sie nicht von Annahmen über aufgelöste Pfadnamen aus.Do not make assumptions about resolved path names.

Obwohl die Werte, auf die der Stamm Operator (~) und die DataDirectory Ersetzungs Zeichenfolge auflösen, während der Laufzeit der Anwendung konstant bleiben, schränkt der Entity Framework den Host nicht auf das Ändern dieser Werte ein.Although the values to which the root operator (~) and the DataDirectory substitution string resolve should remain constant during the application's runtime, the Entity Framework does not restrict the host from modifying these values.

Überprüfen Sie die Pfadlänge vor der Bereitstellung.Verify the path length before deployment.

Bevor Sie eine Entity Framework Anwendung bereitstellen, sollten Sie sicherstellen, dass die Werte des root-Operators (~) und DataDirectory Ersetzungs Zeichenfolge nicht die Grenzwerte für die Pfadlänge im Betriebssystem überschreiten.Before deploying an Entity Framework application, you should ensure that the values of the root operator (~) and DataDirectory substitution string do not exceed the limits of the path length in the operating system. ADO.NET-Datenanbieter stellen nicht sicher, dass die Pfadlänge innerhalb gültiger Limits liegt.ADO.NET data providers do not ensure that the path length is within valid limits.

Sicherheitsaspekte für ADO.NET-MetadatenSecurity Considerations for ADO.NET Metadata

Wenn Sie Modell- und Zuordnungsdateien erzeugen und mit ihnen arbeiten, berücksichtigen Sie Folgendes hinsichtlich der Sicherheit:The following security considerations apply when generating and working with model and mapping files.

Machen Sie vertrauliche Informationen nicht durch Protokollierung verfügbar.Do not expose sensitive information through logging.

ADO.net Metadata Service-Komponenten protokollieren keine privaten Informationen.ADO.NET metadata service components do not log any private information. Wenn Ergebnisse aufgrund von Zugriffsbeschränkungen nicht zurückgegeben werden können, sollten Datenbankmanagementsysteme und Dateisysteme Ergebnisse mit dem Wert Null zurückgeben, statt eine Ausnahme auszulösen, die vertrauliche Informationen enthalten könnte.If there are results that cannot be returned because of access restrictions, database management systems and file systems should return zero results instead of raising an exception that could contain sensitive information.

Akzeptieren Sie keine "MetadataWorkspace"-Objekte von nicht vertrauenswürdigen Quellen.Do not accept MetadataWorkspace objects from untrusted sources.

Anwendungen sollten keine Instanzen der MetadataWorkspace-Klasse von nicht vertrauenswürdigen Quellen akzeptieren.Applications should not accept instances of the MetadataWorkspace class from untrusted sources. Stattdessen sollten Sie einen Arbeitsbereich explizit erstellen und aus so einer Quelle füllen.Instead, you should explicitly construct and populate a workspace from such a source.

Siehe auchSee also