2009-06-13 6 views
50

Imaginez que vous avez une API de site qui accepte les données sous forme de requêtes GET avec des paramètres, ou que les requêtes POST (disons, à la norme de code URL, & données POST -Séparé). Si vous voulez enregistrer et analyser les appels API, les requêtes GET seront faciles, car elles seront dans le journal apache. Existe-t-il un moyen simple d'obtenir également les données POST dans le journal apache?Meilleure façon de consigner les données POST dans Apache?

(de nous pourrions bien sûr enregistrer les données POST explicitement dans l'application, mais je voudrais avoir un moyen niveau de configuration qui me laisse vous inquiétez pas à ce sujet dans le code.)

+1

question connexe à ServerFault: http://serverfault.com/questions/51295/logging- http-post-in-apache –

Répondre

2

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

+0

Mon souci ici est que CHAQUE gestionnaire d'API devra enregistrer les données au début - facile à oublier au fur et à mesure que vous ajoutez, et au mieux, il est simplement ajouté à la liste. –

+0

Tout bon framework devrait avoir des filtres pré et post, ou l'équivalent d'un middleware qui vous permettra de tirer et d'oublier. – blockhead

6

Pas exactement une réponse, mais je ne l'ai jamais entendu parler d'une façon de le faire dans Apache lui-même. Je suppose que cela pourrait être possible avec un module d'extension, mais je ne sais pas si on l'a écrit.

Une préoccupation est que les données POST peuvent être assez grand, et si vous ne mettez pas une sorte de limite combien est connecté, vous pourriez manquer d'espace disque après un certain temps. C'est une voie possible pour les pirates de jouer avec votre serveur.

+2

Je suis d'accord avec la moitié plus tard complètement! Comme il n'y a aucune limite sur les données POST, il pourrait inclure toutes sortes de données, y compris les mots de passe, que vous ne voudriez pas stocker dans un journal. Il y a peut-être d'autres données sécurisées et volumineuses que vous ne voulez pas dans le journal. –

+2

Logging mots de passe n'est pas un problème, vous n'envoyez pas les mots de passe en texte brut de toute façon, êtes-vous? – supo

+7

@supo: même si les mots de passe sont cryptés via SSL, ils seront toujours enregistrés en texte brut. Mais la préoccupation particulière que je traitais était de remplir votre espace disque, ne pas exposer les mots de passe dans le journal. –

38

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

Notez que mod_dumpio stops logging binary payloads at the first null character. Par exemple, un téléchargement multipart/form-data d'un fichier gzip'd montrera probablement seulement 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. Juste ajouter manuellement LoadModule fonctionnera bien.

+1

Caractéristique apache typique: lecture de documents entiers, tout mis en place, et aucun effet. C'est une merde. – peterh

12

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

+1

cool! il est absolument logique de vider les données de poste pour l'analyse du fichier journal, c'est-à-dire pour des choses comme les tentatives d'injection de sql. – KIC

0

Une option plus facile peut-être pour enregistrer les données POST avant qu'il ne soit au serveur. Pour les applications web, j'utilise Burp Proxy et configure Firefox pour l'utiliser comme un proxy HTTP/S, et puis je peux regarder (et manipuler) les données 'sur le fil' en temps réel.

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

4

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

SecRuleEngine On 
SecAuditEngine On 
SecAuditLog /var/log/apache2/modsec_audit.log 
SecRequestBodyAccess on 
SecAuditLogParts ABIJDFHZ 
+2

modsecurity a des paquets Ubuntu alors que d'autres ne le font pas. –

1

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

installer sur Debian/Ubuntu:

$ sudo apt install libapache2-mod-security2 

Utilisez le fichier de configuration recommandée:

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

et modifier les lignes suivantes

SecRuleEngine DetectionOnly 
SecAuditEngine RelevantOnly 

à

SecRuleEngine On 
SecAuditEngine On 

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"} 
Questions connexes