Comment Modifiez-vous l'en-tête du serveur retourné par nginx?
Il y a une option pour masquer la version afin qu'elle n'affiche que nginx, mais existe-t-il un moyen de masquer cela aussi pour ne rien afficher ou changer l'en-tête?
11 réponses
Comme Apache, il s'agit d'une modification rapide de la source et de la recompiler. À Partir De Calomel.org:
Le serveur: string est l'en-tête qui est renvoyé au client pour le dire leur quel type de serveur http vous êtes en cours d'exécution et peut-être quelle version. Cette chaîne est utilisée par des endroits comme Alexia et Netcraft à recueillir statistiques sur combien et de quoi type de serveur web sont en direct sur la Internet. À l'appui de l'auteur et statistiques pour Nginx nous recommandons garder cette chaîne telle quelle. Mais, pour sécurité vous ne voudrez peut être pas que les gens sachez ce que vous courez et vous pouvez modifier dans le code source. Modifier le fichier source
src/http/ngx_http_header_filter_module.c
regardez les lignes 48 et 49. Vous pouvez changer la chaîne à tout ce que vous vouloir.
## vi src/http/ngx_http_header_filter_module.c (lines 48 and 49)
static char ngx_http_server_string[] = "Server: MyDomain.com" CRLF;
static char ngx_http_server_full_string[] = "Server: MyDomain.com" CRLF;
Mars 2011 edit: Props à Flavius ci-dessous pour signaler une nouvelle option, remplaçant le standard de Nginx HttpHeadersModule avec le forked HttpHeadersMoreModule . La recompilation de la norme le module est toujours la solution rapide, et a du sens si vous voulez utiliser le module standard et ne changera pas souvent la chaîne du serveur. Mais si vous voulez plus que cela, le HttpHeadersMoreModule est un projet solide et vous permet de faire toutes sortes de magie noire d'exécution avec vos en-têtes HTTP.
Si vous utilisez nginx pour proxy une application back-end et que vous voulez que le back-end annonce son propre en-tête Server:
sans l'écraser par nginx, vous pouvez entrer dans votre strophe server {…}
et définir:
proxy_pass_header Server;
Cela convaincra nginx de laisser cet en-tête seul et de ne pas réécrire la valeur définie par le back-end.
La dernière mise à jour était il y a un moment, alors voici ce qui a fonctionné pour moi sur Ubuntu:
sudo apt-get update
sudo apt-get install nginx-extras
Ajoutez ensuite les deux lignes suivantes à la section http
de nginx.conf
, qui se trouve généralement dans /etc/nginx/nginx.conf:
sudo nano /etc/nginx/nginx.conf
server_tokens off; # removed pound sign
more_set_headers 'Server: Eff_You_Script_Kiddies!';
Aussi, n'oubliez pas de redémarrer nginx avec sudo service nginx restart
.
Simple, éditez /etc / nginx / nginx.conf et supprimer le commentaire de
#server_tokens off;
Recherchez la sectionhttp .
, C'est très simple: Ajoutez ces lignes à la section serveur:
server_tokens off;
more_set_headers 'Server: My Very Own Server';
Il y a un module spécial: http://wiki.nginx.org/NginxHttpHeadersMoreModule
Ce module vous permet d'ajouter, de définir ou d'effacer tout en-tête de sortie ou d'entrée que vous spécifiez.
Ceci est une version améliorée du module standard headers car il fournit plus d'utilitaires comme la réinitialisation ou la suppression des "en-têtes intégrés" comme
Content-Type
,Content-Length
, etServer
.Il vous permet également de spécifier un critère de code D'état HTTP optionnel à l'aide du
-s
option et un critère de type de contenu facultatif utilisant l'option-t
tout en modifiant les en-têtes de sortie avec les directivesmore_set_headers etmore_clear_headers ...
Si vous êtes d'accord avec juste changer l'en-tête à une autre chaîne de cinq lettres ou moins, vous pouvez simplement patcher le binaire.
sed -i 's/nginx\r/thing\r/' `which nginx`
Qui, en tant que solution, présente quelques avantages notables. À savoir, que vous pouvez permettre à votre gestion des versions nginx d'être gérée par le gestionnaire de paquets (donc, pas de compilation à partir de la source) même si nginx-extras n'est pas disponible pour votre distribution, et vous n'avez pas besoin de vous soucier du code supplémentaire de quelque chose comme nginx-extras étant vulnérable.
Bien sûr, vous aurez également envie de définir l'option server_tokens off
, pour masquer le numéro de version, ou Patcher cette chaîne de format ainsi.
Je dis "cinq lettres ou moins" parce que bien sûr, vous pouvez toujours remplacer:
Nginx\r \ 0
Avec
Bob\r\0\r\0
Laissant les deux derniers octets inchangés.
Si vous voulez réellement plus de cinq caractères, vous voudrez laisser server_tokens activé, et remplacer la chaîne de format (légèrement plus longue), bien que de nouveau il y a une limite supérieure à cette longueur imposée par la longueur de la chaîne de format - 1 (pour le retour chariot).
...Si rien de ce qui précède n'a de sens pour vous, ou si vous n'avez jamais corrigé un binaire auparavant, vous voudrez peut-être rester à l'écart de cette approche.
Installer Nginx Extras
sudo apt-get update
sudo apt-get install nginx-extras
Les détails du serveur peuvent être supprimés de la réponse en ajoutant les deux lignes suivantes dans le nginx.conf (sous la section http)
more_clear_headers Server;
server_tokens off;
, Le seul moyen est de modifier le fichier src/http/ngx_http_header_filter_module.C . J'ai changé nginx sur la ligne 48 en une chaîne différente.
Ce que vous pouvez faire dans le fichier de configuration nginx est de définirserver_tokens SUR off. Cela empêchera nginx d'imprimer le numéro de version.
Pour vérifier les choses, essayez curl-i http://vurbu.com | / serveur grep
Il devrait retourner
Server: Hai
Après avoir lu la réponse de Parthian Shot, je creuse dans le fichier binaire /usr/sbin/nginx
. Ensuite, j'ai découvert que le fichier contient ces trois lignes.
Server: nginx/1.12.2
Server: nginx/1.12.2
Server: nginx
Fondamentalement, les deux premiers sont destinés à la directive server_tokens on;
(Version du serveur incluse).
Puis-je changer les critères de recherche pour correspondre à ces lignes dans le fichier binaire.
sed -i 's/Server: nginx/Server: thing/' `which nginx`
Après avoir creusé plus loin, j'ai découvert que le message d'erreur produit par nginx est également inclus dans ce fichier.
<hr><center>nginx</center>
Il y en a trois, un sans le version, deux d'entre eux inclus la version. J'exécute donc la commande suivante pour remplacer la chaîne nginx dans le message d'erreur.
sed -i 's/center>nginx/center>thing/' `which nginx`
Posez-vous des questions sur la valeur de L'en-tête du serveur dans la réponse? Vous pouvez essayer de changer cela avec une directive add_header, mais je ne suis pas sûr que cela fonctionnera. http://wiki.codemongers.com/NginxHttpHeadersModule