Bagaimana cara memeriksa token server tidak aktif?

11

Kami mendapat umpan balik dari laporan terbaik kami yang mengatakan kami harus mematikan token server. Ini menghentikan orang untuk dapat melihat versi PHP yang kami gunakan, dan membatasi kemampuan mereka untuk menargetkan versi PHP tertentu.

Saya telah menambahkan yang berikut ini ke nginx.conf, di bawah blok http:

server_tokens off;

Tetapi alat apa yang dapat saya gunakan untuk memeriksa perubahan ini telah berpengaruh?

fyberoptik
sumber
1
server_tokentidak ada hubungannya dengan versi PHP. Biasanya dikirim dalam tajuk terpisah X-Powered-By. Saya kira Anda perlu php.net/manual/en/ini.core.php#ini.expose-php
Alexey Ten
Bagus tangkap Alexey, token server hanya bagian dari solusi saya. Saya perlu menambahkan pengaturan lebih lanjut untuk menghentikan pengungkapan versi PHP. Terima kasih!
fyberoptik

Jawaban:

14

Dari manual Anda tahu apa yang dilakukan pengaturan:

Sintaks : server_tokens on | off;
Standar : server_tokens on;
Konteks : http, server, lokasi

Mengaktifkan atau menonaktifkan versi nginx yang dipancarkan dalam pesan kesalahan dan di bidang header respons "Server".

Jadi pilihan Anda adalah:

  • menghasilkan pesan kesalahan, misalnya jika Anda tidak memiliki pesan kesalahan 404 khusus hanya meminta halaman yang tidak ada dan di footer Anda tidak akan melihat informasi versi nginx/1.2.3lagi.
  • periksa header server dan konfirmasi bahwa versi tersebut tidak lagi ditampilkan.

Pemeriksaan sederhana untuk melihat tajuk respons HTTP adalah menyambungkan secara manual dengan: di telnet www.example.com 80 mana garis klien adalah yang Anda masukkan:

klien: HEAD / HTTP / 1.1
klien: Host: www.example.com

server: HTTP / 1.1 200
server OK : Tanggal: Rab, 1 Jan 1970 22:13:05 GMT
server: Server: Server Nginx / 1.2.3
: Koneksi:
server dekat : Jenis-Konten: teks / html

HBruijn
sumber
1
Terima kasih atas jawaban Anda HBruijn, hanya mencoba dengan windows 7 telnet, tidak berhasil. Sudah sedikit lebih sukses dengan curl -I example.com tetapi ini tidak menunjukkan informasi PHP apa pun.
fyberoptik
Ini tidak akan memengaruhi PHP karena itu biasanya tajuk yang berbeda di halaman ...
Thomas Ward
4

Setelah sedikit lebih googling, saya telah menemukan perintah curl dapat memeriksa header server yang menunjukkan token server dan versi php:

curl -I -L www.example.com

Terima kasih kepada Alexey untuk menunjukkan perubahan yang diperlukan dalam PHP.

HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Thu, 04 Jun 2015 10:49:35 GMT
Content-Type: text/html
Content-Length: 178
Connection: keep-alive
Location: https://www.example.com

HTTP/1.1 200 OK
Server: nginx
Date: Thu, 04 Jun 2015 10:49:36 GMT
Content-Type: text/html; charset=utf-8
Connection: keep-alive
Expires: Sun, 19 Nov 1978 05:00:00 GMT
Last-Modified: Thu, 04 Jun 2015 10:49:35 GMT
Cache-Control: no-cache, must-revalidate, post-check=0, pre-check=0
ETag: "1433414975"
Content-Language: en
fyberoptik
sumber
1

Juga, jika Anda melayani proyek PHP, Anda mungkin perlu mengubahnya /etc/nginx/{fastcgi,fastcgi_params).conf

fastcgi_param  SERVER_SOFTWARE    nginx;
Alexander Br.
sumber
0

Lihatlah InSpec, alat yang memungkinkan Anda "mengubah kepatuhan, keamanan, dan persyaratan kebijakan Anda menjadi pengujian otomatis."

https://www.inspec.io

Itu dapat melakukan semua pengujian konfigurasi yang Anda butuhkan untuk server Nginx Anda. Inilah satu cara untuk menguji keberadaan file conf dan nilai dari server_tokens:

conf_path = '/etc/nginx/nginx.conf'

control 'Server tokens should be off' do
  describe file(conf_path) do
    it 'The config file should exist and be a file.' do
      expect(subject).to(exist)
      expect(subject).to(be_file)
    end
  end
  if (File.exist?(conf_path))
    Array(nginx_conf(conf_path).params['http']).each do |http|
      describe "http:" do
        it 'server_tokens should be off if found in the http context.' do
          Array(http["server_tokens"]).each do |tokens|
            expect(tokens).to(cmp 'off')
          end
        end
      end
    end
  end
end

Jika diatur dengan benar, InSpec mengembalikan:

  ✔  Server tokens should be off: File /etc/nginx/nginx.conf
     ✔  File /etc/nginx/nginx.conf The config file should exist and be a file.
     ✔  http: server_tokens should be off if found in the http context.

Jika tidak:

  ×  Server tokens should be off: File /etc/nginx/nginx.conf (1 failed)
     ✔  File /etc/nginx/nginx.conf The config file should exist and be a file.
     ×  http: server_tokens should be off if found in the http context.

     expected: "off"
          got: ["on"]

     (compared using `cmp` matcher)
james.garriss
sumber