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

Liste

.NET 2.0 (1)
.NET Allgemein (16)
.NET Fu (5)
ADO.NET (11)
Aprilscherz (3)
ASP Grundlagen (44)
ASP Tricks (83)
ASP.NET (44)
ASPIntranet.de (5)
C# (28)
Datenbank (44)
Dokumentation (4)
IIS 6.0 (1)
Komponenten (29)
Optimierung (10)
Server (21)
Sicherheit (34)
Tee Off (6)
VB.NET (6)
WAP (8)
Web Services (11)
XML (9)

RSS 2.0 - Die neuesten fünf Artikel auf AspHeute.com


 

Suchen





 

English Articles
Chinese Articles
Unsere Autoren
 
Link zu AspHeute
Impressum
Werben
Anfragen

On Demand Zugriffsrechte für Web Sites vergeben

Geschrieben von: Christian Holm
Kategorie: Sicherheit

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:

  • root-Verzeichnis: dieses Verzechnis enthält eine ASP-Datei doLogin.asp, die die serverseitige Validierung vornimmt. Zusätzlich würde sich hier die Login-Seite befinden. Bei einem fehlgeschlagenen Login wird entweder die Rejected.asp Datei angezeigt oder man kann wieder auf die Login Seite redirecten. Die Rejected.asp Datei wird auch aufgerufen, wenn ein User unerlaubt auf den gesicherten Bereich zugreift. Das Tool verweigert auch den Zugriff, wenn der User versucht, mit einer direkten URL zuzugreifen (z.B. IhreSeite.xyz/restricted/content.xyz)
  • Den eigentlichen geschlossenen Bereich (inklusive der Admin Seite accessadmin.asp, z.B. aus dem Download) der in diesem Beispiel im /restricted Unterverzeichnis liegt.

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.

Download des Codes

Klicken Sie hier, um den Download zu starten.

Verwandte Artikel

Formular-basierte Basic Authentication
Generieren eines sicheren Paßwortes
Impersonation mit ASP.NET
Passwörter mit SHA1 absichern
Schluß mit lustig Teil 2 - das URLScan Tool
Verzeichnissicherheit mit NTFS und IIS Authentifizierung

Links zu anderen Sites

AccessControl Download
AccessControl Usage Documentation

Wenn Sie jetzt Fragen haben...

Wenn Sie Fragen rund um die in diesem Artikel vorgestellte Technologie haben, dann schauen Sie einfach bei uns in den Community Foren der deutschen .NET Community vorbei. Die Teilnehmer helfen Ihnen gerne, wenn Sie sich zur im Artikel vorgestellten Technologie weiterbilden möchten.

Haben Sie Fragen die sich direkt auf den Inhalt des Artikels beziehen, dann schreiben Sie dem Autor! Unsere Autoren freuen sich über Feedback zu ihren Artikeln. Ein einfacher Klick auf die Autor kontaktieren Schaltfläche (weiter unten) und schon haben Sie ein für diesen Artikel personalisiertes Anfrageformular.

 

Und zu guter Letzt möchten wir Sie bitten, den Artikel zu bewerten. Damit helfen Sie uns, die Qualität der Artikel zu verbessern - und anderen Lesern bei der Auswahl der Artikel, die sie lesen sollten.

Bewerten Sie diesen Artikel
 Sehr gut   Nicht genügend  
   1  2  3  4  5  
 

  
   Für Ausdruck optimierte Seite

©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.