Limiter les risques sur Nginx : fichiers sensibles, uploads, méthodes HTTP


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 :

  1. L’interdiction d’accès aux fichiers sensibles (ex. : .env, .git, .htaccess)
  2. La désactivation de l’exécution PHP dans les répertoires d’upload
  3. 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.


1. 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;
}

🔒 Ce bloc :

  • Interdit totalement l’accès
  • Désactive les logs d’erreur (discrétion)
  • Fonctionne sur toutes les variantes (.git, .env, .gitignore, etc.)

✅ Tu peux le placer dans ton bloc server {} ou dans un include partagé entre tes vhosts.


2. Bloquer l’exécution de scripts dans /uploads

Les dossiers où les utilisateurs peuvent téléverser des fichiers sont des zones à haut risque.

Si un pirate réussit à envoyer un fichier .php, il pourrait l’exécuter ensuite en visitant :
https://monsite.com/uploads/malicieux.php

🔥 Cela peut aboutir à une prise de contrôle complète du serveur si le script injecté contient une backdoor.

Objectif : autoriser l’upload de fichiers… mais jamais leur exécution

Configuration Nginx :

location ~* ^/uploads/.*\.php$ {
    deny all;
}

Tu peux élargir à d’autres extensions dangereuses :

location ~* ^/uploads/.*\.(php|phar|phtml|pl|py|cgi)$ {
    deny all;
}

💡 Conseil : sépare bien tes dossiers d’upload et tes scripts PHP.


3. Limiter les méthodes HTTP autorisées

Par défaut, un serveur web accepte plusieurs méthodes :

  • GET (lecture)
  • POST (formulaires)
  • Mais aussi : PUT, DELETE, TRACE, OPTIONS, PATCH…

🛑 Certaines de ces méthodes sont dangereuses si activées inutilement, surtout dans les backends dynamiques.

Exemple de faille :

Une API exposée sans restriction peut accepter une requête DELETE non protégée, ce qui peut effacer des données.


Solution : restreindre aux méthodes nécessaires

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;
}

Astuce : tester avec curl

Pour vérifier si ton serveur accepte d’autres méthodes, utilise cette commande :

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;
}

Et tu peux aussi bloquer les requêtes contenant certains user-agents suspects ou chemins spécifiques.


Checklist à appliquer

VérificationStatut idéal
Fichiers sensibles inaccessibles✅ OK
PHP interdit dans les dossiers publics✅ OK
Seules les méthodes GET/POST actives✅ OK
Accès REST/API protégé✅ OK
Logging désactivé sur les interdictions✅ OK

En résumé

  • Bloquer l’accès aux fichiers sensibles est une barrière essentielle contre les fuites d’informations.
  • Empêcher l’exécution de fichiers dans /uploads protège contre les RCE (Remote Code Execution).
  • Limiter les méthodes HTTP réduit considérablement la surface d’attaque.

Ces protections sont simples, légères, et redoutablement efficaces. Ce sont des pratiques recommandées par tous les standards modernes, y compris l’OWASP.


Ressources utiles