Làm cách nào để kiểm tra mã thông báo máy chủ đang tắt?


11

Chúng tôi đã có phản hồi từ báo cáo dồn nén nhất của chúng tôi nói rằng chúng tôi nên tắt mã thông báo máy chủ. Điều này ngăn mọi người có thể xem phiên bản PHP nào chúng tôi đang sử dụng và giới hạn khả năng nhắm mục tiêu phiên bản PHP cụ thể của họ.

Tôi đã thêm phần sau vào nginx.conf, trong khối http:

server_tokens off;

Nhưng những công cụ nào tôi có thể sử dụng để kiểm tra sự thay đổi này đã ảnh hưởng?


1
server_tokenkhông có gì để làm với phiên bản PHP. Nó thường được gửi trong tiêu đề riêng biệt X-Powered-By. Tôi đoán bạn cần php.net/manual/en/ini.core.php#ini.expose-php
Alexey Ten

Alexey tốt, mã thông báo máy chủ chỉ là một phần trong giải pháp của tôi. Tôi cần thêm cài đặt để ngừng tiết lộ phiên bản PHP. Cảm ơn!
fyberoptik

Câu trả lời:


14

Từ hướng dẫn, bạn biết cài đặt làm gì:

Cú pháp : server_tokens on | off;
Mặc định : server_tokens on;
Bối cảnh : http, máy chủ, địa điểm

Bật hoặc tắt phiên bản nginx trong thông báo lỗi và trong trường tiêu đề phản hồi của máy chủ.

Vì vậy, lựa chọn của bạn là:

  • ví dụ, tạo một thông báo lỗi nếu bạn không có thông báo lỗi 404 tùy chỉnh chỉ cần yêu cầu một trang không tồn tại và trong phần chân trang bạn sẽ không thấy thông tin phiên bản nginx/1.2.3nữa.
  • kiểm tra các tiêu đề máy chủ và xác nhận rằng phiên bản không còn được hiển thị.

Một kiểm tra đơn giản để xem các tiêu đề phản hồi HTTP là kết nối thủ công tức là với: telnet www.example.com 80 nơi các dòng máy khách là những gì bạn nhập:

khách hàng: khách hàng CHÍNH / HTTP / 1.1
: Máy chủ: www.example.com

máy chủ: HTTP / 1.1 200
Máy chủ OK : Ngày: Thứ Tư, ngày 1 tháng 1 năm 1970 22:13:05
Máy chủ GMT : Máy chủ: Nginx / 1.2.3
máy chủ: Kết nối:
máy chủ đóng : Loại nội dung: văn bản / html


1
Cảm ơn câu trả lời của bạn HBruijn, chỉ cần thử với windows 7 telnet, không thành công. Đã thành công hơn một chút với curl -I example.com nhưng điều này không hiển thị bất kỳ thông tin PHP nào.
fyberoptik

Điều này sẽ không ảnh hưởng đến PHP mặc dù đó thường là một tiêu đề khác trong các trang ...
Thomas Ward

4

Sau khi googling thêm một chút, tôi đã tìm thấy lệnh curl có thể kiểm tra các tiêu đề máy chủ hiển thị cả mã thông báo máy chủ và phiên bản php:

curl -I -L www.example.com

Cảm ơn Alexey đã chỉ ra sự thay đổi cần thiết trong 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

1

Ngoài ra, nếu bạn phục vụ các dự án PHP, bạn có thể cần phải thay đổi trong /etc/nginx/{fastcgi,fastcgi_params).conf

fastcgi_param  SERVER_SOFTWARE    nginx;

0

Hãy xem InSpec, một công cụ cho phép bạn "biến sự tuân thủ, bảo mật và các yêu cầu chính sách khác của bạn thành các bài kiểm tra tự động".

https://www.inspec.io

Nó có thể thực hiện tất cả các kiểm tra cấu hình mà bạn cần cho máy chủ Nginx của mình. Đây là một cách để kiểm tra sự tồn tại của tệp conf và giá trị của 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

Nếu được đặt chính xác, InSpec trả về:

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

Nếu không:

  ×  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)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.