Ada opsi untuk menyembunyikan versi sehingga hanya akan menampilkan nginx, tetapi apakah ada cara untuk menyembunyikannya juga sehingga tidak akan menampilkan apa pun atau mengubah header?
Ada opsi untuk menyembunyikan versi sehingga hanya akan menampilkan nginx, tetapi apakah ada cara untuk menyembunyikannya juga sehingga tidak akan menampilkan apa pun atau mengubah header?
Jawaban:
Seperti Apache, ini adalah edit cepat ke sumber dan kompilasi ulang. Dari Calomel.org :
String Server: adalah header yang dikirim kembali ke klien untuk memberi tahu mereka apa jenis server http yang Anda jalankan dan mungkin versi apa. String ini digunakan oleh tempat-tempat seperti Alexia dan Netcraft untuk mengumpulkan statistik tentang berapa banyak dan jenis server web apa yang hidup di Internet. Untuk mendukung penulis dan statistik untuk Nginx kami sarankan menjaga string ini apa adanya. Tetapi, untuk keamanan Anda mungkin tidak ingin orang tahu apa yang Anda jalankan dan Anda dapat mengubahnya dalam kode sumber. Edit file sumber
src/http/ngx_http_header_filter_module.c
saat melihat baris 48 dan 49. Anda dapat mengubah String ke apa pun yang Anda inginkan.
## 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;
Sunting Maret 2011: Alat Peraga ke Flavius di bawah ini untuk menunjukkan opsi baru, menggantikan standar HttpHeadersModule Nginx dengan HttpHeadersMoreModule yang bercabang dua . Mengkompilasi ulang modul standar masih merupakan perbaikan cepat, dan masuk akal jika Anda ingin menggunakan modul standar dan tidak akan sering mengubah string server. Tetapi jika Anda menginginkan lebih dari itu, HttpHeadersMoreModule adalah proyek yang kuat dan memungkinkan Anda melakukan segala macam sihir hitam runtime dengan header HTTP Anda.
r->headers_out.server
.
Jika Anda menggunakan nginx untuk membuat proksi aplikasi back-end dan ingin back-end mengiklankan Server:
tajuknya sendiri tanpa menimpa nginx, maka Anda dapat masuk ke dalam server {…}
bait Anda dan mengatur:
proxy_pass_header Server;
Itu akan meyakinkan nginx untuk membiarkan header itu sendiri dan tidak menulis ulang nilai yang ditentukan oleh back-end.
Pembaruan terakhir beberapa waktu yang lalu, jadi inilah yang bekerja untuk saya di Ubuntu:
sudo apt-get update
sudo apt-get install nginx-extras
Kemudian tambahkan dua baris berikut ke http
bagian nginx.conf
, yang biasanya terletak di /etc/nginx/nginx.conf:
sudo nano /etc/nginx/nginx.conf
server_tokens off; # removed pound sign
more_set_headers 'Server: Eff_You_Script_Kiddies!';
Juga, jangan lupa untuk me-restart nginx dengan sudo service nginx restart
.
more_set_headers 'Server: ';
Sederhana, edit /etc/nginx/nginx.conf dan hapus komentar dari
#server_tokens off;
Cari bagian http .
Ini sangat sederhana: Tambahkan baris ini ke bagian server:
server_tokens off;
more_set_headers 'Server: My Very Own Server';
nginx-extra
untuk mendapatkan modul itu.
Ada modul khusus: http://wiki.nginx.org/NginxHttpHeadersMoreModule
Modul ini memungkinkan Anda untuk menambah, mengatur, atau menghapus output atau header input apa pun yang Anda tentukan.
Ini adalah versi yang disempurnakan dari standar header modul karena memberikan lebih banyak utilitas seperti ulang atau kliring "builtin header" seperti
Content-Type
,Content-Length
, danServer
.Hal ini juga memungkinkan Anda untuk menentukan kriteria kode status HTTP opsional menggunakan
-s
opsi dan kriteria jenis konten opsional menggunakan-t
opsi sementara memodifikasi header output dengan more_set_headers dan more_clear_headers arahan ...
--add-module=/path-to-headers-more-nginx-module
Instal Nginx Extras
sudo apt-get update
sudo apt-get install nginx-extras
Detail server dapat dihapus dari respons dengan menambahkan dua baris berikut di nginx.conf (di bawah bagian http)
more_clear_headers Server;
server_tokens off;
yum install nginx-extras
tidak berfungsi - saya kira ini bekerja pada Debia / Ubuntu dll dengan apt-get
.)
Jika Anda setuju dengan hanya mengubah tajuk ke string lain lima huruf atau kurang, Anda bisa menambal binernya.
sed -i 's/nginx\r/thing\r/' `which nginx`
Yang, sebagai solusi, memiliki beberapa keunggulan penting. Yaitu, bahwa Anda dapat mengizinkan versi nginx Anda ditangani oleh manajer paket (jadi, tidak ada kompilasi dari sumber) bahkan jika nginx-ekstra tidak tersedia untuk distro Anda, dan Anda tidak perlu khawatir tentang tambahan apa pun kode sesuatu seperti nginx-ekstra menjadi rentan.
Tentu saja, Anda juga ingin mengatur opsi server_tokens off
, untuk menyembunyikan nomor versi, atau menambal string format itu juga.
Saya mengatakan "lima huruf atau kurang" karena tentu saja Anda selalu dapat mengganti:
nginx \ r \ 0
dengan
bob \ r \ 0 \ r \ 0
meninggalkan dua byte terakhir tidak berubah.
Jika Anda benar-benar ingin lebih dari lima karakter, Anda ingin membiarkan server_token aktif, dan mengganti string format (sedikit lebih lama), meskipun sekali lagi ada batas atas pada panjang yang dikenakan oleh panjang string format - 1 (untuk Kereta kembali).
... Jika tidak ada satu pun di atas yang masuk akal bagi Anda, atau Anda belum pernah menambal biner sebelumnya, Anda mungkin ingin menjauh dari pendekatan ini.
sed
perintah di atas, `which nginx`
bagian mengembalikan path ke biner, dan sed
perintah melakukan penggantian byte.
nginx
- restart agar perubahan diterapkan. Semua itu dikatakan? Saya mendorong Anda untuk tidak menggunakan salah satu jawaban lainnya. Jika semua hal yang saya katakan belum Anda kenal, dan Anda tidak tahu untuk apa /etc
direktori tersebut, maka peretasan seperti ini agak berbahaya.
Satu-satunya cara adalah memodifikasi file src / http / ngx_http_header_filter_module.c. Saya mengubah nginx pada baris 48 ke string yang berbeda.
Apa yang dapat Anda lakukan dalam file konfigurasi nginx adalah untuk menonaktifkan server_tokens . Ini akan mencegah nginx mencetak nomor versi.
Untuk memeriksanya, coba curl -I http://vurbu.com/ | grep Server
Itu harus kembali
Server: Hai
Setelah saya membaca jawaban Parthian Shot, saya menggali /usr/sbin/nginx
file biner. Kemudian saya menemukan bahwa file tersebut mengandung tiga baris ini.
Server: nginx/1.12.2
Server: nginx/1.12.2
Server: nginx
Pada dasarnya dua yang pertama dimaksudkan untuk server_tokens on;
direktif (termasuk versi Server). Lalu saya mengubah kriteria pencarian untuk mencocokkan baris-baris itu dalam file biner.
sed -i 's/Server: nginx/Server: thing/' `which nginx`
Setelah saya menggali lebih jauh saya menemukan bahwa pesan kesalahan yang dihasilkan oleh nginx juga termasuk dalam file ini.
<hr><center>nginx</center>
Ada tiga dari mereka, satu tanpa versi, dua di antaranya termasuk versi. Jadi saya menjalankan perintah berikut untuk mengganti string nginx dalam pesan kesalahan.
sed -i 's/center>nginx/center>thing/' `which nginx`
/usr/sbin
folder menghasilkan ini:sed: can't read is: No such file or directory
Menurut dokumentasi nginx itu mendukung nilai-nilai khusus atau bahkan pengecualian:
Syntax: server_tokens on | off | build | string;
tetapi sayangnya hanya dengan berlangganan komersial :
Selain itu, sebagai bagian dari langganan komersial kami, mulai dari versi 1.9.13 tanda tangan pada halaman kesalahan dan nilai header respons "Server" dapat diatur secara eksplisit menggunakan string dengan variabel. String kosong menonaktifkan emisi bidang "Server".
Saya tahu posting ini agak lama, tetapi saya telah menemukan solusi mudah yang bekerja pada distribusi berbasis Debian tanpa mengkompilasi nginx dari sumber.
Pertama instal paket nginx-ekstra
sudo apt install nginx-extras
Kemudian muat modul http nginx http lebih banyak dengan mengedit nginx.conf dan menambahkan baris berikut di dalam blok server
memuat modul modul / ngx_http_headers_more_filter_module.so;
Setelah selesai, Anda akan memiliki akses ke arahan more_set_headers dan more_clear_headers.
Paket nginx-ekstra sudah ditinggalkan sekarang.
Oleh karena itu berikut ini sekarang bekerja untuk saya ketika saya mencoba menginstal berbagai paket Server more_set_headers: My Very Own Server ';
Anda dapat melakukan hal berikut dan tidak ada informasi server atau versi yang akan dikirim kembali
server_tokens '';
jika Anda hanya ingin menghapus nomor versi ini berfungsi
server_tokens off;
Apakah Anda bertanya tentang nilai header Server dalam respons? Anda dapat mencoba mengubahnya dengan arahan add_header, tetapi saya tidak yakin apakah itu akan berhasil. http://wiki.codemongers.com/NginxHttpHeadersModule