ASP.NET 2.0 - Mitglieder- und Rollenverwaltung mit IIS, Teil 1: Übersicht über Sicherheit und Konfiguration

Veröffentlicht: 19. Feb 2006
Von Peter Kellner

In diesem ersten von zwei Artikeln betrachtet Peter Kellner das Erstellen einer Anwendung zur Verwaltung von Microsoft ASP.NET 2.0-Mitgliedschaftsdatenbanken. Dieser Artikel erörtert das Sichern der Anwendung, damit ausschließlich die vorgesehenen Administratoren auf diese Daten zugreifen können (7 gedruckte Seiten).

Auf dieser Seite

Zusammenfassung Zusammenfassung
Einführung Einführung
Vorüberlegungen zur Sicherheit Vorüberlegungen zur Sicherheit
Rollenbasierte Sicherheit für eine ASP.NET 2.0-Website Rollenbasierte Sicherheit für eine ASP.NET 2.0-Website
Schlussbemerkung Schlussbemerkung
Der Autor Der Autor

Zusammenfassung

Dieser erste Artikel beschreibt die sichere Verwendung und Einrichtung einer Anwendung mit drei Ebenen zur Verwaltung von ASP.NET-Mitgliedschaften und -Rollen. Der Fokus dieses Artikels liegt auf dem Konfigurieren, Verwenden und in erster Linie dem Sichern dieser Anwendung. Gleichzeitig bietet er einen Überblick über die Implementierung in einer typischen Microsoft ASP.NET 2.0-Webanwendung. Die Objekte Membership und Roles werden dabei eingesetzt, ohne jedoch deren interne Strukturen ausführlich zu behandeln. Das Verwalten von Mitgliedern und Rollen scheint keine Unterschiede zur Verwaltung von Daten aus einer einfachen Datenquelle aufzuweisen. Im zweiten Artikel werden die internen Strukturen dieser Steuerelemente und Objekte so ausführlich erläutert, dass Entwickler unter Verwendung ähnlicher Techniken eigene erstellen können.

Einführung

ASP.NET 2.0 erweitert die Benutzerauthentifizierung direkt in die Anwendungs-Entwicklungsdomäne. Der Verweis auf eine .NET-Standardbibliothek (system.web.security) ermöglicht Entwicklern bei geringstem Aufwand eine vollständige Authentifizierung in eigenen Anwendungen. Vor diesem Hintergrund darf nicht vergessen werden, dass ein gewisses Maß an Sorgfalt notwendig ist, um die Möglichkeit zur Kompromittierung der Sicherheit der zu erstellenden Anwendung während der Ausführung möglichst gering zu halten.

Dieser Artikel bietet einen Überblick über die Sicherheitsmechanismen und zeigt beispielhafte Sicherheitseinstellungen, die einen wesentlichen Bestandteil einer sicheren Umgebung für Webanwendungen darstellen. ASP.NET 2.0 bietet zahlreiche unterschiedliche Konfigurationsoptionen, die je nach Sicherheitsanforderungen eingesetzt werden können. In diesem Artikel werden die Vor- und Nachteile dieser Konfigurationsoptionen erörtert.

Vorüberlegungen zur Sicherheit

Sichern der physischen Umgebung

Es wurde schon oft gesagt, dass die Sicherheit eines Computers am Netzschalter des Gehäuses beginnt. Unabhängig von der Sicherung des Systems bleibt ab Betriebssystemebene ein physischer Schutz ganz wesentlich. Man muss davon ausgehen, dass jede Person mit physischem Zugriff auf einen Computer immer in der Lage sein wird, auf verschiedene Weise die Sicherheit zu gefährden.

Weitere Informationen zu bewährten Methoden zur Sicherung der physischen Umgebung finden Sie in diesem Artikel (in englischer Sprache) auf der Microsoft TechNet-Website.

Sichern der Domänenumgebung

Der nächste Schritt besteht aus dem Einsatz bewährter Methoden zum Einrichten von Benutzerkonten, Kennwörtern und Berechtigungen. Wenn etwa ein Benutzer ohne Berechtigungen in der Lage ist, auf eine Datenbank mit Sicherheitsdaten für die Webanwendung direkt zuzugreifen, ist die Anwendung möglicherweise gefährdet.

