2016-04-03 15 views
1

Als Fotograf habe ich meine eigene Website mit einem Portfolio und so. Ich habe auch ein Login-System für Benutzer, wo ich ihnen Zugriff auf ihre eigenen privaten Bilder geben (es zeigt alle Bilder in einem bestimmten Ordner platziert - ich mache dies manuell für jeden Benutzer).Zugriff auf private Bilder beschränken

Wenn sich ein Benutzer anmeldet und seine privaten Bilder sieht, wird er die URL bemerken sagt der folgende (wenn er es Downloads/klickt/etc): www.mywebsite.com/FOLDER_NAME/IMG_123.jpg

Durch ein wenig Raten wird er in der Lage sein, andere Benutzer private Bilder zu finden. Natürlich ist das der Grund, private Bilder auf meiner Website zu haben, zu vereiteln, also muss ich einen Weg finden.

Im Moment kann der Benutzer nur seine privaten Bilder sehen, ob seine user_email (unique) userRow Spiele:

if ($userRow['user_email'] == "[email protected]") 

Ich bin nicht so sicher, was zu suchen. Zugriff auf Bilder beschränken war keine erfolgreiche Suchanfrage für mich.

Was kann ich tun? Ich denke, eine Option wäre, die Ordner etwas zufälliges aufzurufen, wie zum Beispiel: "Charles661846Xkdfdsnf34590u". Das ist schwer zu erraten, aber ich bin mir nicht sicher über die Sicherheit (wie wenn es andere Möglichkeiten gibt, Zugang zum Root zu bekommen?).

Ich habe mir Deny direct access to all .php files except index.php angesehen, aber das ist nicht was ich genau will.

Was kann ich in diesem Fall tun?

Ich habe meine Website in PHP, HTML und ein bisschen Javascript programmiert.

Antwort

3

Wenn Sie den Zugriff auf Dateien nur auf einen angemeldeten Benutzer beschränken müssen, sollten Sie alle Dateien aus dem Webstamm verschieben und an einem Ort ablegen, an dem Sie nicht direkt über den Webserver darauf zugreifen können.

Dann dienen Sie die Dateien, nachdem der Benutzer über PHP authentifiziert wurde. Siehe zum Beispiel das erste Beispiel auf der Seite readfile() des PHP-Handbuchs.

Wenn sich ein Benutzer anmeldet, speichern Sie beispielsweise die Benutzer-ID in einer Sitzungsvariablen und überprüfen, ob die ID vor dem Datei-Serving-Skript den richtigen Zugriff auf diese Datei erlaubt.

1

Abgesehen von dem, was Jeroen gesagt hat, sind Sie auf dem richtigen Weg, wenn Sie feststellen, dass der Ordnername der Schwachpunkt sein könnte und dass es schwierig/unmöglich zu erraten sein sollte. Es ist nicht erforderlich, Ordner nach Benutzern zu benennen. Sie können eine zufällige 8, 12 oder 16-stellige alphanumerische Zeichenfolge erstellen und diese in der userRow als vielleicht $userRow['folder_name'] speichern.

Sie können auch alle Benutzerordner unter einer Struktur wie http://example.com/storage/A97LD34B2 stellen und sicherzustellen, dass die storage Ordner eine Datei mit .htaccess haben:

Options All -Indexes 

Das ist alles, was Sie in dieser Nur-Text-Datei benötigen. Dies setzt natürlich voraus, dass Sie einen Apache-Webserver haben (bei weitem am häufigsten, vor allem für Shared-Hosting-Konten). Diese Datei verhindert, dass Herr Snoopy zu http://example.com/storage navigiert und eine Liste der Dateien sieht.

Hier sind zwei S.O.Fragen, die beschreiben, wie ein kennwortgeschützte Mitglieder-System zu konstruieren:

Login into a website and get html from a page

PHP - Secure member-only pages with a login system

Beachten Sie, dass jeder Ordner eine index.php Datei enthalten würde, die Dateien dienen würde, wie Jeroen.

Verwandte Themen