Como verifico se os tokens do servidor estão desativados?

11

Recebemos comentários de nosso relatório completo, dizendo que deveríamos desativar os tokens de servidor. Isso impede as pessoas de ver qual versão do PHP estamos usando e limita sua capacidade de direcionar a versão específica do PHP.

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

server_tokens off;

Mas que ferramentas posso usar para verificar se essa alteração foi afetada?

fyberoptik
fonte
1
server_tokennão tem nada a ver com a versão PHP. Geralmente é enviado em cabeçalho separado X-Powered-By. Eu acho que você precisa de php.net/manual/pt/ini.core.php#ini.expose-php #
Alexey Ten
Boa captura Alexey, os tokens de servidor são apenas parte da minha solução. Eu preciso adicionar mais configurações para interromper a divulgação da versão do PHP. Obrigado!
Fyberoptik

Respostas:

14

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

Sintaxe : server_tokens on | off;
Padrão : server_tokens on;
Contexto : http, servidor, localização

Habilita ou desabilita a emissão da versão nginx nas mensagens de erro e no campo de cabeçalho de resposta "Servidor".

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 inexistente e, no rodapé, você 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, ou seja, com: telnet www.example.com 80 onde as linhas do cliente são as que você digita:

cliente: HEAD / HTTP / 1.1
cliente: Anfitrião: www.example.com

servidor: HTTP / 1.1 200
servidor OK : Data: quarta-feira, 1 de janeiro de 1970 22:13:05
servidor GMT : servidor: servidor Nginx / 1.2.3
: conexão: fechar
servidor: tipo de conteúdo: text / html

HBruijn
fonte
1
Obrigado pela sua resposta HBruijn, apenas tentei com o windows 7 telnet, sem êxito. Teve um pouco mais de sucesso com curl -I example.com, mas isso não mostra nenhuma informação do PHP.
Fyberoptik
Isso não afetará PHP embora como isso é normalmente um cabeçalho diferente nas páginas ...
Thomas Ward
4

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

curl -I -L www.example.com

Agradecemos a Alexey por apontar a alteração 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
fyberoptik
fonte
1

Além disso, se você atende a projetos PHP, pode ser necessário alterar /etc/nginx/{fastcgi,fastcgi_params).conf

fastcgi_param  SERVER_SOFTWARE    nginx;
Alexander Br.
fonte
0

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

https://www.inspec.io

Ele pode fazer todos os testes de configuração necessários para o 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 retornará:

  ✔  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)
james.garriss
fonte