Glengamoi (Forum) · AspHeute · .NET Heute (RSS-Suche) · AspxFiles (Wiki) · .NET Blogs

On Demand Zugriffsrechte für Web Sites vergeben

Geschrieben von: Christian Holm
Kategorie: Sicherheit

This printed page brought to you by AlphaSierraPapa

Sicher haben Sie auf Ihrer Web Site Content, der nicht von jedem 08/15 User eingesehen werden soll, zum Beispiel eine "Members Only Area". IIS beziehungsweise Windows 2000 bieten hierfür auch genügend (ausreichend sichere) Möglichkeiten, um gewisse Bereiche einer Web Site zu sperren. Wie wäre es aber, solche Aufgaben on-demand, also im laufenden Betrieb des Web Servers zu erledigen - ohne NTFS Berechtigungen setzen zu müssen. Das gratis downloadbare AccessControl Tool bietet eine einfache Lösung mittels ISAPI Filter und ASP.

Nehmen wir an, Sie haben eine Web Site mit Bereichen die z.B. nur für registrierte und/oder zahlende Benutzer zugänglich sein soll. Ein Lösungsansatz wäre die Verwendung der Authentifizierungs/Authorisierungsmöglichkeiten die IIS 5 und Windows 2000 bereitstellen. Aber ist dies ausreichend? Meist ist dieser Ansatz für kleinere Sites zu aufwendig, allerdings bieten einfachere ASP Lösungen nicht ausreichend Sicherheit: diese schützen nur ASP Seiten, nicht aber Resourcen wie zum Beispiel Bilder oder statische HTML Dokumente.

Nebenbei bemerkt, wie Sie sicher aus der Problemstellung herauslesen konnten ist das URLScan Tool von Microsoft hier unbrauchbar, da man nur Dateiarten sperren (d.h diese werden nicht mehr geserved) kann und nicht ganze Verzeichnisse per User (repräsentiert durch eine Session ID) sperren kann.

Für unsere Problemstellung bietet sich das AccessControl Tool an, das Sie gratis von reneris.com downloaden können. Dabei handelt es sich um einen ISAPI Filter, der leicht durch ein einfaches Objektmodell angesprochen werden kann. Dieses können Sie dann leicht in Ihre servergenerierten Seiten entweder mit VBScript oder JavaScript einbinden. Und es schützt Ihre Inhalte auf Verzeichnisbasis, egal ob ASP oder nicht.

Installation

Nach dem Download der accessbin.zip (diese enthält die Binaries und Sample Code) von reneris.com können Sie loslegen. Zum Zeitpunkt des Artikels war die Installationsanweisung noch etwas mangelhaft, daher sei hier die richtige Reihenfolge noch einmal kurz angeführt:

  1. Entpacken des Zip-Archivs in ein Web Server Verzeichnis
  2. ISM (Internet Services Manager) öffnen, mit der rechten Maustaste auf die Web Site oder den gesamten Web Server klicken und die Properties (Eigenschaften) anwählen.
  3. Im ISAPI Filters-Tab auf Add (Hinzufügen) klicken und die Beschreibung für den Filter und auf die AccessFilter.dll aus dem Download referenzieren:
  4. Den IIS restarten
  5. Danach mit regsvr32 C:\IhrPfad\AccessControl.dll die eigentliche Komponente registrieren

Um störende Fehlermeldungen zu vermeiden, sollten Sie diese Reihenfolge unbedingt einhalten. Fürs erste wäre die Grobarbeit erledigt; nun müssen wir noch den ISAPI Filter in unserer ASP Site ansprechen. Ich habe dafür ein vereinfachtes Beispiel herangezogen. Da es für hack-sichere Login-Seiten verschiedene Philosophien gibt und auch nicht Kernthema dieses Artikels ist, ist der Sourcecode hierfür nicht angeführt.

Das vereinfachte Beispiel einer Web Site hat folgende Struktur:

Da wir den ISAPI Filter und die Komponente erfolgreich registriert haben, können wir uns nun ans Codieren der Beispielsite machen. Nach dem Authentifizieren des Users muß noch die Authorisierung (doLogin.asp) erfolgen, d.h. u.a. eine Unterscheidung zwischen registriertem User und Administrator. Diese Unterscheidung wird durch das Setzen bzw. während der Authorisierung durch Evaluieren einer Session Variable (AccessControlAdmin) erreicht:

Session("AccessControlAdmin") = 1

