Schutz von Downloadverzeichnis

27/03/2008 - 13:05 von Jens Wittmann | Report spam
Guten Tag alle zusammen.

Das folgende ist wahrscheinlich recht trivial, aber ich bin gerade erst
in IIS/ASP.NET eingestiegen und muss jetzt eine Aufwandsabschàtzung
abgeben. Leider kenne ich mich mit den Security-Aspekten noch nicht so
gut aus.

Folgende Situation:
-Eine ASP.NET 2.0-Anwendung realisiert ein rollenbasiertes Zugriffsmodell
-Die Rollenzugehörigkeit wird durch Login/Password-Eingabe über eine DB
ermittelt und in session("ROLES") gespeichert
-Bei Abruf von ASP.NET-Seiten wird diese Variable abgefragt und
dementsprechend die Content-Seite generiert oder eine Unauthorized-Seite
angezeigt.

So weit, so gut.

Das Problem:
-Es gibt ein/mehrere Download-Verzeichnisse, in denen hauptsàchlich
PDF-Dateien liegen.
-Je nach Rolle dürfen diese Dateien heruntergeladen werden oder nicht.
-Die Zugriffskontrolle besteht momentan aus der Generierung einer Seite
mit Download-Links auf die einzelnen Dateien.
-Werden die Links aber manuell in das Adress-Feld des Browsers
eingegeben, können sie auch ohne vorherigen Login heruntergeladen werden.

Unser Workaround:
-Was wir realisieren können, ist ein IIS-Verzeichnisschutz, so dass der
User beim Downloadversuch per direkter Linkeingabe und Forms
Authentication sich nochmals authentifizieren muss.
-Aber er hat sich ja schon bei der Seite angemeldet (s.o.) und soll nun
nicht nochmal Login und Passwort eingeben müssen.

Der Wunsch:
-Die Session wird beim Login einer serverseitigen Rolle oder einem
serverseitigem User (also Windows-User/-Gruppe) zugeordnet. Es sollte
dann nicht nötig sein, beim Download zusàtzlichen (ASP-)Code auszuführen.

Die Frage:
-Geht das? Und wenn ja: wie?

Meine Alternativ-Ideen:
-Ich dachte ja an eine Art Filter, am liebsten eine ASP-Seite, die beim
Zugriff auf eine Download-Datei automatisch aufgerufen wird und dann die
Session-Variable abfragt und entweder die Datei freigibt oder eben
nicht. Wie könnte sowas gehen/wo kann man sowas konfigurieren?
-Wie sieht es mit Response.TransmitFile aus? Ich stelle mir vor, dass
das Verzeichnis geschützt ist und statt direkter Downloadlinks je eine
kleine ASP.NET-Seite aufgerufen wird, die die Session-Variable prüft und
die Datei dann per Response.TransmitFile an den Client schickt.

Ich wàre aber auch für jeden Alternativvorschlag dankbar, ebenso für
Verweise auf entsprechende Ressourcen im Web.

Da ich immer noch Probleme mit der Konfiguration des IIS habe, habe ich
die angedachten Lösungen nicht versucht umzusetzen, da ich mir von Euch
einen Tip erhoffe, welcher Weg der geeignetste ist und mir somit die
Zeit zu ersparen, die gleichen Fehler zu machen wie andere zuvor schon...
 

Lesen sie die antworten

#1 Samaschke, Karsten
27/03/2008 - 15:25 | Warnen spam
Jens Wittmann schrieb:

Folgende Situation:
-Eine ASP.NET 2.0-Anwendung realisiert ein rollenbasiertes Zugriffsmodell
-Die Rollenzugehörigkeit wird durch Login/Password-Eingabe über eine DB
ermittelt und in session("ROLES") gespeichert
-Bei Abruf von ASP.NET-Seiten wird diese Variable abgefragt und
dementsprechend die Content-Seite generiert oder eine Unauthorized-Seite
angezeigt.



Du musst aber eigentlich nix in der Session speichern - schau Dir mal
die Roles-API an, die kann genau das, was Du willst.

-Was wir realisieren können, ist ein IIS-Verzeichnisschutz, so dass der
User beim Downloadversuch per direkter Linkeingabe und Forms
Authentication sich nochmals authentifizieren muss.



Nö.

-Aber er hat sich ja schon bei der Seite angemeldet (s.o.) und soll nun
nicht nochmal Login und Passwort eingeben müssen.



Genau.

-Die Session wird beim Login einer serverseitigen Rolle oder einem
serverseitigem User (also Windows-User/-Gruppe) zugeordnet. Es sollte
dann nicht nötig sein, beim Download zusàtzlichen (ASP-)Code auszuführen.



Warum? Wieso mappst Du nicht die Dateiendung auf ASP.NET im IIS und
làsst die ASP.NET-Engine die Autorisierung durchführen? Du kannst dann
das alles mit Hausmitteln lösen - geht bequem über die web.config.

-Ich dachte ja an eine Art Filter, am liebsten eine ASP-Seite, die beim
Zugriff auf eine Download-Datei automatisch aufgerufen wird und dann die
Session-Variable abfragt und entweder die Datei freigibt oder eben
nicht. Wie könnte sowas gehen/wo kann man sowas konfigurieren?



Wenn, dann würde ich es anders machen: Niemandem wird nach außen
gezeigt, wo sich die Download-Verzeichnisse befinden. Der Client ruft
immer nur einen ASP.NET-Handler oder gerne auch eine ASP.NET-Page auf,
die überprüft die Rollenzugehörigkeit und gibt dann die Datei zurück
(Response.WriteFile ist Dein Freund).

Mit freundlichen Gruessen / Best regards,

Karsten Samaschke
IT-Development, IT-Consulting, IT-Training
Communitites: www.aspxperts.de | www.aspnetzone.de
Homepage: http://www.ksamaschke.de
Blog: http://www.karsan.de

Sent via MacBook / Windows Server 2008

Ähnliche fragen