Wie kann ich eine herunterladbare Datei online bereitstellen, ohne den physischen Pfad anzuzeigen?

7

Ich liefere Dokumente, bei denen sich der Benutzer vor dem Download registrieren muss. Derzeit werden die Links zu den Dokumenten nach der Registrierung und Anmeldung wie folgt angezeigt:

%Vor%

So ist der physische Pfad zum Dokument für jeden Benutzer sichtbar. Wie empfiehlt es sich, den physischen Pfad zum Dokument verborgen zu halten, damit registrierte Benutzer keine direkten Links mit nicht registrierten Benutzern teilen oder direkte Links zu den Dokumenten veröffentlichen können woanders?

BEARBEITEN: Ich habe gerade nach einer Idee gesucht, die sprachunabhängig ist, also habe ich ein paar meiner Lieblingssprachen für die Tags ausgewählt. Die tatsächliche Implementierung in diesem Fall ist ASP classic. Ich verwende derzeit ein Download-Wrapper-Skript, das bestätigt, dass der Benutzer angemeldet ist, bevor er zur eigentlichen Dokument-URL weitergeleitet wird. Ich habe es einfach nicht in meine Frage aufgenommen.

    
Cory House 15.05.2009, 15:13
quelle

8 Antworten

11

Tu das nicht. Bewahren Sie die Dateien stattdessen außerhalb des Dokumentbaums auf und machen Sie sie dann mit einem Skript zugänglich (z. B. php, .Net, was auch immer)

Das Skript kann prüfen, ob sie eingeloggt sind, validieren, ob die Datei erlaubt ist, und falls ja, zurückgeben. Der Weg, zu dem sie gehen, könnte eher so aussehen ... /download.php?file=mypdf.pdf

Etwas im Sinne von ...

%Vor%     
Rik Heywood 15.05.2009, 15:18
quelle
8

Der beste Weg besteht darin, die Datei von einem nicht webfähigen Pfad aus zu lesen und in den Ausgabestream zu schreiben.

Dies scheint ein gutes Beispiel in php zu sein, das Sie zu benutzen schienen? Fügen Sie einfach Sicherheitscheck an den Anfang von PHP und kicken Sie sie aus, wenn sie nicht autorisiert sind.

Ссылка

    
j0tt 15.05.2009 15:17
quelle
1

Der beste Weg, dies zu tun, ist die Verwendung einer PHP / ASP- oder Server-Skriptdatei, die das Dokument an einem Ort liest, der nicht nach außen verfügbar ist

Diese Datei kann dann prüfen, ob der Benutzer angemeldet ist und den Pfad zur physischen Datei auch verbergen

also wäre die URL www.yourwebsite.com/file.php?file=image.png

file.php überprüft, ob der Benutzer angemeldet ist dann würde es die Datei lesen oder sie auf die Anmeldeseite umleiten

    
Jim 15.05.2009 15:17
quelle
1

Sie möchten eine PHP-Seite erstellen, die zwei Dinge erledigt:

  1. authentifiziert den Benutzer, der die Anfrage stellt
  2. streamen Sie die Datei zum Client

Dieser Link hilft bei Streams. Und dieser Code kann hilfreich sein:

%Vor%

Sah dies in einer Diskussion hier .

    
Vincent Ramdhanie 15.05.2009 15:24
quelle
1

Ich hatte vor vielen Monden im klassischen ASP ein ähnliches Problem.

Keept Dateien in einem Verzeichnis außerhalb des Webroot.

Bei der Verifizierung wurde die Datei über ADODB.Stream gesendet und dann die Dateierweiterung überprüft, um sicherzustellen, dass ich den richtigen MIME-Typ festgelegt habe.

    
NoCarrier 18.05.2009 17:10
quelle
0

Es ist nicht klar, ob Sie ASP.NET, ASP.NET MVC oder etwas anderes verwenden. Wie auch immer, dieser Beitrag ...

Wie kann ich eine Datei zum Download bereitstellen? ein MVC-Controller?

... zeigt, wie eine Datei mithilfe von ASP.NET programmgesteuert an den Benutzer zurückgegeben wird (die Frage zeigt den ASP.NET-Weg, die Antworten zeigen den MVC-Weg).

Dies würde ermöglichen, dass sich die physischen Dateien in einem Ordner befinden, auf den der Benutzer sonst nicht zugreifen könnte, und Sie könnten vor dem Zurückgeben des Dokuments eine Überprüfung hinzufügen, um sicherzustellen, dass der Benutzer registriert wurde usw.

Wenn Sie sich in einer Entwicklungsphase befinden, in der es noch nicht zu spät ist, ASP.NET MVC zu verwenden, tun Sie dies. Dieses Szenario (das Bereitstellen einer Datei) wird zum One-Liner und viele andere Dinge werden einfacher (insbesondere das Testen Ihrer App).

    
Martin Peck 15.05.2009 15:18
quelle
0

Sie könnten ein IHttpHandler in .net verwenden, obwohl Sie einen Platzhalter benötigen Zugriff in IIS. Sie könnten einen sitzungsbasierten Handler verwenden.

    
Elijah Glover 15.05.2009 15:19
quelle
0
  1. Verwenden Sie ein Skript für die Zugriffssteuerung

    Erstellen Sie ein Skript wie myurl.com/file.php?docs/mypdf.pdf, das überprüft, ob der Benutzer Zugriffsrechte für die Datei hat. Das Skript ruft die Datei von einem Ort ab, der für das Web nicht sichtbar ist.

  2. (Optional) Verwenden Sie mod_rewrite, um Ihre URLs gut aussehen zu lassen, und leiten Sie den Benutzer zum Skript file.php weiter. Etwas wie:

    RewriteCond-Dokumente /% {REQUEST_FILENAME}! -f

    RewriteRule ^ (. *) $ file.php / $ 1 [QSA, L]

    Dies wird /docs/mypdf.pdf nach /file.php?docs/mypdf.pdf umleiten, sieht aber für den Benutzer besser aus.

John Smith 15.05.2009 15:32
quelle

Tags und Links