Grundlegende Sicherheitshinweise für Webanwendungen

Aktualisiert: November 2007

Bei der Erstellung von sicheren Webanwendungen sind zahlreiche Aspekte zu berücksichtigen. Zunächst benötigen Sie Informationen zu gängigen Sicherheitsschwachstellen. Ferner müssen Sie sich mit den Sicherheitsfunktionen von Windows, .NET Framework und ASP.NET vertraut machen sowie nachvollziehen, wie Sie diese zur Abwehr von Bedrohungen einsetzen können.

Auch wenn Sie im Umgang mit Sicherheitsbelangen noch unerfahren sind, sollten Sie einige grundlegenden Maßnahmen zum Schutz einer Webanwendung ergreifen. Die folgende Liste führt minimale Sicherheitsstandards auf, die für alle Webanwendungen gelten und die Sie einhalten sollten:

  • Allgemeine Sicherheitsempfehlungen für Webanwendungen

  • Ausführen von Anwendungen mit minimalen Berechtigungen

  • Machen Sie sich mit Ihren Benutzern vertraut

  • Schutz vor böswilligen Benutzereingaben

  • Sicherer Datenbankzugriff

  • Erstellen sicherer Fehlermeldungen

  • Geheimhaltung von Geheimnissen

  • Sichere Verwendung von Cookies

  • Schutz vor Denial-of-Service-Bedrohungen

    Hinweis:

    Eine umfassende und detaillierte Anleitung zum Thema Sicherheit, die Ihnen beim Entwerfen, Entwickeln, Konfigurieren und Bereitstellen noch sichererer ASP.NET-Webanwendungen Hilfestellung leistet, finden Sie in den Sicherheitsmodulen auf der Microsoft Patterns and Practices-Website.

Allgemeine Sicherheitsempfehlungen für Webanwendungen

Bedenken Sie jedoch, dass auch die ausgeklügeltsten Verfahren zur Anwendungssicherung vergebens sein können, wenn böswillige Benutzer ungehindert auf Ihre Computer zugreifen können. Befolgen Sie die nachstehenden Richtlinien:

  • Führen Sie regelmäßige Sicherungen durch, und bewahren Sie die Sicherungskopien sicher auf.

  • Achten Sie darauf, dass der Webservercomputer auch physikalisch gesichert ist. Der Computer darf für unbefugte Benutzer nicht zugänglich sein, da diese ihn andernfalls ausschalten oder entwenden könnten.

  • Verwenden Sie das Windows-Dateisystem anstelle des FAT32-Systems. NTFS bietet erheblich mehr Sicherheit als FAT32. Weitere Informationen entnehmen Sie der Windows-Dokumentation.

  • Sichern Sie den Webserver-Computer sowie alle Computer innerhalb des Netzwerks mit sicheren Kennwörtern.

  • Sichern Sie IIS. Ausführliche Informationen finden Sie auf der Microsoft TechNet Security Center-Website.

  • Deaktivieren Sie Anschlüsse und Dienste, die Sie nicht verwenden.

  • Verwenden Sie ein Virenschutzprogramm, das den eingehenden und ausgehenden Verkehr überwacht.

  • Definieren und implementieren Sie eine Richtlinie, die es Benutzern untersagt, Kennwörter an einem leicht zugänglichen Speicherort aufzubewahren.

  • Verwenden Sie einen Firewall. Empfehlungen hierzu finden Sie auf der Microsoft Security-Website unter Microsoft Firewall Guidelines.

  • Installieren Sie die neuesten Sicherheitspatches von Microsoft und anderen Anbietern. Auf der Microsoft TechNet Security Center-Website finden Sie beispielsweise eine Liste mit den neuesten Sicherheitsbulletins für alle Microsoft-Produkte. Andere Lieferanten bieten ähnliche Sites an.

  • Verwenden Sie die Ereignisprotokollierung von Windows, und untersuchen Sie die Protokolle in regelmäßigen Abständen auf verdächtige Aktivitäten. Dazu zählen auch wiederholte Versuche, sich bei Ihrem System anzumelden, sowie Anforderungen an den Webserver in auffällig hoher Zahl.

Ausführen von Anwendungen mit minimalen Berechtigungen

