web-dev-qa-db-fra.com

Meilleur moyen de se connecter POST données dans Apache?

Imaginez que vous ayez une API de site qui accepte les données sous la forme de requêtes GET avec des paramètres, ou en tant que POST requêtes (par exemple, avec un codage d’URL standard, & -separated POST data). Si vous souhaitez consigner et analyser des appels d'API, les requêtes GET seront simples car elles figureront dans le journal Apache. Existe-t-il un moyen simple d'obtenir également les données POST dans le journal Apache? 

(Bien sûr, nous pourrions enregistrer explicitement les données POST = dans l'application, mais j'aimerais disposer d'une méthode de configuration permettant de ne pas m'en soucier dans le code.)

55
Kevin Weil

Utilisez mod_dumpio d'Apache. Soyez prudent pour des raisons évidentes.

Notez que mod_dumpio arrête de consigner les données utiles binaires au premier caractère NULL . Par exemple, un téléchargement multipart/form-data d'un fichier gzip'd ne montrera probablement que les premiers octets avec mod_dumpio. 

Notez également qu'Apache peut ne pas mentionner ce module dans httpd.conf même s'il est présent dans le dossier /modules. Il suffit d’ajouter LoadModule manuellement.

38
Spider

Bien qu'il soit tard pour répondre. Ce module peut faire: https://github.com/danghvu/mod_dumpost

13
w00d

Vous pouvez installer mod_security et mettre dans /etc/modsecurity/modsecurity.conf:

SecRuleEngine On
SecAuditEngine On
SecAuditLog /var/log/Apache2/modsec_audit.log
SecRequestBodyAccess on
SecAuditLogParts ABIJDFHZ

Pas exactement une réponse, mais je n'ai jamais entendu parler d'un moyen de faire cela dans Apache même. Je suppose que cela pourrait être possible avec un module d’extension, mais je ne sais pas s’il en a été écrit un. 

Une des préoccupations est que POST les données peuvent être assez volumineuses, et si vous n'imposez pas une limite au nombre de traces enregistrées, vous risquez de manquer d'espace disque après un certain temps. C'est une voie possible pour que les pirates informatiques se moquent de votre serveur.

7
David Z

Vous pouvez utiliser [ModSecurity][1] pour afficher les données POST.

Installer sur Debian/Ubuntu:

$ Sudo apt install libapache2-mod-security2

Utilisez le fichier de configuration recommandé:

$ Sudo mv /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf

Recharger Apache:

$ Sudo service Apache2 reload

Vous trouverez maintenant vos données enregistrées sous /var/log/Apache2/modsec_audit.log

$ tail -f /var/log/Apache2/modsec_audit.log
--2222229-A--
[23/Nov/2017:11:36:35 +0000] 
--2222229-B--
POST / HTTP/1.1
Content-Type: application/json
User-Agent: curl
Host: example.com

--2222229-C--
{"test":"modsecurity"}
6
hg8

Je le ferais dans l'application, en fait. Il est toujours configurable au moment de l'exécution, en fonction de votre système de journalisation, bien sûr. Par exemple, si vous utilisez Apache Log (log4j/cxx), vous pouvez configurer un consignateur dédié pour ces URL, puis le configurer à l'exécution à partir d'un fichier XML.

2
Assaf Lavie

Vous pouvez également utiliser la fonctionnalité de journal judiciaire intégrée.

0
Aeyoun

Une option plus simple consiste peut-être à consigner les données POST avant qu’elles parviennent au serveur. Pour les applications Web, j'utilise Burp Proxy et configure Firefox pour qu'il l'utilise comme proxy HTTP/S, puis je peux (et modifier) ​​les données "sur le fil" en temps réel. 

SoapUI est très utile pour les requêtes API sans navigateur, et peut afficher des informations similaires. Je parierais que vous pourriez probablement configurer SoapUI pour se connecter également via Burp (juste une supposition cependant).

0
siliconrockstar