
Pour bien débuter un projet web, il faut d’entrée de jeu penser à la sécurité. Une fois que des milliers de lignes de codes auront été écrites et des centaines d’URL diffusées, il sera beaucoup plus compliqué de revoir sa copie.
Donc, voilà quelques astuces pour structurer son projet en prenant la sécurité en compte.
La structure des dossiers
Dans cet exemple, chaque dossier à une place et un rôle précis pour éviter les ennuis :

- php : Ce dossier conteint tout le code PHP qui ne sera pas accessible via une URL. Tout ce qui est framework, classes, librairies, templates, …
- temp : Ici, on enregistrera tout les fichiers générés par le code PHP. C’est à dire le cache, les sessions, les fichiers de données, … Toujours non accessibles via une URL.
- uploads : Tout les fichiers envoyés par les utilisateurs et qui ne seront pas accessibles via une URL.
- www : Tout ce qui est inclut dans ce répertoire sera accessible via une URL.
- www/admin : le répertoire d’administration (si nécessaire).
- www/admin/index.php : le point d’entré de l’administration.
- www/images : Juste les images utilisées sur le site
- www/uploads : Les fichiers uploadés par les utilisateurs, mais ce coup-ci accessibles via une URL.
- www/index.php : Le point d’entré du site.
Les attributs
Les attributs permettent de définir les droits d’accès de lecture, d’écriture et d’exécution des fichiers et dossiers. En les paramettrant correctement vous sécuriserez d’autant plus votre application. Les droits que je vous indique sont ceux de l’utilisateur exécutant le PHP.
- php : (lecture seulement) Pas besoin de modifier ces fichiers donc, autant l’interdire pour éviter qu’une utilisation détournée de votre application ne le fasse.
- temp : (écriture et lecture) On peut retrouver de tout ici. Mais comme c’est le code PHP qui l’a fait, on peut considérer qu’il s’agit d’un contenu de confiance.
- uploads : (écriture et lecture) On retrouve également de tout, mais ce coup-ci, on ne maitrise pas le contenu.
- www : (lecture seule) Personne n’a besoin de changer quoi que ce soit ici.
- www/admin : (lecture seule) Personne n’a besoin de changer quoi que ce soit ici non plus.
- www/admin/index.php : (lecture seule) Ce fichier est un point névralgique. Aucune changement ne doit être accepté.
- www/images : (lecture seule) Un répertoire dont le contenu doit resté maitrisé par l’administrateur.
- www/uploads : (écriture et lecture) Comme son homonyme à la racine, on ne maitrise pas le contenu de ce répertoire.
- www/index.php : (lecture seule) Ce fichier est un point névralgique. Aucune changement ne doit être accepté.
Un peu plus loin avec les .htaccess
Maintenant, la majeur partie du code est sécurisée. Mais il reste quelques ombres au tableau, les 2 répertoires d’uploads.
Pas de soucis, il suffit d’ajouter un fichier .htaccess pour gérer plus finement les droits.
Ce qu’il suffit de faire, c’est d’interdire les fichiers de scripts (php, asp, javascript, exécutables, batch, …) ou à l’opposée, de n’autoriser que des fichiers bien spécifiques (jpg, gif, png, txt, …)
Pour interdire certains fichiers :
RewriteCond %{REQUEST_URI} ^.*.php.*$ [NC,OR] RewriteCond %{REQUEST_URI} ^.*.asp.*$ [NC,OR] RewriteCond %{REQUEST_URI} ^.*.jsp.*$ [NC,OR] RewriteCond %{REQUEST_URI} ^.*.js.*$ [NC,OR] RewriteCond %{REQUEST_URI} ^.*.exe.*$ [NC,OR] RewriteCond %{REQUEST_URI} ^.*.bat.*$ [NC,OR]RewriteRule .* /index.php [NC,L]
Pour n’autoriser que certains fichiers :
RewriteCond %{REQUEST_URI} !^.*.jpg.*$ [NC] RewriteCond %{REQUEST_URI} !^.*.jpeg.*$ [NC] RewriteCond %{REQUEST_URI} !^.*.gif.*$ [NC] RewriteCond %{REQUEST_URI} !^.*.png.*$ [NC] RewriteCond %{REQUEST_URI} !^.*.bmp.*$ [NC] RewriteCond %{REQUEST_URI} !^.*.txt.*$ [NC]RewriteRule .* /index.php [NC,L]
Si vous ne travaillez pas sous apache, les autres serveurs disposent également les outils nécessaires pour réaliser la même choses.
Conclusion
Vous voilà désormais avec une structure de fichiers bien sécurisée. Il ne vous reste plus qu’à faire couler le café et à remplir tout ça de lignes de code.





Merci pour ces astuces, c’est un bon début pour s’intéresser plus à la sécurité d’une application web.