Was ich mache:
Ich muss im Grunde eine Website erstellen, die durch eine in PHP geschriebene Anmeldeseite geschützt ist. Wenn Sie einmal eingeloggt sind, haben Sie eine Suchleiste, die Ganzzahlen liest und die Daten an ein PHP-Skript sendet, das ein Bild mit der Nummer als Namen abruft .
(Ich speichere ein paar tausend Bilder auf diesem Server - Inventarbilder)
-
Wofür ich Hilfe brauche:
Aus meinen Nachforschungen geht hervor, dass Sie Datenbanken wie MySQL wegen der Geschwindigkeit und Ineffizienz nicht für die Speicherung von Bildern verwenden. Wenn Sie es nicht in einer Datenbank speichern und es wie vorgeschlagen auf dem Dateisystem des Servers belassen, wenn jemand eine direkte URL in eine Adressleiste eingibt, bringt es dann nicht die Dateien auf meinem Server?
Wie schützen Sie sich davor? Ich möchte keine Dateien auf meinem Server sehen, ohne die Login-Seite erfolgreich durchlaufen zu haben.
Vielen Dank für jede Hilfe, jede Einsicht oder Vorschläge würden geschätzt. Dies ist wichtig für mich, weil in Zukunft komplexere Informationen hinzugefügt werden.
Eine empfohlene Methode, Dateidownloads über PHP (oder ein anderes Skript) zu verarbeiten, ist die Verwendung des Antwortkopfs "X-Sendfile".
Das PHP-Skript handhabt die Authentifizierung und sobald es validiert ist, werden einige Antwort-Header zusammen mit einer 'X-Sendfile' gesetzt, die dem Web-Server mitteilt, eine Datei auszuliefern; Das Skript endet und der Webserver übernimmt.
Sehen Sie hier ein einfaches Beispiel:
Das mag für Ihre Situation zu viel werden, aber so denke ich darüber nach, es mit einer App zu tun, die ich gerade entwickle:
Zunächst gibt es 4 Server, einen Webserver, einen Middleware-Server und einen Datenserver
Wenn jemand eine Anfrage an den Webserver sendet, verbindet sich der Webserver mit dem Middleware-Server und fordert die Datei an, wobei er die Benutzerberechtigungsnachweise wie einen Sitzungsschlüssel und die angeforderte Datei weiterleitet. Die Middleware stellt eine Verbindung zur Datenbank her und validiert die Sitzungs-ADN, die Benutzer für diese Datei besitzen. Es gibt entweder einen Fehler oder die Binärdaten zurück, wenn sie Zugriff haben. Wenn Sie die Ausgabepufferung sowohl auf dem Webserver als auch auf dem Middleware-Server deaktivieren, können Sie vom Middlewareserver 100 KB-Blöcke an den Webserver senden, und der Webserver gibt den ersten Block aus, während er den zweiten Block empfängt.
Die Datei selbst kann über ftp, sftp oder andere Dateifreigaben auf dem Datenbankserver gespeichert werden
es ist definitiv nicht so effizient wie mit x-sendfile, aber wenn jemand in der Lage ist, Ihren Webserver zu pwn, haben sie immer noch keinen Zugriff auf die Datei - in den obigen Szenarien würden sie. Der Webserver ist der einzige öffentliche Server, daher sollte der Rest der Server in einem privaten Netzwerk verbunden sein.
Sie können die Daten auch an einen Verschlüsselungsserver senden, der die eigentlichen Dateidaten verschlüsselt / entschlüsselt
Wenn jemand irgendwelche Ideen hat, wie man das verbessern kann, bin ich interessiert.
Sie können es so machen schreibe einen Ressourcen-Server in PHP wie folgt
%Vor%In dieser Datei erhalten Sie requeid und lesen Sie den tatsächlichen Link (lokaler Link) aus der Datenbank, lesen Sie die Bilddatei und geben Sie dann die Daten im Browser aus
%Vor%Aber ich denke, Sie sollten das nicht tun, einfach Datei zufällig umbenennen und viele von ihnen erstellen ....