Weitere Informationen zur Sicherung der Domänenumgebung eines Computers finden Sie in den folgenden Artikeln (in englischer Sprache) mit zahlreichen sehr hilfreichen Tipps und Empfehlungen auf der Microsoft Security-Homepage.

Sichern der .NET-Umgebung

Die .NET-Umgebung ermöglicht Codezugriffssicherheit. Damit ist das Verknüpfen einzelner System- und Anwendungsbibliotheken mit unterschiedlichen Vertrauensstufen gemeint. Dies kann in einer gemeinsamen Hosting-Umgebung sehr wichtig sein, in der möglicherweise zahlreiche Webanwendungen ausgeführt werden. Jede Webanwendung, die von verschiedenen Benutzern ausgeführt werden kann, erfordert möglicherweise gegenseitige Isolierungs- und Schutzmaßnahmen. Darüber hinaus kann jede Webanwendung ohne eine solche Isolierung Einfluss auf wesentliche Systemfunktionen haben.

In diesem Artikel wird davon ausgegangen, dass der ASP.NET-Benutzer (in dessen Auftrag IIS ausgeführt wird) über die höchste Vertrauensstufe verfügt. Dies ist üblicherweise der Fall, wenn eine Webanwendung in einer sicheren Umgebung ausgeführt wird. Weitere Informationen zur Verwendung von Sicherheit auf Codeebene zur Erweiterung der Sicherheit eines Webservers finden Sie in dem MSDN-Artikel Using Code Access Security with ASP.NET (in englischer Sprache).

Beziehung zwischen ASP.NET und IIS

ASP.NET unterstützt bei der Zusammenarbeit mit IIS drei Authentifizierungsanbieter: Formular-Authentifizierung (verwendet anwendungsspezifische Logik), Passport-Authentifizierung (ein zentralisierter Authentifizierungsdienst von Microsoft) und Windows-Authentifizierung (verwendet die direkt über IIS verfügbare Authentifizierung). Die Standard-Authentifizierung für ASP.NET-Projekte, die Formular-Authentifizierung, wird in diesem Artikel verwendet. Die Art der Authentifizierung wird in der Datei web.config festgelegt. Die mögliche Syntax wird im Folgenden dargestellt.

<authentication mode = "{Windows|Forms|Passport|None}">
</authentication>

Ein Diagramm zur Ablaufsteuerung bei der Anmeldung eines Webclients finden Sie in diesem Artikel (in englischer Sprache).

Beachten Sie, dass dieser Artikel bereits im Jahr 2001 zur Verwendung mit IIS 5.1 geschrieben wurde, nicht mit den aktuelleren Versionen ab IIS 6.0.

Sicherheitsfluss zwischen IIS und ASP.NET
Abbildung 1: Sicherheitsfluss zwischen IIS und ASP.NET

Rollenbasierte Sicherheit für eine ASP.NET 2.0-Website

Erste Einrichtung und Konfiguration

Die Datei "Web.Config" / Selten geänderte Elemente

Einige Parameter, die das allgemeine Verhalten einer ASP.NET 2.0-Webanwendung beeinflussen, werden in der Datei web.config konfiguriert. Beispiele hierfür sind der Verweis auf den Mitgliedschaftsanbieter (oder die Datenbank), die Angabe der notwendigen Kennwortsicherheit und die Angabe, ob eine E-Mail zum Registrieren erforderlich ist. Der relevante Abschnitt der Datei web.config wird im Folgenden dargestellt, die Beispielwerte entsprechen einer einfachen Sicherheitskonfiguration. Weitere Einzelheiten finden Sie in der Visual Studio 2005-Hilfe unter den Stichwörtern "Mitgliedschaft Mitglieder". Jeder Sicherheitsparameter wird dort ausführlich erläutert.

<providers>
 <remove name="AspNetSqlMembershipProvider"/>
 <add name="AspNetSqlMembershipProvider" 
   type="System.Web.Security.SqlMembershipProvider, 
   System.Web, Version=2.0.0.0, Culture=neutral, 
   PublicKeyToken=b03f5f7f11d50a3a" 
   connectionStringName="LocalSqlServer"  
   enablePasswordRetrieval="false" 
   enablePasswordReset="true" 
   requiresQuestionAndAnswer="true" 
   applicationName="/" 
   requiresUniqueEmail="false" 
   minRequiredPasswordLength="1" 
   minRequiredNonalphanumericCharacters="0" 
   passwordFormat="Hashed" 
   maxInvalidPasswordAttempts="5" 
   passwordAttemptWindow="10" 
   passwordStrengthRegularExpression=""
   commentTimeout=""/>
