8797 sujets

Développement web côté serveur, CMS

Bonjour à tous,

Je vous expose mon "problème" (s'il en est un vraiment) ...
Je souhaiterai en fait dans l'optique du développement d'un framework spécifique effectuer une réécriture d'url propre... c'est pourquoi j'ai opté pour un htaccess de ce type :

<IfModule mod_rewrite.c>
    Options -Indexes
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
</IfModule>


le problème à ce niveau était que tous les fichiers qui existent via l'url donnée (y compris les .php) se chargeait au lieu de passer par le redirection (ce qui est normal me direz vous à cause des conditions sur le REQUEST_FILENAME Smiley smile )..
Mais ce système à l'avantage de permettre de charger des choses comme '/templates/mon_theme/css/style.css' (chose dont j'ai besoin) mais cela peut aussi exécuter un fichier php ce qui peut être dangereux parfois.

C'est pourquoi j'ai rajouté au dessus du IfModule (pour autoriser uniquement l'index de la racine) ces lignes :

<FilesMatch "^.*(?<!index)\.php$">
    Order Allow,Deny
    Deny from all
</FilesMatch>


Cela bloque bien tous les fichiers php et autorise juste index.php .... Mais malheuresement TOUS les index.php Smiley fache (exemple : /test/index.php).

Auriez-vous une solution qui permettrai donc ceci en résumé :
- http://monsite.com/index.php [autorisé]
- http://monsite.com/test/index.php [bloqué]


Cela fait + d'1h que je m'arrache les cheveux et si ça ce trouve la solution est sous mes yeux ... so please Smiley help me Smiley cligne .

Merci d'avance
Modifié par sh@dow (09 Oct 2011 - 21:28)
Règle numéro un de sécurité :
Dans le dossier Web : images, css, javascript et index.php (qui ne contient qu'un point d'entré vers le framework) et c'est tout.

Ton framework (contenant tous tes fichiers php) en dehors du dossier Web. Problème réglé.
Modifié par jb_gfx (07 Oct 2011 - 02:01)
Merci pour la réponse déjà Smiley smile ...

Je vois ce que tu veux dire en séparant le dossier du framework du dossier web mais à vrai dire c'est déjà le cas Smiley cligne ... car le coeur du framework est déjà regroupé dans un espace distinct contenant les différents helpers, librairies, etc ... et est appelé par le framework ainsi que par l'administration (qui sont deux espaces séparés).

En fait, d'après ta réponse et l'architecture que j'ai déjà adoptée, la meilleure solution qui s'offre à moi est de modifier légèrement la structure des dossiers et en isolant la partie "web" visible tout comme cela est fait dans le framework Cakephp par exemple avec leurs dossier 'webroot' qui contient images, css, js, etc ... c'est bien ça ? Smiley smile