Hallo zusammen
Ich brauch wieder mal eure Hilfe.
Ich habe eine MVC 5 Webseite und möchte gerne alle Dateien in einem Ordner vor einem zugriff über die URL schützen.
Also bis jetzt ist es so dass man zwar nicht auf den Ordner zugreifen kann aber auf die Dateien wen man den Namen kennt der Datei.
zb. www.meinedomain.de/Daten/001.pdf
Kann mir jemand einen Tipp geben wie ich das machen kann?
Meine Idee ist dann das ich im controller eine Methode habe wo ich dann die Datei laden kann und zurück gebe mit "FileResult" wen dann der User bestimmte Bedingungen erfüllt.
Gruss Adema
Dafür ist die webPages:enabled
Eigenschaft, die Du in der Web.Config-Datei finden kannst, zuständig.
false
wäre der von Dir gewünschte Wert.
Zudem werden URLs mit einer Dateiendung i.d.R. vom IIS verarbeitet, nicht von Deiner ASP.NET Anwendung.
Du kannst also viel in Deiner Anwendung versuchen abzufangen, wenn der Request gar nicht an die Webanwendung kommt.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Was ist den der beste weg um Dateien zu schützen die auf meinem Server liegen aber nur bestimmte User Downloaden dürfen?
Ich müsste in dem Fall eine Filterregel/Freigabe auf dem IIS erstellen das diese URL ~/Daten/.. nicht abgerufen werden darf und nur lokale Zugriffe erlaubt sind?
Oder müsste der Ordner in einem ganz anderem Verzeichnis liegen? Die Frage wäre dann ob dies bei einem shared hosting überhaupt möglich ist.
Hi Adema,
was spricht gegen:
Meine Idee ist dann das ich im controller eine Methode habe wo ich dann die Datei laden kann und zurück gebe mit "FileResult" wen dann der User bestimmte Bedingungen erfüllt.
Christian
Weeks of programming can save you hours of planning
Das Problem besteht prinzipiell darin, dass Ressourcen-Dateien nicht vom ASP Handler abgedeckt werden.
Willst Du das, dann musst Du a) im IIS eingreifen und b) auch alle Ressourcen, die Du sonst hast (css, images, js) über den ASP Handler abarbeiten, was ziemlich Performance kostet.
Üblich ist daher eher sowas wie Mypage.com/DownloadFile?FileID=438624
oder FileName=fdsf.jpg
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
dann müsste ich einfach genügend lange Dateinamen haben damit man Sie nicht zufällig findet ev. ein Guid oder so ?
Oder ich generiere die pdf's immer wen Sie abgerufen werden, so oft nicht abgefragt.
Hi,
ich finde Abts Vorschlag für "webPages:enabled" sehr gut klingt nach einer guten Lösung.
bzw. wäre interessant zu wissen wie du bestimmst welcher User das Recht hat die Daten abzurufen. Welche Art der Authentifizeirung du nutzt.
Wenn du zum Beispiel vollen Zugriff auf den Webserver hast und dort auch eigene Dienste installieren kannst, dann könntest du dir auch nen Service bauen den die Webseite ansprechen kann, der nur intern auf dem Webserver zur Verfügung steht und der dir dann die entsprechenden Dateien aus dem Filesystem liest und übergibt, die kannst du dann per FileResult zurückgeben. Ist aber halt recht umständlich das ganze, aber mit Sicherheit auch "sicher" das keiner von außen an die Dateien rankommt, wenn er nicht berechtigt ist.
MFG
SquadWuschel
Mein Blog über .NET und MVC / EF | Meine kostenlose Onlinearbeitszeitverwaltung My:Worktime
Alles, was irgendwie mit Download- oder Benutzerdaten zutun hat; das hat ohnehin nichts im Verzeichnis der Anwendung zu suchen.
Daher sollte es keine Probleme geben, wenn Du die Dateien von Ort A holst und dann via FileResult anbietest. Der Zugriff auf die Systemdateien der Anwendung wird mit webPagesEnabled ein Riegel vorgeschoben.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Vielen Vielen Dank für eure Hilfe ich arbeite nun bei alle Dateien welche geschützt werden müssen mit FileResult.
Gruss Adema