Autoriser uniquement les méthodes HTTP valides : couper les requêtes indésirables avec Nginx 405/444
En surveillant les logs d’une application web en production, on peut parfois rencontrer des situations inattendues.
- Je pensais n’utiliser que
GET / POST / PUT / DELETE - Mais un log révèle une méthode inconnue
Par exemple, on peut voir PROPFIND (une méthode WebDAV) dans les logs. L’application va probablement répondre « méthode non prise en charge », mais la vraie question est la suivante.
Faut-il vraiment que l’application traite ces requêtes parasites ? La réponse habituelle est « non ». Il est donc propre de laisser Nginx filtrer les méthodes non autorisées dès le premier point d’entrée.
Pourquoi bloquer dès Nginx ?
On peut aussi bloquer au niveau de l’application, mais dès que la requête atteint l’application, des coûts sont déjà engagés.
- Entrée WSGI/ASGI
- Middleware, journalisation, authentification partielle
- Logs d’application encombrés, rendant les vrais problèmes difficiles à repérer
- En cas de forte charge, l’accumulation de trafic inutile
En revanche, bloquer avec Nginx :
- Arrêt immédiat au plus haut niveau → coût minimal
- Logs d’application propres → facilité de maintenance
- Surface d’attaque réduite → élimination des méthodes inutiles
En une phrase :
L’application construit le produit, Nginx joue le rôle de gardien.
Les méthodes étranges dans les logs sont rarement du trafic normal
PROPFIND est un exemple typique.
- Scan de base pour vérifier si WebDAV est activé
- Si
PUT/MKCOLest ouvert par erreur, l’attaquant tente de passer à l’étape suivante - User‑Agent vide ou requêtes HTTP/1.0 simplifiées sont fréquentes
Le point clé est simple.
Si notre service n’utilise pas cette méthode, il est très peu probable que la requête soit légitime. Il n’est donc pas nécessaire d’envoyer la requête à l’application pour y répondre poliment.
Stratégie simple : opérer avec une liste blanche

Le principe est « ouvrir uniquement ce qui est nécessaire, fermer le reste ».
- Pages web/statiques : généralement
GETetHEADsuffisent - API : autoriser
POST/PUT/PATCH/DELETEuniquement sur les endpoints requis
Toutes les autres méthodes (ex. PROPFIND, MKCOL, LOCK, etc.) sont bloquées si elles ne sont pas utilisées.
405 vs 444 : quelle réponse choisir ?
Il existe deux approches principales pour bloquer.
1) 405 Method Not Allowed
- Standard et compréhensible
- Informe clairement le client légitime qu’une méthode est interdite
2) 444 (Nginx : fermeture de la connexion sans réponse)
- Ferme la connexion sans message
- Donne moins d’indications aux scanners/robots
- Calme et propre du point de vue de la gestion (« on ne laisse pas de trace »)
En pratique, on combine les deux :
- Méthodes sans valeur pour le web public : 444
- Clients légitimes susceptibles de faire une erreur : 405
Exemple de configuration Nginx : deux modèles pour « autoriser uniquement les méthodes »
Les exemples ci‑dessous sont prêts à copier‑coller.
Modèle A : GET/HEAD par défaut, API avec méthodes supplémentaires
server {
# ... listen/server_name etc ...
# 1) Par défaut : web/statics ne permettent que GET/HEAD
location / {
if ($request_method !~ ^(GET|HEAD)$) { return 444; } # ou 405
proxy_pass http://app;
}
# 2) API : autoriser uniquement les méthodes nécessaires
location /api/ {
if ($request_method !~ ^(GET|HEAD|POST|PUT|PATCH|DELETE|OPTIONS)$) { return 444; }
proxy_pass http://app;
}
}
/est souvent limité àGET/HEADcar il s’agit de pages de consultation./api/peut nécessiterOPTIONSpour le CORS.
Modèle B : bloquer explicitement les méthodes « étranges » (début léger)
location / {
if ($request_method ~ ^(PROPFIND|PROPPATCH|MKCOL|COPY|MOVE|LOCK|UNLOCK)$) { return 444; }
proxy_pass http://app;
}
- Couper immédiatement les requêtes parasites observées en production
- À long terme, le modèle A (liste blanche) est plus sûr et plus facile à gérer.
Note : bien que l’usage de
ifsoit parfois déconseillé dans Nginx, ces conditions simples de « retour immédiat » sont couramment employées en production. Pour une approche plus stricte, on peut utiliserlimit_except.
Conclusion : « autoriser uniquement ce qui est nécessaire » simplifie la gestion
En résumé :
- Les méthodes inconnues sont rarement du trafic légitime
- Les faire passer à l’application engendre des coûts et pollue les logs
- Bloquer au niveau de Nginx avec 405 ou 444 est la solution la plus propre
En appliquant simplement ce modèle :
- Moins de ressources consommées par l’application
- Logs plus lisibles
- Gestion opérationnelle plus fluide
Aucun commentaire.