web-dev-qa-db-ja.com

サーバートークンがオフになっていることを確認するにはどうすればよいですか?

ペンテストレポートから、サーバートークンを無効にする必要があるとのフィードバックがありました。これにより、PHPのどのバージョンを使用しているかを人々が確認できなくなり、特定のPHPバージョンを対象とする能力が制限されます。

次のコードをnginx.confのhttpブロックの下に追加しました。

server_tokens off;

しかし、この変更が影響を与えたことを確認するためにどのツールを使用できますか?

10
fyberoptik

もう少しグーグルで調べたところ、curlコマンドでサーバーヘッダーとphpのバージョンの両方を示すサーバーヘッダーを確認できることがわかりました。

curl -I -L www.example.com

PHPに必要な変更を指摘してくれたAlexeyに感謝します。

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
3
fyberoptik

manual から、設定の内容がわかります。

構文server_tokens on | off;
デフォルトserver_tokens on;
Context:http、サーバー、場所

エラーメッセージおよび「サーバー」応答ヘッダーフィールドでのnginxバージョンの出力を有効または無効にします。

だからあなたのオプションは:

  • エラーメッセージを生成します。たとえば、カスタム404エラーメッセージがない場合、存在しないページをリクエストするだけで、フッターにバージョン情報が表示されませんnginx/1.2.3もう。
  • サーバーのヘッダーを調べて、バージョンが表示されなくなったことを確認します。

HTTP応答ヘッダーを確認する簡単なチェックは、手動で接続することです。つまり、telnet www.example.com 80ここで、クライアント行は入力したものです。

クライアント:HEAD/HTTP/1.1
クライアント:ホスト:www.example.com

サーバー:HTTP/1.1 200 OK
サーバー:日付:1970年1月1日水曜日22:13:05 GMT
サーバー:サーバー:Nginx/1.2.3
サーバー:接続:閉じる
server:Content-Type:text/html

13
HBruijn

「コンプライアンス、セキュリティ、その他のポリシー要件を自動テストに変える」ことができるツールであるInSpecを見てください。

https://www.inspec.io

Nginxサーバーに必要なすべての構成テストを実行できます。 confファイルの存在とserver_tokensの値をテストする1つの方法を次に示します。

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

正しく設定されている場合、InSpecは以下を返します。

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

そうでない場合:

  ×  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)
0
james.garriss

また、PHP=プロジェクトを提供している場合は、/etc/nginx/{fastcgi,fastcgi_params).conf

fastcgi_param  SERVER_SOFTWARE    nginx;
0
Alexander Br.