web-dev-qa-db-fra.com

Restreindre l'accès aux fichiers d'un dossier spécifique

Duplicate possible:
Comment protéger les téléchargements, si l'utilisateur n'est pas connecté?

Existe-t-il un moyen quelconque de restreindre l'accès direct aux fichiers d'un dossier spécifique aux seuls utilisateurs de wordpress disposant de cet ensemble de capacités?

2
NetConstructor.com

La solution php la plus simple serait de créer un script de téléchargement. Il vérifie si l'utilisateur dispose des autorisations appropriées et transmet le fichier au client Web. Ou ma préférence configurer un dossier en dehors de votre racine Web et y mettre les fichiers.

Définissez les autorisations de fichier sans accès anonyme et laissez le serveur Web les lire et les exporter dans un fichier php comme celui-ci. Le code ci-dessous lit le fichier et le renvoie au navigateur.

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();

éditer 14-1:

créez une boîte de téléchargement normale et, lorsque le fichier est téléchargé, déplacez-le dans un dossier situé en dehors de votre répertoire racine Web (les utilisateurs ne peuvent pas accéder à ce dossier via http, mais uniquement le serveur Web).

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 est le chemin d'accès complet au répertoire situé en dehors du dossier www. Le fichier n'est maintenant accessible qu'au serveur Web. Stocker l'emplacement dans une base de données avec les informations de téléchargement. Ou créez des sous-répertoires pour chaque utilisateur. Vous avez besoin de quelque chose pour différencier les fichiers pour chaque utilisateur.

Maintenant, lorsque vous souhaitez télécharger un fichier, créez un script appelé download.php. Dans ce script, vous vérifiez si l'utilisateur dispose des droits sur le fichier.

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();

}

maintenant, vous voulez passer un nom de fichier ou un nom au script de téléchargement. alors créez le lien comme url/download.php? file = $ file. Vous devez appeler ceci directement ou au tout début de votre plugin, sinon vous recevrez le message déjà envoyé. Le script vérifiera si l'utilisateur a des droits et commencera à sortir des données binaires.

Ça devrait être quelque chose comme ça, espérons que ça aide. Ce n'est pas complet mais devrait vous aider à démarrer.

3
Patriek