Sichern von Standardsteuerelementen
Aktualisiert: November 2007
Die ASP.NET-Standardsteuerelemente sind eine Gruppe von Steuerelementen zum Erstellen von Formularen, in denen Benutzer Informationen eingeben oder auswählen können, bevor die Seite an den Server zurückgesendet wird. Standardsteuerelemente sind Webserversteuerelemente, die von der Control-Klasse erben. Zu den Webserversteuerelementen gehören z. B. die Steuerelemente TextBox, Image und AdRotator. Die Informationen in diesem Thema schildern bewährte Vorgehensweisen für Konfiguration und Codegenerierung, mit denen Sie die Sicherheit von Standardsteuerelementen verbessern können.
Die Sicherheit der Anwendung kann zum einen durch diese bewährten Vorgehensweisen für Konfiguration und Codegenerierung verbessert werden. Zum anderen ist ebenfalls wichtig, dass Sie den Anwendungsserver auf dem aktuellsten Stand halten und immer die neuesten Sicherheitsupdates für Microsoft Windows und Internetinformationsdienste (IIS) installieren. Das gilt ebenso für Sicherheitsupdates für Microsoft SQL Server und andere Datenquellen.
Ausführlichere Informationen über bewährte Vorgehensweisen beim Schreiben von sicherem Code und bei der Sicherung von Anwendungen finden Sie in dem Buch "Writing Secure Code" von Michael Howard und David LeBlanc. Auch Microsoft Patterns and Practices stellt auf diesem Gebiet eine vorzügliche Informationsquelle dar.
Darüber hinaus finden Sie Informationen über spezielle Sicherheitsmaßnahmen für andere Steuerelementtypen in folgenden Themen:
AdRotator-Steuerelement
Das AdRotator-Steuerelement zeigt die in einer Anzeigendatei (standardmäßig eine XML-Datei) definierten Anzeigen an. Alternativ können Sie Anzeigen in einer Datenbank speichern und sie programmgesteuert abrufen. Beachten Sie folgende Richtlinien, um das AdRotator-Steuerelement zu sichern:
Wenn Sie Anzeigeninformationen in einer XML-Datei speichern, speichern Sie die Datei im Ordner App_Data der Website, da der Inhalt dieses Ordners nicht als Antwort auf Webanforderungen ausgeliefert wird.
Verwenden Sie zum zusätzlichen Schutz von Anzeigendateien nicht die Dateinamenerweiterung .xml. Verwenden Sie stattdessen eine Erweiterung wie z. B. .ads. Ordnen Sie die Erweiterung .ads dann in IIS ASP.NET und in ASP.NET dem Forbidden-Handler zu. Sie tun dies mithilfe des folgenden Elements in der Datei Web.config der Site:
<httpHandlers> <add verb="*" path="*.ads" type="System.Web.HttpForbiddenHandler" /> </httpHandlers>
Informationen darüber, wie Sie in IIS eine Dateinamenerweiterung ASP.NET zuordnen, finden Sie unter Gewusst wie: Registrieren von HTTP-Handlern.
Legen Sie die entsprechenden Berechtigungen (meistens schreibgeschützt) für die Benutzerkonten fest, die die Anzeigendatei lesen. Falls die Website anonymen Zugriff unterstützt, handelt es sich dabei in der Regel um das lokale ASPNET-Benutzerkonto oder das NETZWERKDIENST-Konto.
Falls die Anzeigendatei nicht vorhanden ist, löst das AdRotator-Steuerelement einen Fehler aus. Dieser zeigt den Pfad und den Namen der Datei an – es werden also potenziell vertrauliche Informationen preisgegeben. Vermeiden Sie dieses Problem, indem Sie die korrekten Fehlerbehandlungstechniken beachten. Dazu gehören das Festlegen des customErrors-Elements in der Konfigurationsdatei, um auf eine benutzerdefinierte Fehlerdatei umzuleiten, und das Erstellen eines globalen Fehlerhandlers, der aufgerufen wird, wenn irgendwo in der Anwendung eine unbehandelte Ausnahme auftritt. Ausführliche Informationen finden Sie unter Gewusst wie: Anzeigen von sicheren Fehlermeldungen.
Wenn Sie Anzeigeninformationen aus einer Datenbank lesen, sollten Sie die Richtlinien für das Sichern des Zugriffs auf die Datenbank befolgen. Ausführliche Informationen finden Sie unter Sichern des Datenzugriffs.
Überprüfen Sie sämtliche Anzeigeninformationen aus nicht vertrauenswürdigen Quellen, bevor Sie sie mit dem AdRotator-Steuerelement verwenden. Da das AdRotator-Steuerelement keine Validierung ausführt und die aus der Anzeigendatei gelesenen Informationen auch nicht überprüft, werden Bilder und URLs auf der Webseite genau wie in der Anzeigendatei oder Datenbank gerendert.
BulletedList, CheckBoxList, RadioButtonList, DropDownList, ListBox
Die Steuerelemente BulletedList, CheckBoxList, DropDownList, ListBox und RadioButtonList stellen verschiedene Arten von HTML-Elementen (ul, input und select) dar. Dies ist abhängig vom Inhalt in Auflistungen oder von den Daten in einer Datenbank. Beachten Sie folgende Richtlinien, um diese Steuerelemente zu sichern:
Wenn das Steuerelement Daten aus einer Datenbank liest, sollten Sie die Richtlinien für das Sichern des Zugriffs auf die Datenbank befolgen. Ausführliche Informationen finden Sie unter Sichern des Datenzugriffs.
Wenn Sie nicht sicher sind, ob Skript oder anderes Markup in den anzuzeigenden Daten enthalten ist, behandeln Sie das DataBinding-Ereignis des Steuerelements. Codieren Sie anschließend die Informationen als HTML, bevor diese angezeigt werden. Ausführliche Informationen finden Sie unter Gewusst wie: Schutz gegen Skriptangriffe in einer Webanwendung durch Anwenden von HTML-Codierung auf Zeichenfolgen.
Wenn das BulletedList-Steuerelement für die Anzeige von Grafiken oder Links konfiguriert ist, sollte die URL für die Grafik oder den Link zu einer vertrauenswürdigen Adresse zeigen.
Kalendersteuerelement
Das Calendar-Steuerelement stellt LinkButton-Steuerelemente für die Navigation im Kalender dar. LinkButton-Steuerelemente führen mithilfe von Clientskript ein Postback durch. Wenn die Clientskriptunterstützung im Browser des Benutzers aus Sicherheitsgründen deaktiviert ist, wird die Navigation vom Calendar-Steuerelement nicht unterstützt.
Sie können das Calendar-Steuerelement für das Anzeigen von Datumsangaben verwenden, auch wenn Sie eine Navigation im Kalender nicht zulassen möchten. Gehen Sie nicht davon aus, dass ausgewählte Datumsangaben in einem Calendar-Steuerelement ordnungsgemäß formatiert sind. Verwenden Sie beim Konvertieren von Datumsangaben aus dem Calendar-Steuerelement in ein internes DateTime-Format die geeignete Fehlerbehandlung, falls das Datum nicht das richtige Format hat.
FileUpload-Steuerelement
Mithilfe des FileUpload-Steuerelements können Benutzer eine Datei von ihrem Computer auf den Webservercomputer hochladen. Beachten Sie folgende Richtlinien, um das FileUpload-Steuerelement zu sichern:
Vertrauen Sie keinen Dateien, die von Benutzern hochgeladen wurden – böswillige Benutzer könnten versuchen, ausführbare Dateien hochzuladen. Überprüfen Sie beim Speichern einer hochgeladenen Datei deren Dateinamenerweiterung, oder weisen Sie der Datei eine eigene Erweiterung zu.
Lassen Sie nicht zu, dass Benutzer einen beliebigen Pfad für den Speicherort von hochgeladenen Dateien angeben. Stellen Sie sicher, dass Dateinamen nur Pfadangaben enthalten, die Sie selbst hinzugefügt haben.
Machen Sie die interne Struktur der Website nicht für Benutzer erkennbar, die Dateien hochladen.
Legen Sie für Ordner, in denen hochgeladene Dateien gespeichert werden, Lese-/Schreibberechtigungen für die Benutzerkonten fest, von denen die Anwendung ausgeführt wird. Falls die Website anonymen Zugriff unterstützt, handelt es sich dabei in der Regel um das lokale ASPNET-Benutzerkonto oder das NETWORK SERVICE-Konto. Beschränken Sie Lese-/Schreibberechtigungen jedoch auf solche Ordner, in denen die Anwendung hochgeladene Dateien speichert.
Schützen Sie sich vor Denial-of-Service-Angriffen, indem Sie das maxRequestLength-Attribut des httpRuntime-Elements in der Konfigurationsdatei festlegen. Standardmäßig beträgt die maximale Anforderungslänge 4 MB. Weitere Konfigurationseinstellungen, die sich auf die Größe von hochgeladenen Dateien auswirken können, sind das requestLengthDiskThreshold-Attribut des httpRuntime-Elements und das memoryLimit-Attribut des processModel-Elements.
Bestimmen Sie die Größe der hochgeladenen Datei, indem Sie die ContentLength-Eigenschaft des durch das Steuerelement zurückgegebenen HttpPostedFile-Objekts abfragen und anhand der Größe entscheiden, ob Sie die Datei zulassen.
HiddenField-Steuerelement
Mit dem HiddenField-Steuerelement können Sie die Inhalte von <input type="hidden">-Elementen aus HTML in Servercode festlegen. Mithilfe von ausgeblendeten Feldern werden in der Seite Informationen gespeichert, die während der Seitenverarbeitung nützlich sind, aber nicht vom Benutzer gesehen werden sollen. Beachten Sie folgende Richtlinien, um das HiddenField-Steuerelement zu sichern:
Speichern Sie keine vertraulichen Informationen in HiddenField-Steuerelementen. Diese Informationen sind zwar nicht im Browser sichtbar, sie sind jedoch Teil der Seite und können von Benutzern problemlos im Quelltext der Seite gesehen werden.
Vertrauen Sie keinen Informationen in ausgeblendeten Feldern. Böswillige Benutzer können den Inhalt der ausgeblendeten Felder manipulieren.
Link
Das HyperLink-Steuerelement gibt eine URL im Browser aus. Stellen Sie sicher, dass die URL auf eine vertrauenswürdige Adresse zeigt.
Image-Steuerelement und ImageMap-Steuerelement
Zur Anzeige von Grafiken rendern das Image-Steuerelement und das ImageMap-Steuerelement eine URL im Browser. Stellen Sie sicher, dass die URL auf eine vertrauenswürdige Adresse zeigt.
ImageButton-Steuerelement
Das ImageButton-Steuerelement stellt ein Bild dar (img-Element), das mithilfe von Clientskript ein Postback ausführt. Wenn die Clientskriptunterstützung im Browser des Benutzers aus Sicherheitsgründen deaktiviert ist, funktioniert das Steuerelement nicht.
Um die Grafik anzuzeigen, rendert das Steuerelement eine URL im Browser. Stellen Sie sicher, dass die URL auf eine vertrauenswürdige Adresse zeigt.
Label-Steuerelement und Literal-Steuerelement
Das Label-Steuerelement und das Literal-Steuerelement zeigen Text auf der Seite an, indem sie diesen unverändert an den Browser übergeben. (Beim Label-Steuerelement können Sie zusätzlich die Formatierung angeben.) Wenn HTML-Markup im Text enthalten ist, wird dieses standardmäßig vom Browser interpretiert. Der Text wird entsprechend gerendert – dies kann auch die Ausführung von Skripts einschließen.
Wenn Sie bei Verwendung des Label-Steuerelements nicht genau wissen, ob der Text schädlichen Inhalt enthält, sollten Sie das HTML mit HTML-Codierung in Textdarstellung konvertieren. Ausführliche Informationen finden Sie unter Gewusst wie: Schutz gegen Skriptangriffe in einer Webanwendung durch Anwenden von HTML-Codierung auf Zeichenfolgen.
Wenn Sie das Literal-Steuerelement verwenden und nicht genau wissen, ob der Text schädlichen Inhalt enthält, führen Sie einen der folgenden Schritte aus:
Legen Sie die LiteralMode-Eigenschaft des Steuerelements auf Encode fest. Dadurch wird der HTML-Inhalt automatisch codiert.
Konvertieren Sie HTML mithilfe von HTML-Codierung in Textdarstellung. Ausführliche Informationen finden Sie unter Gewusst wie: Schutz gegen Skriptangriffe in einer Webanwendung durch Anwenden von HTML-Codierung auf Zeichenfolgen.
Weitere Informationen finden Sie unter Gewusst wie: Schutz gegen Skriptangriffe in einer Webanwendung durch Anwenden von HTML-Codierung auf Zeichenfolgen.
LinkButton-Steuerelement
Das LinkButton-Steuerelement gibt einen Link (a-Element) aus, der mithilfe von Clientskript ein Postback ausführt. Wenn die Clientskriptunterstützung im Browser des Benutzers aus Sicherheitsgründen deaktiviert ist, funktioniert das Steuerelement nicht.
MultiView
Mit dem MultiView-Steuerelement können Sie mehrere View-Steuerelemente hinzufügen und bedingt anzeigen. Auf diese Weise können Sie Seiten erstellen, die wie mehrseitige Formulare aussehen.
Wenn Sie Ansichten auf Basis von etwas leicht Manipulierbarem (wie einer URL-Abfragezeichenfolge) wechseln, könnten Sie damit Personen ungewollt Ansichten anzeigen, die diese eigentlich nicht sehen dürfen. Stellen Sie daher sicher, dass die Mechanismen zum Wechseln von Ansichten so sicher wie möglich sind. Weitere Informationen hierzu finden Sie unter Übersicht über die ASP.NET-Zustandsverwaltung.
TextBox-Steuerelement
Da Benutzer über das TextBox-Steuerelement nahezu beliebigen Text in eine Seite eingeben können, sollten Sie beim Übernehmen von Benutzereingaben aus diesem Steuerelement vorsichtig sein. Beachten Sie folgende Richtlinien, um das TextBox-Steuerelement zu sichern:
Verwenden Sie, wann immer möglich, Validierungssteuerelemente zur Beschränkung von Benutzereingaben auf zulässige Werte. Ausführliche Informationen finden Sie unter Einführung in die Validierungssteuerelemente.
Legen Sie die IsValid-Eigenschaft auf true fest, bevor Sie Ihren Servercode ausführen.
Verwenden Sie redundante Servervalidierung. Dies gilt besonders für CustomValidator-Steuerelemente. Erstellen Sie nicht nur clientseitige Validierungslogik.
Legen Sie die MaxLength-Eigenschaft des TextBox-Steuerelements fest, um die Textmenge zu beschränken, die Benutzer eingeben können. Böswillige Benutzer könnten in einem Textfeld große Datenmengen senden. Die Folgen davon wären eine beeinträchtigte Leistung Ihrer Anwendung und möglicherweise Datenbankfehler.
Codieren Sie Benutzereingaben mit der HtmlEncode-Methode. Diese konvertiert HTML in seine Textdarstellung (aus <b> wird beispielsweise <b>) und verhindert die Ausführung des HTML-Codes im Browser. Ausführliche Informationen finden Sie unter Gewusst wie: Schutz gegen Skriptangriffe in einer Webanwendung durch Anwenden von HTML-Codierung auf Zeichenfolgen.
Legen Sie die TextMode-Eigenschaft auf Password fest, um zu verhindern, dass der Inhalt des Textfelds im Textfeld sichtbar ist (durch das Anzeigen von Punkten). Beachten Sie, dass das Festlegen der TextMode-Eigenschaft auf Password keinen weiteren Schutz bietet: Der Inhalt des Textfelds ist nicht verschlüsselt oder anderweitig verborgen, und die Informationen werden als Klartext an den Server gesendet. Stellen Sie daher beim Verwenden von Password zusätzliche Methoden zur Datensicherung bereit.
Falls Sie vertrauliche Informationen, z. B. Kennwörter oder Kreditkartennummern, erfassen, sollten Sie SSL (Secure Sockets Layer) verwenden, um die Kommunikation zwischen Client und Server abzusichern. Dies gilt für jegliche Verwendung von TextBox-Steuerelementen sowie von Steuerelementen, die TextBox-Steuerelemente enthalten, wie das CreateUserWizard-Steuerelement.
Assistent
Mit dem Wizard-Steuerelement können Sie mehrschrittige Dateneingabeformulare erstellen. Beachten Sie bei der Verwendung des Wizard-Steuerelements folgende Sicherheitsaspekte:
Vertrauliche Informationen werden von Wizard nicht grundsätzlich geschützt. Wenn Sie vertrauliche Daten im Assistenten erfassen, sollten Sie mit SSL die Kommunikation zwischen Client und Server für die Seite absichern, die Wizard enthält.
Das Wizard-Steuerelement enthält einige nicht sichtbare Steuerelemente, die seine Funktionalität unterstützen. Benutzer könnten diese Steuerelemente und ihre Werte manipulieren, um Assistentenschritte in der falschen Reihenfolge anzuzeigen oder um Assistentenschritte anzuzeigen, die nur bestimmten Benutzern angezeigt werden sollen. Um dies zu verhindern, sorgen Sie dafür, dass die Assistentenschritte in der richtigen Reihenfolge angezeigt werden und dass Schritte mit vertraulichen Informationen nur angezeigt werden, wenn die richtigen Bedingungen erfüllt sind.
XML-Steuerelement
Das Xml-Steuerelement zeigt den Inhalt einer XML-Datei oder einer Zeichenfolge mit XML an und wendet optional eine XML-Transformation an. Beachten Sie folgende Richtlinien, um das Xml-Steuerelement zu sichern:
Wenn Sie den Inhalt einer XML-Datei anzeigen, legen Sie die XML-Datei möglichst in den Ordner App_Date der Website, da der Inhalt dieses Ordners nicht als Antwort auf Webanforderungen ausgeliefert wird.
Zeigen Sie nur XML aus vertraulichen Quellen an.
Verwenden Sie nur Transformationen aus vertraulichen Quellen.