Il existe une option pour masquer la version afin qu'elle n'affiche que nginx, mais y a-t-il un moyen de masquer cela aussi afin qu'il n'affiche rien ou ne change pas l'en-tête?
Il existe une option pour masquer la version afin qu'elle n'affiche que nginx, mais y a-t-il un moyen de masquer cela aussi afin qu'il n'affiche rien ou ne change pas l'en-tête?
Réponses:
Comme Apache, il s'agit d'une modification rapide de la source et d'une recompilation. De Calomel.org :
La chaîne Server: est l'en-tête qui est renvoyé au client pour lui dire quel type de serveur http vous utilisez et éventuellement quelle version. Cette chaîne est utilisée par des sites comme Alexia et Netcraft pour collecter des statistiques sur le nombre et le type de serveur Web en direct sur Internet. Pour prendre en charge l'auteur et les statistiques de Nginx, nous vous recommandons de conserver cette chaîne telle quelle. Mais, pour des raisons de sécurité, vous ne voudrez peut-être pas que les gens sachent ce que vous exécutez et vous pouvez modifier cela dans le code source. Modifiez le fichier source
src/http/ngx_http_header_filter_module.c
en regardant les lignes 48 et 49. Vous pouvez changer la chaîne en ce que vous voulez.
## 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;
Edition de mars 2011: Props à Flavius ci-dessous pour avoir signalé une nouvelle option, remplaçant le HttpHeadersModule standard de Nginx par le HttpHeadersMoreModule fourchu . Recompiler le module standard est toujours la solution rapide, et a du sens si vous souhaitez utiliser le module standard et ne changez pas souvent la chaîne du serveur. Mais si vous voulez plus que cela, le HttpHeadersMoreModule est un projet fort et vous permet de faire toutes sortes de magie noire d'exécution avec vos en-têtes HTTP.
r->headers_out.server
.
Si vous utilisez nginx pour proxy une application back-end et que vous voulez que le back-end annonce son propre en- Server:
tête sans que nginx l'écrase, alors vous pouvez aller à l'intérieur de votre server {…}
strophe 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 remonte à un certain temps, voici donc 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 http
section 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!';
N'oubliez pas non plus de redémarrer nginx avec sudo service nginx restart
.
more_set_headers 'Server: ';
Simple, éditez /etc/nginx/nginx.conf et supprimez le commentaire de
#server_tokens off;
Recherchez la section http .
C'est très simple: ajoutez ces lignes à la section serveur:
server_tokens off;
more_set_headers 'Server: My Very Own Server';
nginx-extra
pour obtenir ce module.
Il existe un module spécial: http://wiki.nginx.org/NginxHttpHeadersMoreModule
Ce module vous permet d'ajouter, de définir ou d'effacer toute sortie ou en-tête d'entrée que vous spécifiez.
Ceci est une version améliorée de la norme en- têtes Module car il fournit plus de services publics comme la réinitialisation ou de compensation « têtes builtin » comme
Content-Type
,Content-Length
etServer
.Il vous permet également de spécifier un critère de code d'état HTTP facultatif à l'aide du
-s
option et un critère de type de contenu optionnel à l'aide de l'-t
option tout en modifiant les en-têtes de sortie avec les directives more_set_headers et more_clear_headers ...
--add-module=/path-to-headers-more-nginx-module
Installez 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;
yum install nginx-extras
ne fonctionne pas - je suppose que cela fonctionne sur Debia / Ubuntu, etc. avec le apt-get
.)
Si vous êtes d'accord pour changer simplement l'en-tête en une autre chaîne de cinq lettres ou moins, vous pouvez simplement patcher le binaire.
sed -i 's/nginx\r/thing\r/' `which nginx`
Ce qui, en tant que solution, présente quelques avantages notables. À savoir, que vous pouvez permettre à votre versioning nginx d'être gérée par le gestionnaire de packages (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 à vous soucier des éléments supplémentaires code de quelque chose comme nginx-extras étant vulnérable.
Bien sûr, vous voudrez également définir l'option server_tokens off
, pour masquer le numéro de version, ou corriger également cette chaîne de format.
Je dis "cinq lettres ou moins" car 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 qu'une fois encore, il y ait une limite supérieure sur 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 patché un binaire auparavant, vous voudrez peut-être rester à l'écart de cette approche.
sed
commande ci-dessus, la `which nginx`
partie retourne le chemin vers le binaire et la sed
commande effectue le remplacement d'octet.
nginx
pour que les modifications prennent effet. Tout cela dit? Je vous exhorte à ne pas utiliser l’une des autres réponses. Si toutes les choses que je dis ne vous sont pas déjà familières et que vous ne savez pas à quoi /etc
sert le répertoire, alors un piratage comme celui-ci est un peu dangereux.
Le seul moyen est de modifier le fichier src / http / ngx_http_header_filter_module.c. J'ai changé nginx à la ligne 48 en une chaîne différente.
Ce que vous pouvez faire dans le fichier de configuration nginx est de définir server_tokens . 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 revenir
Server: Hai
Après avoir lu la réponse de Parthian Shot, je fouille dans /usr/sbin/nginx
un fichier binaire. 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 d'entre eux sont destinés à la server_tokens on;
directive (version serveur incluse). Ensuite, je change les critères de recherche pour qu'ils correspondent à 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 la version, deux d'entre eux inclus la version. Je lance donc la commande suivante pour remplacer la chaîne nginx dans le message d'erreur.
sed -i 's/center>nginx/center>thing/' `which nginx`
/usr/sbin
dossier donne ceci:sed: can't read is: No such file or directory
Selon la documentation de nginx , il prend en charge les valeurs personnalisées ou même l'exclusion:
Syntax: server_tokens on | off | build | string;
mais malheureusement uniquement avec un abonnement commercial :
De plus, dans le cadre de notre abonnement commercial, à partir de la version 1.9.13, la signature sur les pages d'erreur et la valeur du champ d'en-tête de réponse «Serveur» peuvent être définies explicitement en utilisant la chaîne avec des variables. Une chaîne vide désactive l'émission du champ «Serveur».
Je sais que l'article est un peu vieux, mais j'ai trouvé une solution simple qui fonctionne sur une distribution basée sur Debian sans compiler nginx à partir des sources.
Première installation du package nginx-extras
sudo apt installer nginx-extras
Ensuite, chargez le module nginx http headers more en éditant nginx.conf et en ajoutant la ligne suivante dans le bloc serveur
modules load_module / ngx_http_headers_more_filter_module.so;
Une fois cela fait, vous aurez accès aux directives more_set_headers et more_clear_headers.
Le package Nginx-extra est désormais obsolète.
Ce qui suit a donc fonctionné pour moi alors que j'ai essayé d'installer divers paquets more_set_headers 'Server: My Very Own Server';
Vous pouvez simplement faire ce qui suit et aucune information de serveur ou de version ne sera renvoyée
server_tokens '';
si vous souhaitez simplement supprimer le numéro de version, cela fonctionne
server_tokens off;
Demandez-vous 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