On Demand Zugriffsrechte für Web Sites vergeben
Geschrieben von: Christian Holm 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. InstallationNach 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:
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. AuthorisierungNun 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 LogoutNatü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ßbemerkungDies 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 CodesKlicken Sie hier, um den Download zu starten. Verwandte Artikel
Formular-basierte Basic Authentication Links zu anderen Sites
AccessControl Download 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.
©2000-2006 AspHeute.com |