it-swarm.com.de

Beschränken des Zugriffs auf Dateien in einem bestimmten Ordner

Mögliches Duplizieren:
Wie werden Uploads geschützt, wenn der Benutzer nicht angemeldet ist?

Gibt es überhaupt eine Möglichkeit, den direkten Zugriff auf Dateien in einem bestimmten Ordner nur auf bestimmte WordPress-Benutzer zu beschränken, für die diese spezifischen Funktionen festgelegt wurden?

2

Die einfachste PHP-Lösung wäre, ein Download-Skript zu erstellen. Es prüft, ob der Benutzer die richtigen Berechtigungen hat und stellt die Datei dem Webclient zur Verfügung. Oder meine Präferenz richtet einen Ordner außerhalb Ihres Webstamms ein und legt die Dateien dort ab.

Stellen Sie die Dateiberechtigungen ohne anonymen Zugriff ein und lassen Sie sie vom Webserver lesen und in einer solchen PHP-Datei ausgeben. Der folgende Code liest die Datei und sendet sie an den Browser.

header("Expires: 0"); 
header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
header("Cache-Control: private",false); 
header('Content-disposition: attachment; filename='. $file;
header("Content-Transfer-Encoding:  binary"); 
header("Content-Length: ". filesize(ABSPATH.$dir.$file); 
readfile($dir.$file);
exit();

bearbeite 14-1:

erstellen Sie eine normale Upload-Box und verschieben Sie die Datei beim Hochladen in einen Ordner außerhalb Ihres Webroot-Verzeichnisses (auf diesen Ordner können Benutzer nicht über http zugreifen, sondern nur über den Webserver).

if (move_uploaded_file( $_FILES['Filedata']['tmp_name'] , $upload_dir.$filename ) ) {
// code to do after the file has been copied succesfully. Update your database or something.
}

$ upload_dir. $ filename ist der vollständige Pfad zum Verzeichnis außerhalb des Ordners www. Auf die Datei kann nur noch vom Webserver zugegriffen werden. Speichern Sie den Speicherort in einer Datenbank mit Uploader-Informationen. Oder erstellen Sie Unterverzeichnisse für jeden Benutzer. Sie benötigen etwas, um die Dateien für jeden Benutzer zu unterscheiden.

Wenn Sie nun eine Datei herunterladen möchten, erstellen Sie ein Skript namens download.php. In diesem Skript prüfen Sie, ob der Benutzer Rechte an der Datei hat.

global $user;
if ($user->id == $uploaded_user_id) {
    header("Expires: 0"); 
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
    header("Cache-Control: private",false); 
    header('Content-disposition: attachment; filename='. $file;
    header("Content-Transfer-Encoding:  binary"); 
    header("Content-Length: ". filesize(ABSPATH.$upload_dir.$file); 
    readfile($upload_dir.$file);
    exit();

}

jetzt möchten Sie eine Datei-ID oder einen Namen an das Download-Skript übergeben. So basteln Sie den Link wie url/download.php? file = $ file. Sie müssen dies direkt oder in den frühen Stadien Ihres Plugins aufrufen, oder Sie erhalten die bereits gesendeten Header-Nachrichten. Das Skript prüft, ob der Benutzer Rechte hat und beginnt mit der Ausgabe von Binärdaten.

Es sollte so etwas sein, hoffe es hilft. Es ist nicht alles, aber es sollte Ihnen den Einstieg erleichtern.

3
Patriek