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.
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%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.
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
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.
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).
Sie könnten ein IHttpHandler in .net verwenden, obwohl Sie einen Platzhalter benötigen Zugriff in IIS. Sie könnten einen sitzungsbasierten Handler verwenden.
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.
(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.
Tags und Links c# php asp-classic