Die Anwendung wird in einem Kontext ausgeführt, der über spezifische Berechtigungen für den lokalen Computer und potenziell auch für Remotecomputer verfügt. Informationen zum Konfigurieren der Anwendungsidentität finden Sie unter Konfigurieren der Prozessidentität in ASP.NET. Für die Ausführung mit minimalen Berechtigungen befolgen Sie die nachstehenden Richtlinien:

  • Führen Sie die Anwendung nicht mit der Identität eines Systembenutzers (Administrators) aus.

  • Führen Sie die Anwendung in einem Benutzerkontext aus, der nur über die unbedingt erforderlichen Berechtigungen verfügt.

  • Legen Sie für alle Ressourcen, die zur Ausführung der Anwendung erforderlich sind, Berechtigungen fest (Zugriffssteuerungslisten oder ACLs). Wählen Sie stets die Einstellung mit den eingeschränktesten Berechtigungen. Wenn die Anwendung sich dafür eignet, können Sie beispielsweise Dateien als schreibgeschützt festlegen. Eine Liste der minimalen ACL-Berechtigungen, die für die Identität einer ASP.NET-Anwendung benötigt werden, finden Sie unter Erforderliche Zugriffssteuerungslisten für ASP.NET.

  • Bewahren Sie die Dateien für die Webanwendung in einem Ordner auf, der sich unterhalb von deren Stammverzeichnis befindet. Gestatten Sie Benutzern nicht, Pfade für den Zugriff auf Dateien in der Anwendung festzulegen. Dadurch vermeiden Sie, dass Benutzer auf das Stammverzeichnis des Servers zugreifen können.

Machen Sie sich mit Ihren Benutzern vertraut

In vielen Anwendungen greifen Benutzer anonym (ohne Anmeldeinformationen bereitstellen zu müssen) auf die Site zu. In diesen Fällen greift die Anwendung im Kontext eines vordefinierten Benutzers auf Ressourcen zu. Standardmäßig handelt es sich dabei um den lokalen ASPNET-Benutzer (Windows 2000 oder Windows XP) oder den NETZWERKDIENST-Benutzer (Windows Server 2003) auf dem Webservercomputer. Befolgen Sie die nachstehenden Richtlinien, um den Ressourcenzugriff nur authentifizierten Benutzern zu gestatten:

  • Wenn es sich bei Ihrer Anwendung um eine Intranetanwendung handelt, konfigurieren Sie sie für die Verwendung der integrierten Windows-Sicherheit. Dadurch können die Anmeldeinformationen des Benutzers für den Zugriff auf Ressourcen verwendet werden. Weitere Informationen finden Sie unter Identitätswechsel in ASP.NET.

  • Wenn Sie die Anmeldeinformationen des Benutzers erfassen müssen, verwenden Sie eine der Authentifizierungstrategien von ASP.NET. Ein Beispiel finden Sie unter Verwalten von Benutzern durch Mitgliedschaft.

Schutz vor böswilligen Benutzereingaben

Benutzereingaben sollten grundsätzlich nicht als vertrauenswürdig eingestuft werden. Für böswillige Benutzer ist es sehr einfach, potenziell schädliche Informationen über den Client an die Anwendung zu senden. Befolgen Sie zum Schutz gegen böswillige Eingaben die folgenden Richtlinien:

  • Filtern Sie in ASP.NET-Webseiten Benutzereingaben mit HTML-Tags aus – möglicherweise sind Skripts darin enthalten. Ausführliche Informationen finden Sie unter Gewusst wie: Schutz gegen Skriptangriffe in einer Webanwendung durch Anwenden von HTML-Codierung auf Zeichenfolgen.

  • Zeigen Sie niemals ungefilterte Benutzereingaben an. Vor der Anzeige von nicht vertrauenswürdigen Informationen sollten Sie den HTML-Code verschlüsseln, um potenziell schädliche Skripts in anzeigbare Zeichenfolgen umzuwandeln.

  • Speichern Sie ungefilterte Benutzereingaben nie in einer Datenbank.

  • Wenn Sie HTML-Eingaben von Benutzern akzeptieren möchten, filtern Sie sie manuell. Legen Sie für den Filter sorgfältig fest, welche Elemente Sie akzeptieren möchten. Erstellen Sie keine Filter, die versuchen, schädliche Eingaben auszufiltern. Es ist nahezu unmöglich, alle möglichen böswilligen Eingaben vorauszusehen.

  • Gehen Sie nicht davon aus, dass Informationen, die aus dem HTTP-Anforderungsheader (im HttpRequest-Objekt) stammen, sicher sind. Arbeiten Sie mit Sicherheitsüberprüfungen für Abfragezeichenfolgen, Cookies usw. Machen Sie sich bewusst, dass vom Browser an den Server gegebene Informationen (Benutzer-Agent-Informationen) gespooft werden können, wenn dies für die Anwendung eine Rolle spielt.

  • Speichern Sie möglichst keine vertraulichen Informationen an Speicherorten, die vom Browser aus zugänglich sind, wie beispielsweise in ausgeblendeten Feldern oder Cookies. Speichern Sie beispielsweise keine Kennwörter in Cookies.

    Hinweis:

    Der Ansichtszustand wird verschlüsselt in einem ausgeblendeten Feld gespeichert. Dieser umfasst standardmäßig einen Meldungsauthentifizierungscode (MAC), sodass die Seite erkennen kann, ob der Ansichtszustand verfälscht wurde. Wenn vertrauliche Informationen im Ansichtszustand gespeichert sind, verschlüsseln Sie diese, indem Sie die ViewStateEncryptionMode-Eigenschaft der Seite auf true festlegen.

