Come controllo i token del server sono disattivati?


11

Abbiamo ricevuto feedback dal nostro rapporto pentest che diceva che dovremmo disattivare i token del server. Questo impedisce alle persone di vedere quale versione di PHP stiamo usando e limitare la loro capacità di scegliere come target la versione specifica di PHP.

Ho aggiunto quanto segue a nginx.conf, sotto il blocco http:

server_tokens off;

Ma quali strumenti posso usare per verificare che questa modifica abbia avuto effetto?


1
server_tokennon ha nulla a che fare con la versione di PHP. Di solito viene inviato in un'intestazione separata X-Powered-By. Immagino che tu abbia bisogno di php.net/manual/en/ini.core.php#ini.expose-php
Alexey Ten

Buona cattura Alexey, i token server sono solo una parte della mia soluzione. Ho bisogno di aggiungere ulteriori impostazioni per interrompere la divulgazione della versione di PHP. Grazie!
fyberoptik,

Risposte:


14

Dal manuale sai cosa fa l'impostazione:

Sintassi : server_tokens on | off;
Predefinito : server_tokens on;
Contesto : http, server, posizione

Abilita o disabilita l'emissione della versione nginx nei messaggi di errore e nel campo dell'intestazione della risposta "Server".

Quindi le tue opzioni sono:

  • generare un messaggio di errore, ad esempio se non si dispone di un messaggio di errore 404 personalizzato, è sufficiente richiedere una pagina inesistente e nel piè di pagina non verranno più visualizzate le informazioni sulla versione nginx/1.2.3.
  • ispezionare le intestazioni del server e confermare che la versione non sia più visualizzata.

Un semplice controllo per vedere le intestazioni di risposta HTTP è connettersi manualmente, cioè con: telnet www.example.com 80 dove le linee client sono ciò che inserisci:

client: HEAD / HTTP / 1.1
client: Host: www.esempio.com

server: HTTP / 1.1 200 OK
server: Data: Mer, 1 gen 1970 22:13:05 GMT
server: Server: Nginx / 1.2.3
server: Connessione: chiudi
server: Content-Type: text / html


1
Grazie per la risposta HBruijn, appena provato con Windows 7 Telnet, senza successo. Ho avuto un po 'più di successo con curl -I example.com ma questo non mostra alcuna informazione PHP.
fyberoptik,

Ciò non influirà su PHP, dato che di solito è un'intestazione diversa nelle pagine ...
Thomas Ward

4

Dopo aver cercato su Google un po 'di più, ho scoperto che il comando curl può controllare le intestazioni del server che mostrano sia i token del server che le versioni php:

curl -I -L www.example.com

Grazie ad Alexey per aver sottolineato il cambiamento necessario in 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

1

Inoltre, se servi progetti PHP, potresti dover cambiare /etc/nginx/{fastcgi,fastcgi_params).conf

fastcgi_param  SERVER_SOFTWARE    nginx;

0

Dai un'occhiata a InSpec, uno strumento che ti consente di "trasformare i requisiti di conformità, sicurezza e altri criteri in test automatici".

https://www.inspec.io

Può eseguire tutti i test di configurazione necessari per il tuo server Nginx. Ecco un modo per verificare l'esistenza del file conf e il valore di 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

Se impostato correttamente, InSpec restituisce:

  ✔  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.

Altrimenti:

  ×  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)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.