Wie kann ich statische Dateien mit ASP.NET-Formularauthentifizierung in IIS 7.5 schützen?
Habe ich eine website läuft auf einem server mit IIS 7.5 ASP.NET 4.0 auf einem shared host, aber in vollem Vertrauen.
Die Website ist eine grundlegende "Datei-browser", das dem Besucher zur Anmeldung und eine Liste von Dateien zur Verfügung, um Ihnen angezeigt, und, natürlich, laden Sie die Dateien. Die statischen Dateien (meist pdf-Dateien) befinden sich in einem sub-Ordner auf der site genannten Daten, z.B. http://example.com/data/...
Der Website verwendet ASP.NET Formular-Authentifizierung.
Meine Frage ist: Wie bekomme ich die ASP.NET -engine zur Verarbeitung der Anforderungen für die statischen Dateien in den data-Ordner, so dass die Anforderung für Dateien sind authentifiziert ASP.NET und die Benutzer sind nicht in der Lage, deep-link auf eine Datei, und Dateien packen, die Sie nicht haben dürfen?
Beste Grüße, Egil.
InformationsquelleAutor der Frage Egil Hansen | 2010-05-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie Anwendungspool ausgeführt wird, in Integrierten Modus ist, dann können Sie das folgende tun.
Fügen Sie den folgenden, um Ihre top-level-web.config.
Nun können Sie das standard-ASP.NET Berechtigungen in Ihrem web.config erzwingen die Formularauthentifizierung für alle Dateien in dem Verzeichnis.
InformationsquelleAutor der Antwort Joel Cunningham
Ich hatte das gleiche problem mit dem bekommen von Rollen zu authentifizieren. Durch Versuch und Irrtum habe ich es endlich auf Arbeit mit einem kleinen edit zu @Joel Cunningham-code:
Verwendet habe ich diese beiden Seiten als Referenzen: http://forums.iis.net/t/1177964.aspx und http://learn.iis.net/page.aspx/244/how-to-take-advantage-of-the-iis-integrated-pipeline/
InformationsquelleAutor der Antwort Danielle
Dies ist ein Alter thread, aber ich zufällig auf Sie und lief in das gleiche problem wie Egil. Hier ist die version von Joel ist fix, die enthält Rollen:
InformationsquelleAutor der Antwort John
Ich wollte wissen, warum es notwendig wäre, um re-add Module (mit default-Optionen), die Hinzugefügt werden, wird standardmäßig die Integrierte Pipeline, also grub ich ein wenig tiefer.
Müssen Sie entfernen und erneut hinzufügen, die Module, da standardmäßig die Module sind nicht mit den Standard-Optionen. Sie haben die Voraussetzung Hinzugefügt, um die Abwärtskompatibilität zu laufen, nur für die Inhalte behandelt, die durch eine eingetragene ASP.NET handler (z.B., .aspx-Seiten).
Die Standardeinstellung sieht wie folgt aus:
Durch das entfernen der Module und re-adding Sie ohne Voraussetzung, die einzelnen Module laufen für jeden Antrag (einschließlich Ihrer statischen Inhalte). Es ist differenzierter als die Aktivierung
runAllManagedModulesForAllRequests
.Lesen Sie über es in ein paar Artikel aus, wenn die Integrierte Pipeline eingeführt wurde, mit IIS 7:
Beachten Sie, dass es ein Tippfehler ist, oder den Namen des Moduls in dem zweiten Artikel (und @John ' s Antwort) wurde aus
FormsAuthenticationModule
zuFormsAuthentication
irgendwann.Den Arbeits Modulen in IIS 7.5 thru 8.5 sieht so aus für mich:
InformationsquelleAutor der Antwort nekno
Nachtrag:
Als @eych darauf hingewiesen, diesen auch blockiert den Zugriff auf das
~/Content
- Ordner (oder wo auch immer Sie haben Ihre CSS), und~/Scripts
und so weiter.Wenn Sie möchten Ausnahmen zulassen, D. H. es zulassen, daß bestimmte Dateien/Ordner Zugriff haben, die nicht authentifizierte Benutzer -- Sie können tun, dass durch die
location
element. Fügen Sie die folgendenweb.config
:Update:
Eine bessere Lösung ist, um zu verlassen, der Zugriff standardmäßig auf -- was wird der Zugriff auf Ihre CSS /JavaScript /etc. -- und wenden Sie die "lock" (nur), um den Ordner, in dem die statischen Inhalte gespeichert:
Einschränkung: in unserem Fall (ein MVC-Website) mussten wir dekorieren alle unsere controller-Aktionen (außer login) mit
[AuthorizeAttribute]
. Das ist eine gute Idee auf jeden Fall, aber hatte bisher nicht nötig war (weil vorher alle nicht autorisierte Anfrage wurde weitergeleitet auf die login-Seite).InformationsquelleAutor der Antwort David
Wenn Sie die Anwendung pool ist im Klassischen Modus ausgeführt wird, können Sie das folgende tun. Sie müssen wiederholen Sie diese Schritte für jede Datei-Endung die Sie verarbeiten möchten, aber ich bin mit
.html
hier.Fügen Sie zuerst eine Seite erstellen Anbieter im Web.config:
Dann eine Seite hinzufügen handler factory:
Dann eine Seite hinzufügen handler:
Dieser arbeitete für mich. (Credit: http://www.ifinity.com.au/Blog/EntryId/66/How-To-301-Redirect-htm-or-html-pages-to-DotNetNuke-aspx-pages.)
InformationsquelleAutor der Antwort Jay Sullivan