- 1. Interdire l’accès aux fichiers sensibles
- 2. Bloquer l’exécution de scripts dans /uploads
- 3. Limiter les méthodes HTTP autorisées
- Checklist à appliquer
- En résumé
- Ressources utiles
Introduction
La sécurité d’un site web ne repose pas uniquement sur des headers ou un pare-feu. Elle commence aussi par des mesures préventives dans la configuration du serveur web.
Dans cet article, nous allons aborder 3 axes cruciaux pour protéger votre application via Nginx :
- L’interdiction d’accès aux fichiers sensibles (ex. : .env, .git, .htaccess)
- La désactivation de l’exécution PHP dans les répertoires d’upload
- La restriction des méthodes HTTP (seulement GET et POST autorisés)
Ces pratiques sont simples à mettre en place, mais trop souvent oubliées. Et pourtant, elles peuvent faire la différence entre un site sécurisé et un site compromis.
Ces recommandations s’inspirent des bonnes pratiques du guide de sécurité OWASP pour Nginx et de la documentation officielle Nginx.
- Interdire l’accès aux fichiers sensibles
Certains fichiers générés par vos outils ou frameworks ne doivent jamais être accessibles via le navigateur :
- .env (variables sensibles, mots de passe)
- .git (historique du code)
- .htaccess, .htpasswd
- .DS_Store, Thumbs.db, etc.
- Fichiers de config internes : .idea, .vscode, .svn, .project
Objectif : Empêcher qu’un utilisateur accède à ces fichiers avec une simple URL du type https://monsite.com/.env.
Configuration Nginx recommandée :
location ~ /\.(ht|git|env|svn|project|idea|DS_Store|vscode) {
deny all;
access_log off;
log_not_found off;
}
location ~* ^/uploads/.*.php$ { deny all; }
Tu peux élargir à d’autres extensions dangereuses :
location ~* ^/uploads/.*\.(php|phar|phtml|pl|py|cgi)$ {
deny all;
}
limit_except GET POST { deny all; }
Ce bloc :
- Refuse toute requête autre que GET ou POST
- Peut être appliqué globalement ou sur certains location
Exemple concret :
location /api/ {
limit_except GET POST {
deny all;
}
proxy_pass http://backend-api;
}
curl -X DELETE https://monsite.com/
Si tu reçois une réponse 405 Not Allowed, c’est bon signe. Sinon… corrige vite !
Bonus : interdire les requêtes sur des chemins “pièges”
Certains bots scannent le web à la recherche de fichiers mal configurés. Tu peux les bloquer préventivement :
location ~* /(composer\.json|composer\.lock|package\.json|wp-config\.php|php\.ini)$ {
deny all;
}