8792 sujets

Développement web côté serveur, CMS

Bonjour à tous, je suis nouveau sur ce forum que j'avais l'habitude de consulter pour des questions de CSS, mais je viens à vous avec une question de programmation pure.

Voilà, j'ai un site hébergé sur un domaine, hébergeur payant (et performant), qui supporte toutes les joyeusetés telles que l'htaccess notamment.

J'ai droit à plusieurs accès FTP et j'en ai configuré un pour que les membres de mon site puissent y déposer leurs updates. (le répertoire updates/). Je suis le seul à avoir un accès sur la racine du site.

Toutefois, certains aimant "toucher à tout" (mais également dans un but didactique et afin de sécuriser au max mon architecture), j'aimerais protéger le contenu d'un autre répertoire (forum/) contenant des fichiers sensibles (mot de passe en dur dans le code PhP pour accéder à une base de données mySQL), c'est à dire interdire les "include", les "copy" ou toute autre méthode PhP pour accéder ou récupérer le contenu des fichiers de ce répertoire ("forum/").

Etant déjà allé sur plusieurs forums de développement web, on m'a dit de regarder du côté des .htaccess, d'en placer un dans le répertoire forum/ , et de configurer pour empêcher toutes les requêtes en provenance du répertoire "updates/".

Après avoir lu quelques tutoriaux je suis arrivé au résultat suivant :

<FilesMatch "\.(php)$">
Order allow, deny
Deny from ../updates
</FilesMatch>

Mais cela n'a pas l'air de marcher (j'ai fait tous les tests nécessaires).
Quelqu'un aurait-il une idée ?
Bonsoir,

Tes chemins sont-ils bon depuis l'emplacement de ton htaccess ?

a écrit :
<FilesMatch "\.(php)$">


d'autre part mais je me trompe peut-être je ne vois pas ce que ton anti-slash fait ici.
J'ai bien essayé sans antislash mais sans succès.

La structure de mes répertoires est :

monsite.com/forum <-- le répertoire à protéger
monsite.com/updates <-- le répertoire dont j'aimerais "paralyser" l'accès aux fichiers du forum.

En fait il s'agit d'empêcher la lecture du fichier config.php qui contient les infos suivantes (valeurs à titre d'exemple).


$dbhost = 'localhost';
$dbname = 'mabase';
$dbuser = 'toto';
$dbpasswd = 'motdepasse';


Or malheureusement, quand je me place dans le répertoire updates et que je crée et exécute un fichier tout bête :

include("../forums/config.php");
echo $dbpasswd;

Il m'affiche le mot de passe, ce qui ne devrait pas arriver! Smiley bawling

Pour empêcher l'accès, j'avais fait plusieurs essais avec les htaccess.
J'ai testé avec Files également.

<Files "config.php">
Order allow, deny
Deny from ../updates$
</Files>

J'ai également essayé sans et avec les guillemets, sans succès Smiley decu

Sur un autre forum on m'a mis sur cette piste :

RewriteEngine On
RewriteCond %{HTTP_REFERER} !=""
RewriteCond %{HTTP_REFERER} ^http://monsite.com/updates$ [NC]
RewriteRule ^.*$ [F]


Est-ce qu'Apache considère le fichier utilisant l'instruction include comme un véritable referer ou pas ?

PS : je précise que la config est on ne peut plus classique, Apache 1.3 et PhP 4.3.9, et le mod_rewrite est activé donc pas de raison pour que la deuxième solution ne fonctionne pas ! ^^
Modifié par SSJ17Vegeta (08 Jun 2005 - 23:56)
Hum, effectivement ce genre de fichier n'est pas simple a crée.
Pour apache, je croit que tu peu restreindre l'accée a des dossier a un domaine.

Donc tu peu dire le domaine alsacreations.com ne peu pas lire un fichier ect...

Mais je ne sait pas si ca va fonctionner avec tes dossiers.
Peut etre qu'en mettant le repertoire updates sur un sous domaine on pour lui interdire d'aller lire ton forum...


Allow (all, [liste de domaine])

Deny (all, [liste de domaine])

Order (Allow,Deny ou Deny,Allow)


Order Deny, Allow

Deny from ..LeNomDuDomaine.com

Toutes les personnes (requêtes) provenant du domaine .LeNomDuDomaine.com ne pourront avoir accès aux ressources comprises dans le répertoire et ses sous-répertoires. La commande Order sert à préciser explicitement que la commande Deny va bien annuler l'effet de Allow et non l'inverse.

Voici un exemple de restriction d'accès :

ErrorDocument 403 http://monsite/403.htm

AuthUserFile /repertoire/de/votre/fichier/.FichierDeMotDePasse

AuthGroupFile /dev/null

AuthName "Accès sécurisé au site"

AuthType Basic

<LIMIT GET POST>

order deny,allow

deny from all

allow from 193.48.172.2

require user JFPillou

</LIMIT>

Dans ce cas, l'accès ne sera possible que pour l'utilisateur JFPillou à partir de l'adresse IP 193.48.172.2 et avec le bon mot de passe.


Toutes les reponses a tes questions sur CCM
a écrit :
configurer pour empêcher toutes les requêtes en provenance du répertoire "updates/".

Ça veut dire que tu veux empêcher les fichiers php du répertoire update d'inclure/lire les fichiers du répertoire à sécuriser ? J'ai bien peur que ce ne soit pas possible, car PHP se moque totalement du .htaccess (celui-ci ne régulant que les accès via HTTP, par l'intermédiaire d'Apache, alors que PHP passe directement par le système de fichiers). De toute façon, permettre à tes visiteurs d'uploader un fichier .php est une immense bourde et une grosse faille de sécurité. Renomme-les plutôt en .txt à l'upload, ou essaie quelque chose du genre dans le .htaccess du répertoire :
Addtype text/plain .php .php4 .php5 .phtml .py .pl .cgi .rb


Sinon, pour la restriction d'accès depuis l'extérieur, j'utilise tout bêtement ceci, sur les fichiers de données/configuration non interprétés par le serveur :
<Files ~ "\.(dat|ini)$">
  Order allow,deny
  Deny from all
</Files>


(le \., c'est pour dire qu'on veut bien un point, car le caractère . dans une regexp peut remplacer n'importe quel caractère)

Mais normalement, comme un fichier .php est toujours interprété, tu ne risques pas grand chose si un petit malin y accède directement...