Como posso verificar se os tokens do servidor estão desativados?

5

Tivemos feedback do nosso relatório dizendo que devemos desativar os tokens do servidor. Isso impede que as pessoas possam ver qual versão do PHP estamos usando e limitar sua capacidade de direcionar a versão específica do PHP.

Eu adicionei o seguinte ao nginx.conf, sob o bloco http:

server_tokens off;

Mas quais ferramentas posso usar para verificar essa alteração?

    
por fyberoptik 04.06.2015 / 11:06

3 respostas

1

Depois de pesquisar um pouco mais, descobri que o comando curl pode verificar os cabeçalhos do servidor, que mostram os tokens do servidor e as versões do php:

curl -I -L www.example.com

Obrigado a Alexey por apontar a mudança necessária no 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
    
por 04.06.2015 / 12:55
9

No manual você sabe o que a configuração faz:

Syntax: server_tokens on | off;
Default: server_tokens on;
Context: http, server, location

Enables or disables emitting nginx version in error messages and in the “Server” response header field.

Então, suas opções são:

  • gere uma mensagem de erro, por exemplo, se você não tiver uma mensagem de erro 404 personalizada, basta solicitar uma página não existente e, no rodapé, não verá mais as informações da versão nginx/1.2.3 .
  • inspecione os cabeçalhos do servidor e confirme se a versão não é mais exibida.

Uma verificação simples para ver os cabeçalhos de resposta HTTP é conectar-se manualmente, por exemplo, com: telnet www.example.com 80 em que as linhas do cliente são o que você insere:

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

server: HTTP/1.1 200 OK
server: Date: Wed, 1 Jan 1970 22:13:05 GMT
server: Server: Nginx/1.2.3
server: Connection: close
server: Content-Type: text/html

    
por 04.06.2015 / 11:21
0

Dê uma olhada no InSpec, uma ferramenta que permite que você "transforme sua conformidade, segurança e outros requisitos de política em testes automatizados".

link

Ele pode fazer todos os testes de configuração necessários para o seu servidor Nginx. Aqui está uma maneira de testar a existência do arquivo conf e o valor de 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 definido corretamente, o InSpec retorna:

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

Se não:

  ×  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)
    
por 05.09.2018 / 20:20

Tags