Wie zu herunterladbaren Dateien in einem Remote-Verzeichnis von Nicht-Premium Benutzer (in php?) Schützen

StackOverflow https://stackoverflow.com/questions/1550071

Frage

Im einen „Premium“ Abschnitts von meiner Seite und ich bin in einem Bedarf herunterladen Aufbau Zugriff auf Dateien in einem entfernten direkt zu geben (auf einem anderen Server), die Nutzer mit besonderen Privilegien (Konten in MySQL-Datenbank gespeichert). Meine Website ist Coded in PHP / MySQL so eine PHP-Lösung groß sein würde.

War es hilfreich?

Lösung

richten Sie alle Download-Links zu einer PHP-Datei, die alle Berechtigungsnachweis Prüfung tun werden.

können Sie die Datei download.php rufen

passieren entlang Parameter über Cookies, erhalten, posten, Sitzung, oder je nachdem, welcher Weise Sie Privilegien überprüfen.

einmal Anmeldeinformationen überprüft sind, können Sie einen entsprechenden Header senden.

Wenn es ein Bild ist, wäre der Header header("Content-type: image/jpeg");

Ich gehe davon aus, dass Sie auch diesen Remote-Server besitzen.

einige nützliche Links:

MIME-Typen

PHP Header-Funktion

Andere Tipps

Wie @pxl sagte, müssen Sie für die Zulassung überprüfen und dann Ausgabe des korrekten MIME-Typen als HTML-Header (wie er sagte: header("Content-type: image/jpeg");)

Auch, wenn Sie damit fertig sind, werden Sie zur Ausgabegröße müssen der tatsächliche Inhalt der Datei und es ist (in Bytes) als solche:

header("Content-Length: ".filesize("FILENAME")*1.001);
/* The *1.001 puts a nice buffer on the filesize, I read about it online.
Browsers will stop downloading exactly at the Content-Length, but if they go
over, it's not a big deal at all. */
readfile("FILENAME");
die();

So stellen Sie sicher, dass die Datei in einem Verzeichnis zu speichern, die nicht zugänglich aus dem Internet ist.

Ich bin zu tun dies in ASP.NET verwendet, wo es eingebaut ist, aber das Artikel Ihre genaue Situation zu Chronik scheint.

Hier ist, was ich tun würde:

  1. Integrierte eine PHP-SOAP-Sever auf dem Remote-Server B, der die Dateien enthält.

  2. Jedes Mal, wenn ein Benutzer einen Download auf Ihrem Hauptserver A löst an den SOAP-Server auf B verbinden und ein Ticket für den Benutzer reservieren eine IP-Adresse und die ID / Pfad der Datei zum Download angeben.

  3. Server B wird nun eine ticketId erstellen (die nur für eine begrenzte Zeit sein sollte) für diesen Download und senden es an A.

  4. Server A leitet den Benutzer auf Server B die ticketId als GET-Parameter liefert

  5. Server B nun überprüft, ob das Ticket bereits verwendet wurde, abgelaufen ist oder wenn der Benutzer kommt von der falschen IP. Wenn keiner von ihnen gilt die Datei dienen und das Ticket markiert, wie verwendet wird.

Hinweis: Auf Server B nicht hält PHP läuft, während die Datei dienen, aber die X-Sendfile-Header statt. Andernfalls wird der Download kann nach der PHP max Ausführungszeit beenden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top