Wie überprüfe ich, ob Server-Token deaktiviert sind?

10

Wir hatten Feedback von unserem Pentest-Bericht, dass wir Server-Token deaktivieren sollten. Dies verhindert, dass Benutzer sehen können, welche PHP-Version wir verwenden, und beschränkt ihre Fähigkeit, auf die spezifische PHP-Version abzuzielen.

Ich habe nginx.conf unter dem http-Block Folgendes hinzugefügt:

server_tokens off;

Aber mit welchen Tools kann ich überprüfen, ob diese Änderung wirksam geworden ist?

fyberoptik
quelle
1
server_tokenhat nichts mit der PHP-Version zu tun. Es wird normalerweise in einem separaten Header gesendet X-Powered-By. Ich denke, Sie brauchen php.net/manual/en/ini.core.php#ini.expose-php
Alexey Ten
Guter Fang Alexey, Server-Token sind nur ein Teil meiner Lösung. Ich muss weitere Einstellungen hinzufügen, um die Offenlegung der PHP-Version zu stoppen. Vielen Dank!
Fyberoptik

Antworten:

13

Aus dem Handbuch wissen Sie, was die Einstellung bewirkt:

Syntax : server_tokens on | off;
Standard : server_tokens on;
Kontext : http, Server, Standort

Aktiviert oder deaktiviert die Ausgabe der Nginx-Version in Fehlermeldungen und im Antwortheaderfeld "Server".

Sie haben also folgende Möglichkeiten:

  • Generieren Sie eine Fehlermeldung. Wenn Sie beispielsweise keine benutzerdefinierte 404-Fehlermeldung haben, fordern Sie einfach eine nicht vorhandene Seite an, und in der Fußzeile werden die Versionsinformationen nginx/1.2.3nicht mehr angezeigt .
  • Überprüfen Sie die Server-Header und stellen Sie sicher, dass die Version nicht mehr angezeigt wird.

Eine einfache Überprüfung, um die HTTP-Antwortheader anzuzeigen, besteht darin, manuell eine Verbindung herzustellen, dh mit: telnet www.example.com 80 wo die Clientleitungen sind, was Sie eingeben:

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

Server: HTTP / 1.1 200 OK
Server: Datum: Mi, 1. Januar 1970 22:13:05 GMT-
Server: Server: Nginx / 1.2.3
Server: Verbindung:
Server schließen: Inhaltstyp: Text / HTML

HBruijn
quelle
1
Vielen Dank für Ihre Antwort HBruijn, gerade mit Windows 7 Telnet versucht, erfolglos. Hatte ein bisschen mehr Erfolg mit curl -I example.com, aber dies zeigt keine PHP-Informationen.
Fyberoptik
Dies hat jedoch keine Auswirkungen auf PHP, da dies normalerweise ein anderer Header auf den Seiten ist ...
Thomas Ward
3

Nach etwas mehr googeln habe ich festgestellt, dass der Befehl curl die Server-Header überprüfen kann, in denen sowohl Server-Token als auch PHP-Versionen angezeigt werden:

curl -I -L www.example.com

Vielen Dank an Alexey für den Hinweis auf die in PHP erforderlichen Änderungen.

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
quelle
0

Schauen Sie sich InSpec an, ein Tool, mit dem Sie "Ihre Compliance-, Sicherheits- und anderen Richtlinienanforderungen in automatisierte Tests umwandeln" können.

https://www.inspec.io

Es kann alle Konfigurationstests durchführen, die Sie für Ihren Nginx-Server benötigen. Hier ist eine Möglichkeit, die Existenz der conf-Datei und den Wert von zu testen 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

Bei korrekter Einstellung gibt InSpec Folgendes zurück:

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

Wenn nicht:

  ×  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
quelle
0

Wenn Sie PHP-Projekte bedienen, müssen Sie möglicherweise Änderungen vornehmen /etc/nginx/{fastcgi,fastcgi_params).conf

fastcgi_param  SERVER_SOFTWARE    nginx;
Alexander Br.
quelle