1. 程式人生 > >隱藏響應頭中Apache、nginx或PHP的版本資訊

隱藏響應頭中Apache、nginx或PHP的版本資訊

預設地,伺服器HTTP響應頭會包含apache,nginx和php版本號。像下面的,這是有危害的,因為這會讓黑客通過知道詳細的版本號而發起已知該版本的漏洞攻擊。

圖示

Apache

為了阻止這個,需要在httpd.conf設定ServerTokens為Prod,這會在響應頭中顯示“Server:Apache”而不包含任何的版本資訊。

下面是ServerTokens的一些可能的賦值:

ServerTokens Prod 顯示“Server: Apache”
ServerTokens Major 顯示 “Server: Apache/2″
ServerTokens Minor 顯示“Server: Apache/2.2″
ServerTokens Min 顯示“Server: Apache/2.2.17″
ServerTokens OS 顯示 “Server: Apache/2.2.17 (Unix)”
ServerTokens Full 顯示 “Server: Apache/2.2.17 (Unix) PHP/5.3.5″

PHP

需要將php.ini中的expose_php = On,改為Off,頭資訊中將隱藏X-Powered-By:PHP/7.1.0

nginx

1.隱藏版本號:

vi nginx.conf

在http 加上 server_tokens off;

如下:

http {
……省略配置
server_tokens off;   ->即可隱藏版本號
…….省略配置
}

重啟nginx後,我們返回的Server頭格式為Server:nginx ,而且nginx自己的404頁面也沒有版本號的資訊

2.返回自定義的server
混淆Server資訊

我是不太願意告訴別人我是使用什麼Server的,但沒有找到相關文獻去隱藏它,所以我們可以混淆她,如把Server返回GFW之類的,嚇唬嚇唬那些指令碼小子

大部分情況下,指令碼的小子的掃描工具是掃描我們response返回的header中的server資訊.我們可以採用編譯原始碼的方法來改變返回的Server,筆者的版本是nginx1.7.0,我們修改src/http/ngx_http_header_filter_module.c 中的48行

   static char ngx_http_server_string[] = "Server: nginx" CRLF;

把其中的nginx改為我們自己想要的文字即可,筆者就改為了YSY. 筆者輸出的Server:YSY.(這個前提是你進行了第一個步句的操作,關閉了版本號)

如果你的版本號是開著的,你又想調戲下指令碼小子.比如Server:billgate/1.9.0

我們修改src/core/nginx.h 定位到13-14行

   #define NGINX_VERSION      "1.7.0"

   #define NGINX_VER          "nginx/" NGINX_VERSION

Server返回的就是常量NGINX_VER, 我們把NGINX_VERSION大小定義為1.9.0,nginx改為billgate就能達到我們的目的了