Schützen von Verbindungszeichenfolgen und anderen Konfigurationsinformationen (C#)
von Scott Mitchell
Eine ASP.NET-Anwendung speichert Konfigurationsinformationen in der Regel in einer Web.config-Datei. Einige dieser Informationen sind vertraulich und gewährleisten Schutz. Standardmäßig wird diese Datei nicht für einen Websitebesucher bereitgestellt, aber ein Administrator oder Hacker kann Zugriff auf das Dateisystem des Webservers erhalten und den Inhalt der Datei anzeigen. In diesem Tutorial erfahren Sie, dass ASP.NET 2.0 es uns ermöglicht, vertrauliche Informationen durch Verschlüsseln von Abschnitten der Web.config-Datei zu schützen.
Einführung
Konfigurationsinformationen für ASP.NET Anwendungen werden häufig in einer XML-Datei namens Web.config
gespeichert. Im Laufe dieser Tutorials haben wir die Web.config
einige Male aktualisiert. Beim Erstellen des Northwind
typisierten DataSets im ersten Tutorial wurden beispielsweise Verbindungszeichenfolge Informationen im <connectionStrings>
Abschnitt automatisch hinzugefügtWeb.config
. Später haben wir im Tutorial Gestaltungsvorlagen und Websitenavigation manuell aktualisiert Web.config
und ein <pages>
-Element hinzugefügt, das angibt, dass alle ASP.NET Seiten in unserem Projekt das DataWebControls
Design verwenden sollten.
Da Web.config
möglicherweise vertrauliche Daten wie Verbindungszeichenfolgen enthalten, ist es wichtig, dass die Inhalte von Web.config
geschützt und vor nicht autorisierten Viewern verborgen bleiben. Standardmäßig wird jede HTTP-Anforderung an eine Datei mit der .config
Erweiterung von der ASP.NET-Engine verarbeitet, die die In Abbildung 1 gezeigte Meldung Dieser Seitentyp wird nicht bereitgestellt zurückgibt. Dies bedeutet, dass Besucher die Inhalte Ihrer Web.config
Datei nicht anzeigen können, indem sie einfach in die Adressleiste ihres Browsers eingeben http://www.YourServer.com/Web.config .
Abbildung 1: Besuch Web.config
über einen Browser Gibt eine Meldung vom Typ "Diese Art von Seite wird nicht bereitgestellt" zurück (Klicken Sie hier, um das Bild in voller Größe anzuzeigen)
Was aber, wenn ein Angreifer einen anderen Exploit finden kann, der es ihr ermöglicht, die Inhalte Ihrer Web.config
Datei anzuzeigen? Was könnte ein Angreifer mit diesen Informationen tun, und welche Schritte können unternommen werden, um die vertraulichen Informationen in Web.config
weiter zu schützen? Glücklicherweise enthalten die meisten Abschnitte in Web.config
keine vertraulichen Informationen. Welchen Schaden kann ein Angreifer anrichten, wenn er den Namen des Standarddesigns kennt, das von Ihren ASP.NET Seiten verwendet wird?
Bestimmte Web.config
Abschnitte enthalten jedoch vertrauliche Informationen, die Verbindungszeichenfolgen, Benutzernamen, Kennwörter, Servernamen, Verschlüsselungsschlüssel usw. enthalten können. Diese Informationen finden Sie in der Regel in den folgenden Web.config
Abschnitten:
<appSettings>
<connectionStrings>
<identity>
<sessionState>
In diesem Tutorial werden Techniken zum Schutz solcher vertraulicher Konfigurationsinformationen erläutert. Wie wir sehen werden, enthält die .NET Framework Version 2.0 ein geschütztes Konfigurationssystem, das das programmgesteuerte Verschlüsseln und Entschlüsseln ausgewählter Konfigurationsabschnitte zum Kinderspiel macht.
Hinweis
Dieses Tutorial endet mit den Empfehlungen von Microsoft zum Herstellen einer Verbindung mit einer Datenbank aus einer ASP.NET-Anwendung. Zusätzlich zur Verschlüsselung Ihrer Verbindungszeichenfolgen können Sie dazu beitragen, Ihr System zu härten, indem Sie sicherstellen, dass Sie auf sichere Weise eine Verbindung mit der Datenbank herstellen.
Schritt 1: Erkunden der geschützten Konfigurationsoptionen für ASP.NET 2.0 s
ASP.NET 2.0 enthält ein geschütztes Konfigurationssystem zum Verschlüsseln und Entschlüsseln von Konfigurationsinformationen. Dazu gehören Methoden im .NET Framework, die zum programmgesteuerten Verschlüsseln oder Entschlüsseln von Konfigurationsinformationen verwendet werden können. Das geschützte Konfigurationssystem verwendet das Anbietermodell, mit dem Entwickler auswählen können, welche kryptografische Implementierung verwendet wird.
Die .NET Framework wird mit zwei geschützten Konfigurationsanbietern ausgeliefert:
RSAProtectedConfigurationProvider
– verwendet den asymmetrischen RSA-Algorithmus für die Ver- und Entschlüsselung.DPAPIProtectedConfigurationProvider
– verwendet die Windows Data Protection-API (DPAPI) für die Verschlüsselung und Entschlüsselung.
Da das geschützte Konfigurationssystem das Anbieterentwurfsmuster implementiert, ist es möglich, einen eigenen geschützten Konfigurationsanbieter zu erstellen und an Ihre Anwendung zu binden. Weitere Informationen zu diesem Prozess finden Sie unter Implementieren eines geschützten Konfigurationsanbieters .
Die RSA- und DPAPI-Anbieter verwenden Schlüssel für ihre Ver- und Entschlüsselungsroutinen, und diese Schlüssel können auf Computer- oder Benutzerebene gespeichert werden. Schlüssel auf Computerebene eignen sich ideal für Szenarien, in denen die Webanwendung auf einem eigenen dedizierten Server ausgeführt wird oder wenn mehrere Anwendungen auf einem Server vorhanden sind, die verschlüsselte Informationen freigeben müssen. Schlüssel auf Benutzerebene sind eine sicherere Option in freigegebenen Hostingumgebungen, in denen andere Anwendungen auf demselben Server nicht in der Lage sein sollten, die geschützten Konfigurationsabschnitte Ihrer Anwendung zu entschlüsseln.
In diesem Tutorial verwenden unsere Beispiele den DPAPI-Anbieter und Schlüssel auf Computerebene. Insbesondere sehen wir uns das Verschlüsseln des <connectionStrings>
Abschnitts in Web.config
an, obwohl das geschützte Konfigurationssystem zum Verschlüsseln aller Abschnitte Web.config
verwendet werden kann. Informationen zur Verwendung von Schlüsseln auf Benutzerebene oder zur Verwendung des RSA-Anbieters finden Sie in den Ressourcen im Abschnitt Weitere Informationen am Ende dieses Tutorials.
Hinweis
Die RSAProtectedConfigurationProvider
Anbieter und DPAPIProtectedConfigurationProvider
werden in der machine.config
Datei mit den Anbieternamen RsaProtectedConfigurationProvider
bzw DataProtectionConfigurationProvider
. registriert. Beim Verschlüsseln oder Entschlüsseln von Konfigurationsinformationen müssen wir den entsprechenden Anbieternamen (RsaProtectedConfigurationProvider
oder DataProtectionConfigurationProvider
) anstelle des tatsächlichen Typnamens (RSAProtectedConfigurationProvider
und DPAPIProtectedConfigurationProvider
) angeben. Sie finden die machine.config
Datei im $WINDOWS$\Microsoft.NET\Framework\version\CONFIG
Ordner.
Schritt 2: Programmgesteuertes Verschlüsseln und Entschlüsseln von Konfigurationsabschnitten
Mit wenigen Codezeilen können wir einen bestimmten Konfigurationsabschnitt mithilfe eines angegebenen Anbieters verschlüsseln oder entschlüsseln. Der Code muss, wie wir in Kürze sehen werden, einfach programmgesteuert auf den entsprechenden Konfigurationsabschnitt verweisen, die - ProtectSection
Methode oder UnprotectSection
aufrufen und dann die Save
-Methode aufrufen, um die Änderungen beizubehalten. Darüber hinaus enthält die .NET Framework ein hilfreiches Befehlszeilenprogramm, das Konfigurationsinformationen ver- und entschlüsseln kann. Wir werden dieses Befehlszeilenhilfsprogramm in Schritt 3 untersuchen.
Um den programmgesteuerten Schutz von Konfigurationsinformationen zu veranschaulichen, erstellen wir eine ASP.NET Seite, die Schaltflächen zum Verschlüsseln und Entschlüsseln des <connectionStrings>
Abschnitts in Web.config
enthält.
Öffnen Sie zunächst die EncryptingConfigSections.aspx
Seite im AdvancedDAL
Ordner. Ziehen Sie ein TextBox-Steuerelement aus der Toolbox auf das Designer, und legen Sie dessen ID
Eigenschaft auf WebConfigContents
, seine TextMode
Eigenschaft auf MultiLine
und seine Width
Eigenschaften Rows
auf 95 % bzw. 15 fest. Dieses TextBox-Steuerelement zeigt den Inhalt von Web.config
an, sodass wir schnell erkennen können, ob die Inhalte verschlüsselt sind oder nicht. Natürlich möchten Sie in einer echten Anwendung niemals den Inhalt von Web.config
anzeigen.
Fügen Sie unterhalb des TextBox-Steuerelements zwei Button-Steuerelemente mit dem Namen EncryptConnStrings
und DecryptConnStrings
hinzu. Legen Sie deren Texteigenschaften auf Verbindungszeichenfolgen verschlüsseln und Verbindungszeichenfolgen entschlüsseln fest.
An diesem Punkt sollte ihr Bildschirm ähnlich wie Abbildung 2 aussehen.
Abbildung 2: Hinzufügen eines TextBox- und zwei Schaltflächen-Websteuerelements zur Seite (Klicken Sie hier, um das Bild in voller Größe anzuzeigen)
Als Nächstes müssen wir Code schreiben, der den Inhalt von Web.config
lädt und anzeigt, WebConfigContents
wenn die Seite zum ersten Mal geladen wird. Fügen Sie der CodeBehind-Klasse der Seite den folgenden Code hinzu. Dieser Code fügt eine Methode namens DisplayWebConfig
hinzu und ruft sie aus dem Page_Load
Ereignishandler auf, wenn Page.IsPostBack
ist false
:
protected void Page_Load(object sender, EventArgs e)
{
// On the first page visit, call DisplayWebConfig method
if (!Page.IsPostBack)
DisplayWebConfig();
}
private void DisplayWebConfig()
{
// Reads in the contents of Web.config and displays them in the TextBox
StreamReader webConfigStream =
File.OpenText(Path.Combine(Request.PhysicalApplicationPath, "Web.config"));
string configContents = webConfigStream.ReadToEnd();
webConfigStream.Close();
WebConfigContents.Text = configContents;
}
Die DisplayWebConfig
-Methode verwendet die File
-Klasse , um die Datei der Anwendung Web.config
zu öffnen, die StreamReader
-Klasse , um ihren Inhalt in eine Zeichenfolge zu lesen, und die Path
-Klasse , um den physischen Pfad zur Datei zu Web.config
generieren. Diese drei Klassen befinden sich alle im System.IO
-Namespace. Daher müssen Sie am Anfang der CodeBehind-Klasse eine using
System.IO
-Anweisung hinzufügen oder diesen Klassennamen alternativ das Präfix voran stellen System.IO.
.
Als Nächstes müssen Wir Ereignishandler für die beiden Button-Steuerelementereignisse Click
hinzufügen und den erforderlichen Code hinzufügen, um den <connectionStrings>
Abschnitt mithilfe eines Schlüssels auf Computerebene mit dem DPAPI-Anbieter zu verschlüsseln und zu entschlüsseln. Doppelklicken Sie im Designer auf jede der Schaltflächen, um einen Click
Ereignishandler in der CodeBehind-Klasse hinzuzufügen, und fügen Sie dann den folgenden Code hinzu:
protected void EncryptConnStrings_Click(object sender, EventArgs e)
{
// Get configuration information about Web.config
Configuration config =
WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);
// Let's work with the <connectionStrings> section
ConfigurationSection connectionStrings = config.GetSection("connectionStrings");
if (connectionStrings != null)
// Only encrypt the section if it is not already protected
if (!connectionStrings.SectionInformation.IsProtected)
{
// Encrypt the <connectionStrings> section using the
// DataProtectionConfigurationProvider provider
connectionStrings.SectionInformation.ProtectSection(
"DataProtectionConfigurationProvider");
config.Save();
// Refresh the Web.config display
DisplayWebConfig();
}
}
protected void DecryptConnStrings_Click(object sender, EventArgs e)
{
// Get configuration information about Web.config
Configuration config =
WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);
// Let's work with the <connectionStrings> section
ConfigurationSection connectionStrings =
config.GetSection("connectionStrings");
if (connectionStrings != null)
// Only decrypt the section if it is protected
if (connectionStrings.SectionInformation.IsProtected)
{
// Decrypt the <connectionStrings> section
connectionStrings.SectionInformation.UnprotectSection();
config.Save();
// Refresh the Web.config display
DisplayWebConfig();
}
}
Der in den beiden Ereignishandlern verwendete Code ist nahezu identisch. Beide beginnen mit dem Abrufen von Informationen zur aktuellen Anwendungsdatei Web.config
über die S-Methode derWebConfigurationManager
Klasse.OpenWebConfiguration
Diese Methode gibt die Webkonfigurationsdatei für den angegebenen virtuellen Pfad zurück. Als Nächstes wird über die Web.config
Klasse s-MethodeGetSection(sectionName)
auf den Configuration
Abschnitt der <connectionStrings>
Datei zugegriffen, die ein ConfigurationSection
-Objekt zurückgibt.
Das ConfigurationSection
-Objekt enthält eine SectionInformation
-Eigenschaft , die zusätzliche Informationen und Funktionen zum Konfigurationsabschnitt bereitstellt. Wie der obige Code zeigt, können wir ermitteln, ob der Konfigurationsabschnitt verschlüsselt ist, indem wir die SectionInformation
Eigenschaft s IsProtected
überprüfen. Darüber hinaus kann der Abschnitt über die SectionInformation
Eigenschaften s ProtectSection(provider)
und UnprotectSection
Methoden verschlüsselt oder entschlüsselt werden.
Die ProtectSection(provider)
-Methode akzeptiert als Eingabe eine Zeichenfolge, die den Namen des geschützten Konfigurationsanbieters angibt, der bei der Verschlüsselung verwendet werden soll. EncryptConnString
Im Button s-Ereignishandler übergeben wir DataProtectionConfigurationProvider an die ProtectSection(provider)
-Methode, sodass der DPAPI-Anbieter verwendet wird. Die UnprotectSection
-Methode kann den Anbieter ermitteln, der zum Verschlüsseln des Konfigurationsabschnitts verwendet wurde, und erfordert daher keine Eingabeparameter.
Nachdem Sie die ProtectSection(provider)
-Methode oder UnprotectSection
aufgerufen haben, müssen Sie die -Methode des Objekts aufrufen,Save
um die Änderungen beizubehalten.Configuration
Nachdem die Konfigurationsinformationen verschlüsselt oder entschlüsselt und die Änderungen gespeichert wurden, rufen wir auf DisplayWebConfig
, um den aktualisierten Web.config
Inhalt in das TextBox-Steuerelement zu laden.
Nachdem Sie den obigen Code eingegeben haben, testen Sie ihn, indem Sie die EncryptingConfigSections.aspx
Seite über einen Browser besuchen. Zunächst sollte eine Seite angezeigt werden, auf der der Inhalt von Web.config
mit dem <connectionStrings>
Abschnitt im Nur-Text-Format angezeigt wird (siehe Abbildung 3).
Abbildung 3: Hinzufügen eines TextBox- und zwei Schaltflächen-Websteuerelements zur Seite (Klicken Sie hier, um das Bild in voller Größe anzuzeigen)
Klicken Sie nun auf die Schaltfläche Verbindungszeichenfolgen verschlüsseln. Wenn die Anforderungsvalidierung aktiviert ist, erzeugt das von TextBox WebConfigContents
zurückgesendete Markup eine HttpRequestValidationException
, die die Meldung anzeigt, dass vom Client ein potenziell gefährlicher Request.Form
Wert erkannt wurde. Die Anforderungsvalidierung, die in ASP.NET 2.0 standardmäßig aktiviert ist, verbietet Postbacks, die uncodiertes HTML enthalten, und wurde entwickelt, um Skripteinschleusungsangriffe zu verhindern. Diese Überprüfung kann auf Seiten- oder Anwendungsebene deaktiviert werden. Um sie für diese Seite zu deaktivieren, legen Sie die ValidateRequest
Einstellung in der @Page
-Direktive auf false
fest. Die @Page
-Direktive befindet sich oben auf dem deklarativen Markup der Seite.
<%@ Page ValidateRequest="False" ... %>
Weitere Informationen zur Anforderungsüberprüfung, zu ihrem Zweck, zur Deaktivierung auf Seiten- und Anwendungsebene sowie zur HTML-Codierung von Markup finden Sie unter Anforderungsüberprüfung – Verhindern von Skriptangriffen.
Nachdem Sie die Anforderungsüberprüfung für die Seite deaktiviert haben, klicken Sie erneut auf die Schaltfläche Verbindungszeichenfolgen verschlüsseln. Beim Postback wird auf die Konfigurationsdatei zugegriffen und ihr <connectionStrings>
Abschnitt mit dem DPAPI-Anbieter verschlüsselt. Das Textfeld wird dann aktualisiert, um den neuen Web.config
Inhalt anzuzeigen. Wie Abbildung 4 zeigt, sind die <connectionStrings>
Informationen jetzt verschlüsselt.
Abbildung 4: Klicken auf die Schaltfläche Verbindungszeichenfolgen verschlüsseln Verschlüsselt den <connectionString>
Abschnitt (Klicken, um das bild in voller Größe anzuzeigen)
Der verschlüsselte <connectionStrings>
Abschnitt, der auf meinem Computer generiert wurde, folgt, obwohl einige der Inhalte im Element aus Gründen der <CipherData>
Kürze entfernt wurden:
<connectionStrings
configProtectionProvider="DataProtectionConfigurationProvider">
<EncryptedData>
<CipherData>
<CipherValue>AQAAANCMnd8BFdERjHoAwE/...zChw==</CipherValue>
</CipherData>
</EncryptedData>
</connectionStrings>
Hinweis
Das <connectionStrings>
-Element gibt den Anbieter an, der zum Ausführen der Verschlüsselung (DataProtectionConfigurationProvider
) verwendet wird. Diese Informationen werden von der UnprotectSection
-Methode verwendet, wenn auf die Schaltfläche Verbindungszeichenfolgen entschlüsseln geklickt wird.
Wenn auf die Verbindungszeichenfolge Informationen zugegriffen Web.config
wird – entweder durch code, den wir schreiben, aus einem SqlDataSource-Steuerelement oder den automatisch generierten Code aus den TableAdapters in unseren typisierten DataSets –, wird dies automatisch entschlüsselt. Kurz gesagt, wir müssen keinen zusätzlichen Code oder keine zusätzliche Logik hinzufügen, um den verschlüsselten <connectionString>
Abschnitt zu entschlüsseln. Um dies zu veranschaulichen, besuchen Sie zu diesem Zeitpunkt eines der früheren Tutorials, z. B. das Tutorial Einfache Anzeige im Abschnitt Grundlegende Berichterstellung (~/BasicReporting/SimpleDisplay.aspx
). Wie Abbildung 5 zeigt, funktioniert das Tutorial genau so, wie wir es erwarten würden, und gibt an, dass die verschlüsselten Verbindungszeichenfolge Informationen automatisch von der ASP.NET-Seite entschlüsselt werden.
Abbildung 5: Die Datenzugriffsebene entschlüsselt die Verbindungszeichenfolgeninformationen automatisch (klicken, um das vollständige Bild anzuzeigen)
Klicken Sie auf die Schaltfläche Verbindungszeichenfolgen entschlüsseln, um den <connectionStrings>
Abschnitt wieder in seine Nur-Text-Darstellung zu rückgängig machen. Beim Postback sollten die Verbindungszeichenfolgen in Web.config
Nur-Text angezeigt werden. An diesem Punkt sollte Ihr Bildschirm wie beim ersten Besuch dieser Seite aussehen (siehe Abbildung 3).
Schritt 3: Verschlüsseln von Konfigurationsabschnitten mithilfe von aspnet_regiis.exe
Die .NET Framework enthält eine Vielzahl von Befehlszeilentools im $WINDOWS$\Microsoft.NET\Framework\version\
Ordner. Im Tutorial Verwenden von SQL-Cacheabhängigkeiten haben wir für instance die Verwendung des aspnet_regsql.exe
Befehlszeilentools untersucht, um die für SQL-Cacheabhängigkeiten erforderliche Infrastruktur hinzuzufügen. Ein weiteres nützliches Befehlszeilentool in diesem Ordner ist das ASP.NET IIS-Registrierungstool (aspnet_regiis.exe
). Wie der Name schon sagt, wird das ASP.NET IIS-Registrierungstool in erster Linie verwendet, um eine ASP.NET 2.0-Anwendung bei dem professionellen Webserver von Microsoft, IIS, zu registrieren. Zusätzlich zu den IIS-bezogenen Features kann das ASP.NET IIS-Registrierungstool auch zum Verschlüsseln oder Entschlüsseln der angegebenen Konfigurationsabschnitte in Web.config
verwendet werden.
Die folgende Anweisung zeigt die allgemeine Syntax, die zum Verschlüsseln eines Konfigurationsabschnitts mit dem aspnet_regiis.exe
Befehlszeilentool verwendet wird:
aspnet_regiis.exe -pef section physical_directory -prov provider
-Abschnitt ist der Konfigurationsabschnitt zum Verschlüsseln (z. B. connectionStrings), der physical_directory ist der vollständige physische Pfad zum Stammverzeichnis der Webanwendung, und anbieter ist der Name des zu verwendenden geschützten Konfigurationsanbieters (z. B. DataProtectionConfigurationProvider). Wenn die Webanwendung in IIS registriert ist, können Sie alternativ den virtuellen Pfad anstelle des physischen Pfads mithilfe der folgenden Syntax eingeben:
aspnet_regiis.exe -pe section -app virtual_directory -prov provider
Im folgenden aspnet_regiis.exe
Beispiel wird der <connectionStrings>
Abschnitt mithilfe des DPAPI-Anbieters mit einem Schlüssel auf Computerebene verschlüsselt:
aspnet_regiis.exe -pef
"connectionStrings" "C:\Websites\ASPNET_Data_Tutorial_73_CS"
-prov "DataProtectionConfigurationProvider"
Auf ähnliche Weise kann das aspnet_regiis.exe
Befehlszeilentool verwendet werden, um Konfigurationsabschnitte zu entschlüsseln. Verwenden -pdf
Sie anstelle des Schalters -pef
(oder anstelle von -pe
) -pd
. Beachten Sie außerdem, dass der Anbietername beim Entschlüsseln nicht erforderlich ist.
aspnet_regiis.exe -pdf section physical_directory
-- or --
aspnet_regiis.exe -pd section -app virtual_directory
Hinweis
Da wir den DPAPI-Anbieter verwenden, der computerspezifische Schlüssel verwendet, müssen Sie auf demselben Computer ausführen aspnet_regiis.exe
, von dem aus die Webseiten bedient werden. Wenn Sie beispielsweise dieses Befehlszeilenprogramm von Ihrem lokalen Entwicklungscomputer ausführen und dann die verschlüsselte Web.config-Datei auf den Produktionsserver hochladen, kann der Produktionsserver die Verbindungszeichenfolge Informationen nicht entschlüsseln, da sie mit schlüsseln, die für Ihren Entwicklungscomputer spezifisch sind. Der RSA-Anbieter verfügt nicht über diese Einschränkung, da es möglich ist, die RSA-Schlüssel auf einen anderen Computer zu exportieren.
Grundlegendes zu Datenbankauthentifizierungsoptionen
Bevor eine Anwendung Abfragen von , INSERT
, UPDATE
oder DELETE
an eine Microsoft SQL Server-Datenbank ausstellen SELECT
kann, muss die Datenbank zuerst den Anforderer identifizieren. Dieser Prozess wird als Authentifizierung bezeichnet und bietet SQL Server zwei Authentifizierungsmethoden:
- Windows-Authentifizierung : Der Prozess, unter dem die Anwendung ausgeführt wird, wird für die Kommunikation mit der Datenbank verwendet. Beim Ausführen einer ASP.NET-Anwendung über Visual Studio 2005 s ASP.NET Development Server übernimmt die ASP.NET-Anwendung die Identität des aktuell angemeldeten Benutzers. Für ASP.NET Anwendungen auf Microsoft Internet Information Server (IIS) gehen ASP.NET Anwendungen normalerweise von der Identität von
domainName``\MachineName
oderdomainName``\NETWORK SERVICE
aus, obwohl dies angepasst werden kann. - SQL-Authentifizierung : Benutzer-ID und Kennwortwerte werden als Anmeldeinformationen für die Authentifizierung angegeben. Bei der SQL-Authentifizierung werden die Benutzer-ID und das Kennwort im Verbindungszeichenfolge angegeben.
Windows-Authentifizierung wird der SQL-Authentifizierung vorgezogen, da sie sicherer ist. Bei Windows-Authentifizierung ist der Verbindungszeichenfolge frei von Einem Benutzernamen und Kennwort, und wenn sich der Webserver und der Datenbankserver auf zwei verschiedenen Computern befinden, werden die Anmeldeinformationen nicht im Klartext über das Netzwerk gesendet. Bei der SQL-Authentifizierung werden die Anmeldeinformationen für die Authentifizierung jedoch im Verbindungszeichenfolge hartcodiert und vom Webserver an den Datenbankserver im Klartext übertragen.
Diese Tutorials haben Windows-Authentifizierung verwendet. Sie können feststellen, welcher Authentifizierungsmodus verwendet wird, indem Sie die Verbindungszeichenfolge überprüfen. Die Verbindungszeichenfolge in Web.config
unseren Tutorials waren:
Data Source=.\SQLEXPRESS; AttachDbFilename=|DataDirectory|\NORTHWND.MDF; Integrated Security=True; User Instance=True
Integrierte Sicherheit=True und fehlender Benutzername und Kennwort deuten darauf hin, dass Windows-Authentifizierung verwendet wird. In einigen Verbindungszeichenfolgen wird der Begriff Trusted Connection=Yes oder Integrated Security=SSPI anstelle von Integrated Security=True verwendet, aber alle drei geben die Verwendung von Windows-Authentifizierung an.
Das folgende Beispiel zeigt eine Verbindungszeichenfolge, die die SQL-Authentifizierung verwendet. $CREDENTIAL_PLACEHOLDER$
ist ein Platzhalter für das Kennwortschlüssel-Wert-Paar. Beachten Sie, dass die Anmeldeinformationen im Verbindungszeichenfolge eingebettet sind:
Server=serverName; Database=Northwind; uid=userID; $CREDENTIAL_PLACEHOLDER$
Stellen Sie sich vor, ein Angreifer kann die Datei Ihrer Anwendung Web.config
anzeigen. Wenn Sie die SQL-Authentifizierung verwenden, um eine Verbindung mit einer Datenbank herzustellen, auf die über das Internet zugegriffen werden kann, kann der Angreifer diese Verbindungszeichenfolge verwenden, um über SQL Management Studio oder über ASP.NET Seiten auf seiner eigenen Website eine Verbindung mit Ihrer Datenbank herzustellen. Um diese Bedrohung zu minimieren, verschlüsseln Sie die Verbindungszeichenfolge Informationen unter Verwendung des geschützten Web.config
Konfigurationssystems.
Hinweis
Weitere Informationen zu den verschiedenen Authentifizierungstypen, die in SQL Server verfügbar sind, finden Sie unter Erstellen sicherer ASP.NET Anwendungen: Authentifizierung, Autorisierung und sichere Kommunikation. Weitere Verbindungszeichenfolge Beispiele, die die Unterschiede zwischen der Windows- und SQL-Authentifizierungssyntax veranschaulichen, finden Sie unter ConnectionStrings.com.
Zusammenfassung
Standardmäßig kann auf Dateien mit einer .config
Erweiterung in einer ASP.NET Anwendung nicht über einen Browser zugegriffen werden. Diese Dateitypen werden nicht zurückgegeben, da sie möglicherweise vertrauliche Informationen wie Datenbankverbindungszeichenfolgen, Benutzernamen und Kennwörter usw. enthalten. Das geschützte Konfigurationssystem in .NET 2.0 trägt zum weiteren Schutz vertraulicher Informationen bei, indem bestimmte Konfigurationsabschnitte verschlüsselt werden können. Es gibt zwei integrierte geschützte Konfigurationsanbieter: einen, der den RSA-Algorithmus verwendet, und einer, der die Windows Data Protection-API (DPAPI) verwendet.
In diesem Tutorial haben wir uns mit der Verschlüsselung und Entschlüsselung von Konfigurationseinstellungen mit dem DPAPI-Anbieter befasst. Dies kann sowohl programmgesteuert erfolgen, wie wir in Schritt 2 gesehen haben, als auch über das aspnet_regiis.exe
Befehlszeilentool, das in Schritt 3 behandelt wurde. Weitere Informationen zur Verwendung von Schlüsseln auf Benutzerebene oder zur Verwendung des RSA-Anbieters finden Sie in den Ressourcen im Abschnitt Weitere Informationen.
Viel Spaß beim Programmieren!
Weitere Informationen
Weitere Informationen zu den in diesem Tutorial erläuterten Themen finden Sie in den folgenden Ressourcen:
- Erstellen einer sicheren ASP.NET-Anwendung: Authentifizierung, Autorisierung und sichere Kommunikation
- Verschlüsseln von Konfigurationsinformationen in ASP.NET 2.0-Anwendungen
- Verschlüsseln von
Web.config
Werten in ASP.NET 2.0 - Vorgehensweise: Verschlüsseln von Konfigurationsabschnitten in ASP.NET 2.0 mithilfe von DPAPI
- Gewusst wie: Verschlüsseln von Konfigurationsabschnitten in ASP.NET 2.0 mithilfe von RSA
- Die Konfigurations-API in .NET 2.0
- Windows Data Protection
Zum Autor
Scott Mitchell, Autor von sieben ASP/ASP.NET-Büchern und Gründer von 4GuysFromRolla.com, arbeitet seit 1998 mit Microsoft-Webtechnologien. Scott arbeitet als unabhängiger Berater, Trainer und Autor. Sein neuestes Buch ist Sams Teach Yourself ASP.NET 2.0 in 24 Stunden. Er kann unter mitchell@4GuysFromRolla.comoder über seinen Blog erreicht werden, der unter http://ScottOnWriting.NETzu finden ist.
Besonderen Dank an
Diese Tutorialreihe wurde von vielen hilfreichen Prüfern überprüft. Hauptprüfer für dieses Tutorial waren Teresa Murphy und Randy Schmidt. Möchten Sie meine anstehenden MSDN-Artikel lesen? Wenn dies der Fall ist, legen Sie eine Zeile unter abmitchell@4GuysFromRolla.com.
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für