Sicherer Datenbankzugriff

Datenbanken verfügen in der Regel über ein eigenständiges Sicherheitssystem. Einen der wesentlichen Aspekte bei der Erstellung von sicheren Webanwendungen stellt die Einrichtung eines Verfahrens dar, mit dem die Anwendung sicher auf die Datenbank zugreifen kann. Befolgen Sie die nachstehenden Richtlinien:

  • Verwenden Sie die integrierte Sicherheit der Datenbank, um den Zugriff auf Datenbankressourcen einzuschränken. Die genaue Strategie hängt von der Datenbank sowie von der Anwendung ab:

    • Wenn die Anwendung dafür geeignet ist, verwenden Sie die integrierte Sicherheit, sodass nur von Windows authentifizierte Benutzer auf die Datenbank zugreifen können. Die integrierte Sicherheit ist sicherer als das Übergeben expliziter Anmeldeinformationen an die Datenbank.

    • Wenn die Anwendung auch für den anonymen Zugriff bestimmt ist, erstellen Sie zunächst einen Einzelbenutzer mit stark eingeschränkten Berechtigungen. Melden Sie sich anschließend als dieser Benutzer an, und führen Sie Abfragen aus.

  • Erstellen Sie keine SQL-Anweisungen, indem Sie Zeichenfolgen mit Benutzereingaben miteinander verknüpfen. Erstellen Sie stattdessen eine parametrisierte Abfrage, und richten Sie anhand der Benutzereingabe Parameterwerte ein.

  • Wenn Sie einen Benutzernamen und ein Kennwort für die Anmeldung bei einer Datenbank speichern müssen, speichern Sie die Informationen in der Datei Web.config, und sichern Sie die Datei mit der geschützten Konfiguration. Ausführliche Informationen finden Sie unter Verschlüsseln von Konfigurationsinformationen mithilfe der geschützten Konfiguration.

Weitere Informationen zum sicheren Zugriff auf Daten finden Sie unter Sichern des Datenzugriffs und Sichern von ADO.NET-Anwendungen.

Erstellen sicherer Fehlermeldungen

Unter Umständen können böswillige Benutzer wichtige Informationen über die Anwendung auch aus den angezeigten Fehlermeldungen ableiten. Befolgen Sie die nachstehenden Richtlinien:

  • Erstellen Sie keine Fehlermeldungen, die Informationen abrufen, die für böswillige Benutzer von Nutzen sein könnten, wie beispielsweise Benutzernamen.

  • Konfigurieren Sie die Anwendung so, dass Benutzer keine detaillierten Fehlermeldungen erhalten. Vor dem Anzeigen von detaillierten Fehlermeldungen zu Debuggingzwecken sollten Sie zuerst überprüfen, ob der Benutzer lokal beim Webserver angemeldet ist. Ausführliche Informationen finden Sie unter Gewusst wie: Anzeigen von sicheren Fehlermeldungen.

  • Mit dem customErrors-Konfigurationselement können Sie steuern, welche Benutzer Ausnahmen vom Server anzeigen können.

  • Erstellen Sie benutzerdefinierte Fehlerbehandlungsverfahren für Situationen, in denen es potenziell zu Fehlern kommen kann, wie beispielsweise beim Zugriff auf die Datenbank. Weitere Informationen finden Sie unter Fehlerbehandlung in ASP.NET-Seiten und -Anwendungen.

Sicheres Aufbewahren vertraulicher Informationen

