J'ai écrit un module apache 2.x qui tente d'analyser les corps des requêtes et de renvoyer de manière conditionnelle 403 Forbidden si certains modèles correspondent.
Ma première tentative a utilisé ap_hook_handler
pour intercepter la demande, la scanner et ensuite renvoyer DECLINED
au véritable gestionnaire pourrait prendre le relais (ou 403 si les conditions sont réunies).
Le problème avec cette approche est que lorsque je lis le corps du POST de la requête (en utilisant ap_get_client_block
et amis), il consommait apparemment le corps de sorte que si la requête était ensuite traitée par mod_proxy, le corps disparaissait.
Je pense que la bonne façon de scanner le corps serait d'utiliser un filtre d'entrée, sauf qu'un filtre d'entrée ne peut que retourner APR_SUCCESS
ou échouer. Tout code de retour autre que APR_SUCCESS est traduit en HTTP 400 Bad Request
.
Je pense que je peux peut-être stocker un drapeau dans les notes de la demande si le filtre d'entrée veut faire échouer la demande, mais je ne suis pas sûr de quel hook ultérieur obtenir cela.