Istnieje opcja ukrycia wersji, aby wyświetlała tylko nginx, ale czy istnieje sposób, aby to ukryć, aby nic nie wyświetlało ani nie zmieniało nagłówka?
Istnieje opcja ukrycia wersji, aby wyświetlała tylko nginx, ale czy istnieje sposób, aby to ukryć, aby nic nie wyświetlało ani nie zmieniało nagłówka?
Odpowiedzi:
Podobnie jak Apache, jest to szybka edycja źródła i ponowna kompilacja. Z Calomel.org :
Serwer: ciąg to nagłówek, który jest odsyłany do klienta, aby poinformować go, jakiego typu serwer http używasz i prawdopodobnie w jakiej wersji. Ten ciąg jest używany przez miejsca takie jak Alexia i Netcraft do zbierania statystyk dotyczących liczby i typu serwerów WWW dostępnych w Internecie. Aby wesprzeć autora i statystyki dotyczące Nginx, zalecamy zachowanie tego ciągu bez zmian. Jednak ze względów bezpieczeństwa możesz nie chcieć, aby ludzie wiedzieli, co używasz i możesz to zmienić w kodzie źródłowym. Edytuj plik źródłowy,
src/http/ngx_http_header_filter_module.c
spójrz na linie 48 i 49. Możesz zmienić String na cokolwiek chcesz.
## 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;
Edycja z marca 2011 r .: Podziękowania dla Flaviusa poniżej za wskazanie nowej opcji, zastępującej standardowy HttpHeadersModule Nginx przez rozwidlony HttpHeadersMoreModule . Rekompilacja standardowego modułu jest nadal szybką poprawką i ma sens, jeśli chcesz użyć standardowego modułu i nie będziesz często zmieniać łańcucha serwera. Ale jeśli chcesz czegoś więcej, HttpHeadersMoreModule jest silnym projektem i umożliwia wykonywanie wszelkiego rodzaju czarnej magii w czasie wykonywania z nagłówkami HTTP.
r->headers_out.server
.
Jeśli używasz nginx do proxy aplikacji zaplecza i chcesz, aby zaplecze reklamowało swój własny Server:
nagłówek bez nadpisywania go przez nginx, możesz wejść do swojej server {…}
sekcji i ustawić:
proxy_pass_header Server;
To przekona nginx do pozostawienia tego nagłówka w spokoju i nie przepisywania wartości ustawionej przez zaplecze.
Ostatnia aktualizacja była jakiś czas temu, więc oto, co działało dla mnie na Ubuntu:
sudo apt-get update
sudo apt-get install nginx-extras
Następnie dodaj następujące dwie linie do http
sekcji programu nginx.conf
, która zwykle znajduje się w /etc/nginx/nginx.conf:
sudo nano /etc/nginx/nginx.conf
server_tokens off; # removed pound sign
more_set_headers 'Server: Eff_You_Script_Kiddies!';
Nie zapomnij też zrestartować nginx z sudo service nginx restart
.
more_set_headers 'Server: ';
Prosto, edytuj /etc/nginx/nginx.conf i usuń komentarz z
#server_tokens off;
Wyszukaj sekcję http .
To bardzo proste: dodaj te linie do sekcji serwera:
server_tokens off;
more_set_headers 'Server: My Very Own Server';
nginx-extra
aby uzyskać ten moduł.
Istnieje specjalny moduł: http://wiki.nginx.org/NginxHttpHeadersMoreModule
Ten moduł umożliwia dodawanie, ustawianie lub usuwanie dowolnego określonego nagłówka wyjściowego lub wejściowego.
Jest to udoskonalona wersja standardowych nagłówków moduł ponieważ zapewnia więcej narzędzi jak resetowanie lub usuwanie „wbudowane nagłówków” jak
Content-Type
,Content-Length
iServer
.Umożliwia również określenie opcjonalnych kryteriów kodu stanu HTTP za pomocą
-s
opcji i opcjonalnych kryteriów typu zawartości przy użyciu-t
opcji podczas modyfikowania nagłówków wyjściowych za pomocą dyrektyw more_set_headers i more_clear_headers ...
--add-module=/path-to-headers-more-nginx-module
Zainstaluj dodatki Nginx
sudo apt-get update
sudo apt-get install nginx-extras
Szczegóły serwera można usunąć z odpowiedzi, dodając kolejne dwa wiersze w pliku nginx.conf (w sekcji http)
more_clear_headers Server;
server_tokens off;
yum install nginx-extras
nie działa - przypuszczam, że to działa na Debia / Ubuntu itp apt-get
.
Jeśli nie przeszkadza ci po prostu zmiana nagłówka na inny ciąg zawierający pięć liter lub mniej, możesz po prostu załatać plik binarny.
sed -i 's/nginx\r/thing\r/' `which nginx`
Co, jako rozwiązanie, ma kilka wymiernych zalet. Mianowicie, że możesz pozwolić na obsługę wersji nginx przez menedżera pakietów (więc nie kompiluj ze źródeł), nawet jeśli nginx-extras nie jest dostępny dla twojej dystrybucji i nie musisz się martwić o żadne dodatkowe kod czegoś takiego jak nginx-extras jest podatny na ataki.
Oczywiście będziesz także chciał ustawić opcję server_tokens off
, aby ukryć numer wersji lub załatać również ten ciąg formatu.
Mówię „pięć liter lub mniej”, ponieważ oczywiście zawsze możesz zamienić:
nginx \ r \ 0
z
bob \ r \ 0 \ r \ 0
pozostawiając ostatnie dwa bajty bez zmian.
Jeśli faktycznie chcesz mieć więcej niż pięć znaków, będziesz chciał pozostawić server_tokens włączone i zastąpić (nieco dłuższy) ciąg formatujący, chociaż znowu istnieje górne ograniczenie tej długości narzucone przez długość ciągu formatującego - 1 (dla powrót karetki).
... Jeśli żadne z powyższych nie ma dla Ciebie sensu lub nigdy wcześniej nie załatałeś pliku binarnego, możesz jednak trzymać się z daleka od tego podejścia.
sed
powyższe polecenie, `which nginx`
część zwraca ścieżkę do pliku binarnego, a sed
polecenie zamienia bajt.
nginx
aby zmiany zaczęły obowiązywać. Wszystko to powiedział? Nalegam, abyś nie używał jednej z pozostałych odpowiedzi. Jeśli wszystkie rzeczy, o których mówię, nie są Ci znane i nie wiesz, do czego /etc
służy katalog, to taki hack jest trochę niebezpieczny.
Jedynym sposobem jest zmodyfikowanie pliku src / http / ngx_http_header_filter_module.c. Zmieniłem nginx w linii 48 na inny ciąg.
To, co możesz zrobić w pliku konfiguracyjnym nginx, to wyłączyć server_tokens . Zapobiegnie to wypisywaniu numeru wersji przez nginx.
Aby to sprawdzić, spróbuj curl -I http://vurbu.com/ | Grep Server
Powinien powrócić
Server: Hai
Po przeczytaniu odpowiedzi Parthian Shot zagłębiam się w /usr/sbin/nginx
plik binarny. Wtedy dowiedziałem się, że plik zawiera te trzy linie.
Server: nginx/1.12.2
Server: nginx/1.12.2
Server: nginx
Zasadniczo pierwsze dwa z nich są przeznaczone do server_tokens on;
dyrektywy (w tym wersja serwerowa). Następnie zmieniam kryteria wyszukiwania, aby pasowały do tych wierszy w pliku binarnym.
sed -i 's/Server: nginx/Server: thing/' `which nginx`
Po dalszych poszukiwaniach dowiedziałem się, że komunikat o błędzie generowany przez nginx jest również zawarty w tym pliku.
<hr><center>nginx</center>
Są trzy z nich, jeden bez wersji, dwa z nich zawierały wersję. Więc uruchamiam następujące polecenie, aby zastąpić ciąg nginx w komunikacie o błędzie.
sed -i 's/center>nginx/center>thing/' `which nginx`
/usr/sbin
folderze daje to:sed: can't read is: No such file or directory
Zgodnie z dokumentacją nginx obsługuje wartości niestandardowe, a nawet wykluczenie:
Syntax: server_tokens on | off | build | string;
ale niestety tylko w przypadku subskrypcji komercyjnej :
Dodatkowo, w ramach naszej komercyjnej subskrypcji, począwszy od wersji 1.9.13 podpis na stronach błędów oraz wartość pola nagłówka odpowiedzi „Serwer” można ustawić jawnie za pomocą ciągu znaków ze zmiennymi. Pusty łańcuch wyłącza wysyłanie pola „Serwer”.
Wiem, że post jest trochę stary, ale znalazłem proste rozwiązanie, które działa na dystrybucji opartej na Debianie bez kompilowania nginx ze źródeł.
Najpierw zainstaluj pakiet nginx-extras
sudo apt install nginx-extras
Następnie załaduj moduł nagłówków http nginx więcej, edytując plik nginx.conf i dodając następujący wiersz w bloku serwera
moduły load_module / ngx_http_headers_more_filter_module.so;
Gdy to zrobisz, będziesz mieć dostęp do dyrektyw more_set_headers i more_clear_headers.
Pakiet Nginx-extra jest teraz przestarzały.
W związku z tym, że teraz zadziałało dla mnie, gdy próbowałem zainstalować różne pakiety more_set_headers 'Serwer: mój własny serwer';
Możesz po prostu wykonać następujące czynności, a żadne informacje o serwerze ani wersji nie zostaną odesłane
server_tokens '';
jeśli chcesz tylko usunąć numer wersji, to działa
server_tokens off;
Czy pytasz o wartość nagłówka serwera w odpowiedzi? Możesz spróbować to zmienić za pomocą dyrektywy add_header, ale nie jestem pewien, czy to zadziała. http://wiki.codemongers.com/NginxHttpHeadersModule