J'ai un service web RESTful qui accepte une requête POST vers une ressource sans corps d'entité, par exemple une requête POST vide. La configuration par défaut de modsecurity exige que toutes les requêtes POST aient un Content-Length :
# Require Content-Length to be provided with every POST request
SecFilterSelective REQUEST_METHOD "^POST$" chain
SecFilterSelective HTTP_Content-Length "^$"
La console modsecurity signale cette situation comme une PROTOCOL_VIOLATION/EVASION. Cependant, ce n'est pas ce que je constate en lisant le document HTTP/1.1 RFC . Un serveur est autorisé à exiger Content-Length (en retournant soit 400 soit 411), mais je ne vois rien qui indique qu'un serveur doit (ou une recommandation qu'il devrait) se comporter de cette manière.
Cela peut varier selon le navigateur, mais les clients Flash qui effectuent des requêtes POST sans corps d'entité n'envoient pas d'en-tête de requête. Curl ne le fait pas non plus lorsque vous faites 'curl -XPOST ...'. Pour ces raisons, et parce que je pense que la règle de modsecurity est une mauvaise interprétation de la spécification HTTP, j'envisage de supprimer l'exigence d'un en-tête Content-Length pour les requêtes POST dans notre configuration.
Quelqu'un sait-il s'il y a un exploit spécifique pour lequel cette règle a été créée ? J'ai effectué de nombreuses recherches sur Google et je n'ai trouvé que des références au fait que cela faisait partie de la configuration de base de modsecurity.