Bei vertraulichen Informationen handelt es sich um Informationen, die nicht jedem Benutzer zugänglich sein dürfen. Typische vertrauliche Informationen sind Kennwörter oder Verschlüsselungsschlüssel. Wenn böswillige Benutzer Zugriff auf vertrauliche Informationen erhalten, sind die durch die Verschlüsselung geschützten Daten gefährdet. Befolgen Sie die nachstehenden Richtlinien:

  • Wenn die Anwendung vertrauliche Informationen vom Browser an den Server bzw. umgekehrt überträgt, sollten Sie die SSL-Verschlüsselung (Secure Sockets Layer) verwenden. Ausführliche Informationen zum Sichern einer Site mit SSL finden Sie in der Microsoft Knowledge Base im Artikel Q307267, "HOW TO: Secure XML Web Services with Secure Socket Layer in Windows 2000", unter https://support.microsoft.com/?in=de.

  • Verwenden Sie die geschützte Konfiguration, um vertrauliche Informationen in Konfigurationsdateien wie Web.config oder Machine.config zu schützen. Weitere Informationen finden Sie unter Verschlüsseln von Konfigurationsinformationen mithilfe der geschützten Konfiguration.

  • Wenn das Speichern vertraulicher Informationen erforderlich ist, sollten diese grundsätzlich nicht auf einer Webseite gespeichert werden. Dies gilt auch für Formate, die für Benutzer eigentlich nicht sichtbar sind (z. B. innerhalb von Servercode).

  • Verwenden Sie die im System.Security.Cryptography-Namespace angegebenen sicheren Verschlüsselungsalgorithmen.

Sichere Verwendung von Cookies

Cookies stellen ein nützliches Verfahren zur Bereitstellung von benutzerspezifischen Informationen dar. Da Cookies allerdings an den Browsercomputer gesendet werden, sind sie für Spoofing oder sonstigen Missbrauch hochgradig anfällig. Befolgen Sie die nachstehenden Richtlinien:

  • Speichern Sie keine wichtigen Informationen in Cookies. Speichern Sie Benutzernamen oder Kennwörter weder dauerhaft noch temporär in Cookies. Grundsätzlich sollten Sie in Cookies nur Informationen speichern, die bei Spoofing die Anwendung nicht gefährden können. Stattdessen können Sie in Cookies Verweise auf die Serverspeicherorte speichern, an denen sich die Informationen befinden.

  • Legen Sie das Ablaufdatum von Cookies auf den kürzestmöglichen Zeitpunkt fest. Vermeiden Sie nach Möglichkeit permanente Cookies.

  • Prüfen Sie, ob die in den Cookies enthaltenen Informationen verschlüsselt werden können.

  • Ziehen Sie in Erwägung, die Secure-Eigenschaft und die HttpOnly-Eigenschaft des Cookies auf true festzulegen.

Schutz vor Denial-of-Service-Bedrohungen

Böswillige Benutzer können Ihre Anwendung auch indirekt angreifen, indem sie beispielsweise deren Verfügbarkeit beeinträchtigen. Ein böswilliger Benutzer könnte die Anwendung so stark auslasten, dass sie anderen Benutzern nicht mehr zur Verfügung steht oder sogar abstürzt. Befolgen Sie die nachstehenden Richtlinien:

  • Arbeiten Sie mit Fehlerbehandlungsverfahren (z. B. try-catch). Sehen Sie einen finally-Block vor, in dem Sie die Ressourcen im Fall von Systemfehlern freigeben können.

  • Konfigurieren Sie in IIS die Drosselungsfunktion, wodurch verhindert wird, dass Anwendungen eine inadäquate CPU-Zeit in Anspruch nehmen.

  • Prüfen Sie die Größenbeschränkungen für Benutzereingaben, bevor Sie sie verwenden oder speichern.

  • Richten Sie Größenbeschränkungen für Datenbankabfragen ein. Bevor Sie beispielsweise Abfrageergebnisse in einer ASP.NET-Webseite speichern, sollten Sie sicherstellen, dass die Anzahl von Datensätzen nicht auffällig hoch ist.

  • Richten Sie eine Größenbeschränkung für Dateiuploads ein, wenn Ihre Anwendung dafür vorgesehen ist. Mit der nachfolgenden Syntax können Sie Beschränkungen in der Datei Web.config festlegen, wobei der Wert maxRequestLength in Kilobyte angegeben wird:

    <configuration>
       <system.web>
            <httpRuntime maxRequestLength="4096" />
       </system.web>
    </configuration>
    

    Außerdem können Sie mit der RequestLengthDiskThreshold-Eigenschaft den Speicherbedarf für große Uploads und den Formularversand verringern.

Siehe auch

Konzepte

Übersicht über Sicherheitsrisiken bei Webanwendungen