[RESOLU] Empêcher l'accès à certains répertoires contenant des images

Eléphanteau du PHP | 13 Messages

23 sept. 2014, 07:51

Bonjour à tous,

Je ne suis pas sûr d'être tout à fait au bon endroit pour ma question. Mais comme je me sens débutant, je me suis dit que j'avais au moins la moitié du thème.

mon soucis :
J'aimerais empêcher l'affichage du listing de contenu d'un répertoire via un navigateur.

par exemple
http://monsite.fr/repertoire/images
afficherait le fameux "403 forbidden" et non la liste des fichiers et répertoires

Ce que j'ai tenté:
J'ai mis un fichier .htaccess dans le répertoire en question avec
"Options –Indexes"
ou
"Deny from all".

Mais le problème est que certains dossiers contiennent des images nécessaires au site.

Et, lorsque le htaccess est présent, ces images ne s'affichent plus.

J'espère que quelqu'un pourra m'aider.

Merci d'avance.

Eléphant du PHP | 151 Messages

23 sept. 2014, 08:59

Bon, ça dépend aussi du nombre de répertoires que tu peux avoir et qui contiennent des images, mais un simple fichier index.php à vide empêchera l'accès.

A chaque création d'un répertoire qui contiendra des images, tu y crées un index.php, et hop, fini. C'est LA solution la plus simple.
(tu es sur un forum php, je suppose que par défaut ton serveur web lit le php).
Développeur d'applications pour intranets industriels (IHM), DBA Oracle, auto entrepreneur. Je fuis les frameworks car je pense comme Rasmus Lerdorf : "all PHP frameworks suck"...
Je me suis lancé dans la reprise du projet PhpMyNewsletter (GNU GPL), que je vous invite à essayer.

echo ($user=='enregistré?"je t'aide":"je t'aide pas !");

Eléphanteau du PHP | 13 Messages

23 sept. 2014, 10:27

Merci Arnaud69,

Pour répondre à ta question, oui, pas de problème pour le php.

Pour le fichier index.php, j'avais vu cette solution, mais elle a un (2 dans mon cas) inconvénient :

Je souhaite que les internautes n'ai pas accès à des fichiers pdf dont le nom est le même que certaines images (sauf extension bien sûr).
autrement dit :
On a accès à :
http://monsite.fr/repertoire1/repertoire2/image.jpg
Image qui s'affiche sur le site pour illustrer (avec un clic droit et "afficher l'image" on connait son chemin d'accès).

Si on comprend le fonctionnement du site et si on est malin, on a aussi accès à :
http://monsite.fr/repertoire1/repertoire2/image.pdf

même s'il y a un fichier index.php dans le répertoire.

Sauf qu'il ne faudrait pas que les internautes ai accès au .pdf.

Le deuxième inconvénient pour mon cas, est que j'ai actuellement environ 300 "repertoire2".

Je compte quand même mettre le fichier index.php dans certain répertoire pour limiter un peu les accès, mais s'il y a la possibilité d'être encore plus efficace, je suis preneur.

Merci d'avance

jo-jo-123
Invité n'ayant pas de compte PHPfrance

23 sept. 2014, 10:54

Bonjour,

La meilleur solution dans ton cas est le .htaccess

Pour bloquer le listage des fichiers :
Options -Indexes

Pour pas qu'il accède au .pdf :
<Files *.pdf>
Deny from all
</Files>

Donc pas besoin de créer 300 index.php :D

Eléphant du PHP | 151 Messages

23 sept. 2014, 12:20

Pour ma base de données cinéma, sachant que j'ai plus de 300.000 images (sans les miniatures), j'ai géré dynamiquement la création d'un répertoire à 6 chiffre (ex : /data/0/1/2/3/4/5/6) qui stocke les images (en base via l'identifiant du film) avec un nom sur 35 caractères aléatoires (ex : 3e16a03c3d346cff37690a233f54d80c.jpg) et là... plus de problème !

Il faut savoir qu'il y a des limites au système : 32000 et quelques répertoires par répertoire (le grand problème des inodes, table des inodes, etc...)

C'était pour discuter.
Développeur d'applications pour intranets industriels (IHM), DBA Oracle, auto entrepreneur. Je fuis les frameworks car je pense comme Rasmus Lerdorf : "all PHP frameworks suck"...
Je me suis lancé dans la reprise du projet PhpMyNewsletter (GNU GPL), que je vous invite à essayer.

echo ($user=='enregistré?"je t'aide":"je t'aide pas !");

Eléphanteau du PHP | 13 Messages

26 sept. 2014, 14:01

Bonjour,

La meilleur solution dans ton cas est le .htaccess

Pour bloquer le listage des fichiers :
Options -Indexes

Pour pas qu'il accède au .pdf :
<Files *.pdf>
Deny from all
</Files>

Donc pas besoin de créer 300 index.php :D
Merci Jo-jo-123, mais j'ai testé et malheureusement avec le "options -indexes", les images contenus dans les répertoires visés ne se listent pas certes, mais elles ne s'affichent pas non plus sur les pages du site.

Et, je ne peux pas changer l'arborescence des répertoires.

Merci quand même.

Je crois que je vais en rester au stade de index.php que je vais dupliquer dans tous les dossier de temps en temps.
avec un nom sur 35 caractères aléatoires
En effet, c'est une solution, mais dans mon cas elle n'est pas possible car le nom des images et des pdf doivent pouvoir être comparé.

Je ne met pas résolu car ce n'est pas le cas, mais si personne n'a d'autre solution. Je me contenterais du moins pire.

Merci encore

Eléphant du PHP | 151 Messages

26 sept. 2014, 19:39

T'as essayé ça à la racine :

Code : Tout sélectionner

Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all Options -Indexes -FollowSymLinks AllowOverride None Order allow,deny allow from all
Sinon, ça :

Code : Tout sélectionner

Options -Indexes
C'est que dans le répertoire concerné
Développeur d'applications pour intranets industriels (IHM), DBA Oracle, auto entrepreneur. Je fuis les frameworks car je pense comme Rasmus Lerdorf : "all PHP frameworks suck"...
Je me suis lancé dans la reprise du projet PhpMyNewsletter (GNU GPL), que je vous invite à essayer.

echo ($user=='enregistré?"je t'aide":"je t'aide pas !");

Eléphanteau du PHP | 13 Messages

29 sept. 2014, 09:08

Bonjour,
T'as essayé ça à la racine :

Code : Tout sélectionner

Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all Options -Indexes -FollowSymLinks AllowOverride None Order allow,deny allow from all
Non, ça ne fonctionne pas, ça m'affiche ça :
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.



Mais, good news, ça :

Code : Tout sélectionner

Options -Indexes
C'est que dans le répertoire concerné
Ça fonctionne, et

Ça aussi :

Code : Tout sélectionner

Options <Files *.pdf> Deny from all </Files>
Donc merci à vous deux et désolé jo-jo-123 d'avoir dit que ça ne fonctionnait pas.

J'avais peut-être mal enregistré le fichier htaccess avant de le déposer dans le répertoire voulu.

D'ailleurs, je l'ai déposé au même niveau que les 300 répertoires à "protéger", La fois d'avant, je l'avais mis dans 1 répertoire au dessus, je ne sais pas si ça a joué.

Merci encore.