¿Cómo verifico que los tokens del servidor estén desactivados?

11

Recibimos comentarios de nuestro informe más reciente diciendo que deberíamos desactivar los tokens del servidor. Esto es para evitar que las personas puedan ver qué versión de PHP estamos usando y limitar su capacidad para apuntar a la versión específica de PHP.

He agregado lo siguiente a nginx.conf, debajo del bloque http:

server_tokens off;

Pero, ¿qué herramientas puedo usar para verificar que este cambio haya tenido efecto?

fyberoptik
fuente
1
server_tokenno tiene nada que ver con la versión PHP. Por lo general, se envía en un encabezado separado X-Powered-By. Supongo que necesitas php.net/manual/en/ini.core.php#ini.expose-php
Alexey Ten
Buena captura Alexey, los tokens del servidor son solo una parte de mi solución. Necesito agregar más configuraciones para detener la divulgación de la versión de PHP. ¡Gracias!
fyberoptik

Respuestas:

14

Del manual sabes lo que hace la configuración:

Sintaxis : server_tokens on | off;
Por defecto : server_tokens on;
Contexto : http, servidor, ubicación

Activa o desactiva la emisión de la versión nginx en los mensajes de error y en el campo de encabezado de respuesta "Servidor".

Entonces sus opciones son:

  • generar un mensaje de error, por ejemplo, si no tiene un mensaje de error 404 personalizado, simplemente solicite una página no existente y en el pie de página ya no verá la información de la versión nginx/1.2.3.
  • inspeccione los encabezados del servidor y confirme que la versión ya no se muestra.

Una simple comprobación para ver los encabezados de respuesta HTTP es conectarse manualmente, es decir, con: telnet www.example.com 80 donde las líneas del cliente son lo que ingresa:

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

servidor: HTTP / 1.1 200 OK
servidor: Fecha: mié, 1 de enero de 1970 22:13:05 GMT
servidor: Servidor: Nginx / 1.2.3
servidor: Conexión: cerrar
servidor: Tipo de contenido: texto / html

HBruijn
fuente
1
Gracias por su respuesta HBruijn, acabo de probar con Windows 7 Telnet, sin éxito. Tuve un poco más de éxito con curl -I example.com pero esto no muestra ninguna información de PHP.
fyberoptik
Sin embargo, esto no afectará a PHP, ya que generalmente es un encabezado diferente en las páginas ...
Thomas Ward
4

Después de buscar un poco más en Google, he encontrado que el comando curl puede verificar los encabezados del servidor que muestra las versiones de tokens y php del servidor:

curl -I -L www.example.com

Gracias a Alexey por señalar el cambio necesario en 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
fuente
1

Además, si sirve proyectos PHP, es posible que deba cambiar /etc/nginx/{fastcgi,fastcgi_params).conf

fastcgi_param  SERVER_SOFTWARE    nginx;
Alexander Br.
fuente
0

Eche un vistazo a InSpec, una herramienta que le permite "convertir sus requisitos de cumplimiento, seguridad y otras políticas en pruebas automatizadas".

https://www.inspec.io

Puede hacer todas las pruebas de configuración que necesita para su servidor Nginx. Aquí hay una forma de probar la existencia del archivo conf y el 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

Si se configura correctamente, InSpec devuelve:

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

Si no:

  ×  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
fuente