</providers>

Zusätzlich zu dem oben dargestellten Abschnitt in web.config enthält die Datei machine.config die Standardverbindungszeichenfolge für die Mitgliedschaftsdatenbank. In web.config lässt sich eine abweichende Verbindungszeichenfolge konfigurieren. Zur Verbesserung der Sicherheit kann die Verbindungszeichenfolge codiert und das Datenbank-Kennwort verschlüsselt werden. Diese Möglichkeiten wurden bereits in zahlreichen Artikeln beschrieben. Die Microsoft-Kurzanleitungen (in englischer Sprache) bieten gute Beispiele zur Verwendung von Verschlüsselungstechniken in der web.config-Datei.

Die Datei "Web.Config" / Sicherheit von ASPX-Seiten

In einer Webanwendung kann jeder Webseite eine Sicherheitsstufe zugewiesen werden. Dies erfolgt durch Definition der für den Zugriff auf die Seite erforderlichen Rolle. Die in web.config verwendete Syntax ist sehr einfach. Der folgende Ausschnitt aus der Datei web.config legt fest, dass auf die Webseite MembershipGrid.aspx ausschließlich Benutzer zugreifen können, denen die Administratorrolle zugewiesen wurde.

<system.web>
  <location path="MembershipGrid.aspx" >
    <system.web>
      <authorization >
      <allow roles="Administrators"/>
      </authorization>
    </system.web>
  </location>
</system.web>

Sollen alle Seiten in einem Unterverzeichnis nur für eine bestimmte Benutzerrolle verfügbar sein, würde web.config folgendermaßen aussehen. In diesem Fall können auf die Dateien im Pfad ~/AdminDir ausschließlich Benutzer mit Administratorrolle zugreifen.

<system.web>
  <location path="AdminDir" >
    <system.web>
      <authorization >
      <allow roles="Administrators"/>
      </authorization>
    </system.web>
  </location>
</system.web>

Die Datei "Web.Config" / Sicherheit in ASPX-Seiten

Oft ist eine feinere Abstufung der Sicherheit notwendig, als die bisher beschriebene. Es könnte erforderlich sein, ein Steuerelement (etwa eine Schaltfläche oder eine ASPX-Seite) zu schützen. Zur Umsetzung ist eine programmtechnische Änderung des mit dem Steuerelement verknüpften Attributs notwendig. Wenn eine Schaltfläche zum Löschen je nach Benutzerrolle ausgeblendet werden muss, sind dazu zwei Dinge zu erledigen: Zunächst sollte eine ShowButtonBasedOnRole-Methode zur Codebehind-Klasse der Webseite hinzugefügt werden. Sie sollte TRUE zurückgeben, wenn der Benutzer die erforderliche Rolle aufweist, und FALSE, wenn dies nicht der Fall ist.

protected bool ShowButtonBasedOnRole(string RoleOfInterest)
{
return User.IsInRole(RoleOfInterest);   
}
Anschließend wird das Sichtbarkeitsattribut der Schaltfläche in der aktuellen ASPX-Seite über die Codebehind-Methode ShowButtonBasedOnRole festgelegt. Damit sieht die Deklaration der Schaltfläche folgendermaßen aus. 
<asp:Button
 ID="Button1" runat="server" Text="Button"
 Visible='<%# (bool) ShowDeleteRowBasedOnRole("administrator") %>'> />

Wenn eine Schaltfläche in Abhängigkeit zu einer von mehreren Rollen gesetzt werden soll, kann der Parameter als Zeichenfolge übergeben werden, damit alle diese Rollen vor der Rückgabe der Antwort, ob der Benutzer einer dieser Rollen zugewiesen ist, geprüft werden können.

Verwenden der ASPX-Seite zur Mitglieder- und Rollenverwaltung

Die Verwendung der in diesem Projekt enthaltenen ASPX-Seite (Membership.aspx) erfordert ein paar vorbereitende Maßnahmen. Zunächst müssen Sie die beiden Datenklassen aus der Artikel-Projektdatei in das Projekt-Zielverzeichnis für den Anwendungscode kopieren und einbinden. Diese beiden Dateien haben die Namen MembershipDataObject.cs und RoleDataObject.cs. Anschließend müssen Sie die Datei Membership.aspx und ihre Codebehind-Seite Membership.aspx.cs in das aktuelle Projekt verschieben.