Wenn Adminrechte vorhanden sind, also die Session Variable nicht 0 ist, wird man zur Admin Seite accessadmin.asp weitergeleitet:

Hier einfach mit Add New die geschützten Bereiche als URL eintragen und mit Submit bestätigen. Aus Sicherheitsgründen geben Sie immer den DNS Namen und zusätzlich die IP Adresse an. So einfach wäre die Administrierung abgeschlossen; die geschützten Bereiche umfassen sowohl dynamische als auch statische Inhalte.

Authorisierung

Nun müssen wir noch die Authorisierung für den "normalen" User durchführen (VBScript Variante):

' Login Prozedur
IsAccessGranted = true

Set SessObj = Server.CreateObject("AccessControl.SessAcc")
Session("SessAcc") = SessObj
Response.Cookies("SessAcc") = SessObj.ID

If IsAccessGranted Then
    SessObj.Grant "localhost", "/AccCtrl/DemoEx/restricted", true  
    Response.Redirect "/AccCtrl/DemoEx/restricted/ConspiracyTheory.asp"
Else  
    Response.Redirect "/AccCtrl/DemoEx/Rejected.asp"
End If

In dieses Beispiel ist einiges "hineingepackt": den Login habe ich abgekürzt - IsAccessGranted repräsentiert jede der von Ihnen gewählten Loginvarianten. Nach "erfolgreichem Login" erzeuge ich ein Objekt für das AccessControl Tool, welches Funktionen für die Zugriffsrechte enthält. Da die Session permanent werden soll, speichern wir die Signatur (SessObj.ID) in einem Cookie.

Bis dato haben wir in der Administration nur definiert, welche Sicherheitsbereiche es geben soll - jedoch nicht, wer darauf tatsächlich Zugriff bekommen soll. Dies geschieht mit der Grant Funktion, die das Verzeichnis für diese Session ID freigibt, d.h. nur diese Session ID hat nun Zugang zum geschützten Bereich. Wenn die Session durch ein Schließen des Browsers ungültig wird, verfällt das Objekt.

Die Parameter der Grant-Funktion sind:

SessObj.Grant Server, URL, UnterverzeichnisseErlaubt

Zuerst der DNS/IP Adresse des Servers, dann der URL zur eigentlichen geschützen Seite. Weiters können Sie noch angeben, ob der User (repräsentiert durch die Session ID) Zugang zu Unterverzeichnissen hat.

Der Einfachheit halber redirecte ich auf eine definierte Seite - Sie können auf eine Menüseite, etc verzweigen.

Der Logout

Natürlich können Sie einen User auch ohne daß er den Browser schließen muß, entweder ausloggen bzw. ausloggen lassen. Dies geschieht mit der Revoke Funktion:

SessObj.Revoke "localhost", "/AccCtrl/DemoEx/restricted", true

Wiederum den DNS/IP Adresse des Servers angeben, dann der URL, und das Flag für die Unterverzeichnisse.

Schlußbemerkung

Dies war ein kleines Beispiel für die Anwendung des AccessControl Tools, das gratis erhältlich ist. Dieses enthält noch weitere Funktionen, die das Erstellen einer eigenen Admin Seite möglich machen. Übrigens: der Sourcecode des Tools (C++) ist ebenfalls erhältlich.

This printed page brought to you by AlphaSierraPapa

Download des Codes

Klicken Sie hier, um den Download zu starten.
http://www.aspheute.com/code/20011207.zip

Verwandte Artikel

Formular-basierte Basic Authentication
http:/www.aspheute.com/artikel/20010608.htm
Generieren eines sicheren Paßwortes
http:/www.aspheute.com/artikel/20000531.htm
Impersonation mit ASP.NET
http:/www.aspheute.com/artikel/20020123.htm
Passwörter mit SHA1 absichern
http:/www.aspheute.com/artikel/20010330.htm
Schluß mit lustig Teil 2 - das URLScan Tool
http:/www.aspheute.com/artikel/20010927.htm
Verzeichnissicherheit mit NTFS und IIS Authentifizierung
http:/www.aspheute.com/artikel/20001109.htm

Links zu anderen Sites

AccessControl Download
http://www.reneris.com/tools/downbin.asp
AccessControl Usage Documentation
http://www.reneris.com/tools/usage.asp

 

©2000-2006 AspHeute.com
Alle Rechte vorbehalten. Der Inhalt dieser Seiten ist urheberrechtlich geschützt.
Eine Übernahme von Texten (auch nur auszugsweise) oder Graphiken bedarf unserer schriftlichen Zustimmung.