Est-il possible de se connecter à tous les en-têtes de requête HTTP avec Apache?
Comment faire un enregistrement dans le fichier journal du contenu de l'en-tête de requête HTTP (tous) reçue par apache?
Actuellement mon apache combiné format de journal de configuration est:
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" \"%{Cookie}i\"" combined
Je comprends qu'il est possible de le faire:
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" \"%{Cookie}i\" \"%{heading name}i\" \"%{heading name}i\" \"%{heading name}i\"" combined
mais il n'est pas logique et il n'est pas possible de savoir qui des en-têtes seront.
Vous devez vous connecter pour publier un commentaire.
mod_log_forensic est ce que vous voulez, mais il peut ne pas être inclus/disponible auprès de votre installation d'Apache par défaut.
Ici est de savoir comment l'utiliser.
LoadModule log_forensic_module /usr/lib64/httpd/modules/mod_log_forensic.so
<IfModule log_forensic_module> ForensicLog /var/log/httpd/forensic_log </IfModule>
Maintenant, vous pouvez vérifier pour Shellshock essaie comme ceci:grep "() {" /var/log/httpd/forensic_log
a2enmod log_forensic
pour activer le module, vous n'avez pas besoin d'utiliser leLoadModule
ligne.Ici est une liste de tous les http-en-têtes: http://en.wikipedia.org/wiki/List_of_HTTP_header_fields
Et ici est une liste de tous les apache-logformats: http://httpd.apache.org/docs/2.0/mod/mod_log_config.html#formats
Comme vous l'avez fait écrire correctement, le code d'enregistrement d'un en-tête spécifique est de %{blabla}i où toto est le nom de l'en-tête. Donc, la seule solution est de créer un format spécifique à la chaîne. Lorsque vous vous attendez à un non-d'en-tête standard, comme x-mon-non standard-en-tête, puis utilisez
%{x-my-nonstandard-header}i
. Si votre serveur va ignorer cette non-standard-en-tête, pourquoi devriez-vous voulez écrire dans votre journal? Un inconnu en-tête n'a absolument aucun effet sur votre système.LogFormat
a chaque fois qu'un nouvel en-tête est introduit.Si vous êtes intéressé à voir ce qui en-têtes spécifiques d'un client distant est l'envoi de votre serveur, et vous pouvez causer la demande d'exécuter un script CGI, alors la solution la plus simple est d'avoir votre serveur script de dump les variables d'environnement dans un fichier quelque part.
par exemple, exécutez la commande shell "env > /tmp/en-têtes" dans votre script
Puis, regardez pour les variables d'environnement qui commencent par HTTP_...
Vous verrez des lignes comme:
Chacun de ceux représente un en-tête de requête.
Noter que les noms d'en-tête sont modifiés à partir de la demande réelle. Par exemple, "Accept-Language" devient "HTTP_ACCEPT_LANGUAGE", et ainsi de suite.