[Résolu] erreur 403 même avec readfile

Eléphant du PHP | 82 Messages

16 oct. 2011, 18:45

Bonjour à tous!

J'essaie de protéger mes fichier contre le téléchargement direct. Mes fichiers sont dans le dossier uploads/. voici donc le htacces de ce dossier:

SetEnv PHP_VER 5
SetEnv REGISTER_GLOBALS 0

#Enlever le PHPSESSID dans l'url
SetEnv SESSION_USE_TRANS_SID 0

#REDIRIGER TOUT EN http://WWW.COLLAIDE.COM
RewriteCond %{HTTP_HOST} ^collaide.com$ 
RewriteRule ^(.*)   http://www.collaide.com/$1  [QSA,L,R=301]

#--------------------------------------------------
# Répertoire : /
#--------------------------------------------------

# Le serveur doit suivre les liens symboliques :
Options +FollowSymlinks

# Activation du module de réécriture d'URL :
RewriteEngine on

#--------------------------------------------------
# BLOCKER L ACCES AUX FICHIERS :
#--------------------------------------------------

Deny From All

Voici ensuite mon code pour télécharger les fichiers:
<?php //Création des headers, pour indiquer au navigateur qu'il s'agit d'un fichier à télécharger
		header('Content-Description: File Transfer');
		header('Content-Type: application/octet-stream');
  		header('Content-Disposition: attachment; filename="'.basename($row_dl_work['doc_name_serv']).'"'); //Nom du fichier
		header('Content-Transfer-Encoding: binary'); //Transfert en binaire (fichier)
		header('Expires: 0');
		header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
		header('Pragma: public');
  		header('Content-Length: '.$row_dl_work['doc_size']); //Taille du fichier
 
		//Envoi du fichier dont le chemin est passé en paramètre
  		readfile($ip_serv.'uploads/'.htmlspecialchars($row_dl_work['doc_name_serv'])); // redirection vers le téléchargement
		exit;

Et lorsque je télécharge un fichier et l'ouvre avec un éditeur de texte, voici ce que j'obtiens:
<?php <br />
<b>Warning</b>:  readfile(http://www.collaide.com/uploads/Collaide_dfot_nutrition.pdf) [<a href='function.readfile'>function.readfile</a>]: failed to open stream: HTTP request failed! HTTP/1.1 403 Forbidden
 in <b>/homez.367/collaide/www/travaux/hitcounter.php</b> on line <b>40</b><br />

Comment je peux faire pour passer cette sécurité 403 sur le dossiers uploads??

Merci :)

Tex
Modifié en dernier par Texicitys le 17 oct. 2011, 00:44, modifié 1 fois.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

16 oct. 2011, 19:43

Quand dans ton htaccess tu spécifies un deny all, tu interdits l'accès aux fichiers de ce répertoire par des demandes http. Pour lire le fichier et le transmettre, il faut donc passer par le système de fichier et non par une url (qui sera refusée).

A mon avis, ton problème vient de la façon dont tu essayes de lire le fichier... je pense que ta variable $ip_serv contient l'ip du serveur ou le nom de domaine et probablement le protocole http, et c'est cela qui pose problème. Il faudrait utiliser un chemin relatif pour ouvrir le fichier plutôt qu'une url :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 82 Messages

17 oct. 2011, 00:42

Merci beaucoup pour ta réponse!

Je viens de tester et c'est effectivement cela qui bloquait!!

Merci!

Amicalement,
Tex