Es ist sehr wichtig, dass diese Seite vor dem Zugriff durch Benutzer geschützt wird, denen keine Administratorrolle zugewiesen ist. Andernfalls könnte jeder Benutzer die Anmeldeinformationen jedes beliebigen Benutzers ändern. Stellen Sie daher sicher, dass die Seite Membership.aspx in der Datei web.config geschützt wird. Im Folgenden finden Sie einige Beispielzeilen aus einer web.config-Datei, die diesem Zweck dienen.

<system.web>
  <location path="Membership.aspx" >
    <system.web>
      <authorization >
      <allow roles="Administrators"/>
      </authorization>
    </system.web>
  </location>
</system.web>

Nachdem die Seite so geschützt ist, kann man ohne gültige Zuweisung der Administratorrolle zum aktuell angemeldeten Benutzerkonto nicht mehr darauf zugreifen.

Die beste Methode, dies zu erreichen, besteht darin, den folgenden Code einmalig auszuführen und diesen Code anschließend vom Webserver zu entfernen. Dies kann im Pageload-Ereignis einer ASP.NET-Webseite erfolgen. Nach dem Aufrufen dieser Seite löschen Sie diese anschließend vom Server. Jetzt kann auf die Seite zur Verwaltung der Mitgliedschaften nur nach gültiger Anmeldung über das Administratorkonto zugegriffen werden.

Roles.CreateRole("Administrator");
Roles.CreateRole("User");
Roles.CreateRole("Guest");
Membership.CreateUser("admin", "some strong password here");
Roles.AddUserToRole("admin", "Administrator");

Schlussbemerkung

Beim Einrichten jeder Website sind das Wissen um die Benutzer und die erforderlichen Sicherheitsanforderungen von großer Bedeutung. Wenn die Website von einer Gruppe innerhalb eines Unternehmens ohne externen Zugriff und ohne vertrauliche Daten verwendet werden soll, kann eine einfache Sicherheit völlig ausreichend sein. Einfache Sicherheit bedeutet keine Verschlüsselung, geringe Kennworteinschränkungen usw. Authentifizierung kann als einfache Methode verwendet werden, um zu verfolgen, wer Daten eingibt. Wenn sich die Website jedoch im Internet befindet und vertrauliche Daten verarbeitet, sind eine größtmögliche Absicherung der Website und das Zulassen des Zugriffs ausschließlich von authentifizierten Benutzern von großer Bedeutung.

In diesem Artikel wurde eine kurze Einführung in die grundsätzlichen Überlegungen zu Sicherheitseinstellungen für eine ASP.NET-Website vermittelt. Es wurde beschrieben, wie eine sichere Seite zum Bearbeiten von Mitgliedschafts- und Rolleninformationen für Benutzer, die sich an der Website anmelden, hinzugefügt werden kann. Der folgende Artikel in dieser zweiteiligen Reihe setzt das Verständnis der Sicherheitsaspekte beim Entwickeln einer Website voraus. Dort wird detailliert beschrieben, wie die Seite zur Mitgliedschaftsverwaltung funktioniert.

Der Autor

Peter Kellner gründete 1990 das Unternehmen 73rd Street Associates, in dem er erfolgreich Systeme zur Organisation in Universitätsklinken, Verwaltung von Versicherungsunternehmen und schlüsselfertige Software zur Verwaltung von Arztpraxen an über 500 Kunden auslieferte. Zehn Jahre später, im Jahr 2000, wurde 73rd Street Associates von einem großen Versicherungsunternehmen gekauft. Peter begann eine neue berufliche Laufbahn als unabhängiger Softwareberater. Zu den Technologien, mit denen er sich derzeit beschäftigt, gehören ASP.NET, Oracle, Java, VoIP und in Kürze SQL Server. Seine Freizeit widmet Peter hauptsächlich dem Motorradfahren. Er ist damit bereits rund um den Globus gefahren. Zuletzt fuhr Peter mit seiner Frau Tammy in 27 Tagen durch die USA, von Kalifornien nach Georgia.

Seine Blogsite finden Sie unter http://peterkellner.net/ (in englischer Sprache). Diesen Artikel und den zugehörigen Code finden Sie im Downloadbereich.


Anzeigen: