Application de blog développée en PHP dans un objectif pédagogique, mettant l’accent sur la sécurité applicative et une architecture modulaire proche des standards professionnels. Le projet a été initialement conçu avec des vulnérabilités, puis entièrement corrigé afin de démontrer les bonnes pratiques de sécurisation d’une application web.
- Mettre en œuvre les principes fondamentaux de la sécurité web
- Corriger des vulnérabilités courantes (OWASP Top 10)
- Proposer une architecture claire et maintenable
- Fournir une base saine pour des évolutions futures (MVC, routing, etc.)
- Authentification sécurisée (inscription / connexion)
- Création et consultation d’articles
- Commentaires sur les articles
- Recherche d’articles
- Espace utilisateur
- Interface administrateur (gestion des utilisateurs)
- Upload sécurisé d’avatars
Les mécanismes suivants ont été implémentés :
-
Injection SQL : requêtes préparées via PDO
-
Mots de passe : hachage bcrypt (cost 12), aucune donnée sensible en clair
-
XSS : échappement systématique des sorties (
htmlspecialchars) -
CSRF : tokens CSRF sur tous les formulaires
-
Sessions :
- Cookies
HttpOnlyetSameSite - Régénération de l’ID après connexion
- Durée de session limitée
- Cookies
-
Upload de fichiers :
- Vérification du type MIME réel
- Limitation de taille (2 Mo)
- Stockage hors du document root
-
Rate limiting : protection contre les attaques par force brute
-
Docker :
- Exécution avec un utilisateur non-root
- Permissions fichiers restreintes (755)
-
Headers de sécurité :
X-Frame-OptionsX-Content-Type-OptionsReferrer-Policy
Le projet suit une séparation stricte entre les fichiers publics et privés.
/app/
bootstrap.php # Point d'entree centralise
/views/layouts/ # Templates reutilisables
header.php
footer.php
/config/
config.php # Configuration application
database.php # Connexion DB
.htaccess # Protection acces direct
/includes/
security.php # Fonctions securite
validation.php # Fonctions validation
.htaccess # Protection acces direct
/public/ # Document root
*.php # Pages publiques
/css/style.css # Styles centralises
/storage/
/database/ # Fichier SQLite
/uploads/avatars/ # Fichiers utilisateurs
Principe clé : seul le dossier public/ est exposé au web.
Les fichiers sensibles (configuration, base de données, uploads) sont isolés et protégés via .htaccess.
docker build -t mini-blog .
docker run -d -p 8080:80 mini-blog
docker exec -it <container_id> php /var/www/html/init_db.phpAccès à l’application :
http://localhost:8080
php init_db.php
cd public
php -S localhost:8000Accès :
http://localhost:8000
Après l’initialisation de la base :
- Email : admin@example.com
- Mot de passe : Admin123!
À modifier immédiatement après la première connexion.
# tentative d'injection SQL (doit échouer)
curl -X POST http://localhost:8080/login.php \
-d "email=admin' OR '1'='1' --&password=test"
# XSS (doit être échappé)
curl -X POST http://localhost:8080/comment.php \
-d "content=<script>alert('xss')</script>"- PHP 8.2+
- SQLite3
- PDO
- Apache (production) ou serveur PHP intégré (développement)
- Docker (optionnel mais recommandé)
Ce projet s’inscrit dans un cadre académique (sécurité des applications web). Il a pour objectif de démontrer :
- l’identification de vulnérabilités,
- leur correction,
- et la mise en place d’une architecture plus professionnelle.
Projet éducatif. Ne pas utiliser en production sans audit de sécurité complémentaire.