从响应头中删除“服务器:Apache”

kab*_*hya 6 apache ubuntu http-headers

我想知道如何完全删除 apache 在响应中发送的服务器标头。

最初,它显示完整的服务器信息,如Server: Apache (Ubuntu 14.04)响应标头中的信息。但我在某处读到在 apache2.conf 中添加这个

ServerTokens ProductOnly

ServerSignature Off
Run Code Online (Sandbox Code Playgroud)

它没有删除标题,只是将其更改为 Server: Apache

我什至尝试从 PHP 中删除带有header_remove('Server');. 但仍然没有运气。

所以,我想完全删除它。

谢谢,

PS:如果可以更改标题值,例如:to Server: Microsoft-IIS/8.0(假值);那么也没关系。

Mar*_*Zen 6

2020 年更新:

要以@Maxym关于使用该mod_security模块的答案为基础 - 请注意,您不能使用此模块完全删除服务器头(这只能通过源代码编辑/重新编译),但是您可以重命名公共服务器签名 - 说“NinjaServer “通过这个 mod_security模块!

要做到这一点;

我们必须(在 httpd.conf 或同等文件中)keep/set;

ServerTokens Full
Run Code Online (Sandbox Code Playgroud)

然后通过mod_security2.conf;

SecServerSignature "NinjaServer"
Run Code Online (Sandbox Code Playgroud)

另外,最好最后加载 mod_security 模块,以避免在 apache 错误日志中出现通知。

对于 OpenSuse 15.x / Apache 2.4.x 安装,实际步骤是:

 zypper -v in apache2-mod_security2 // install mod_security
 a2enmod security2                  // enable the module
 a2enmod unique_id                  // this was needed too...
 a2enmod -l                         // verify loaded
Run Code Online (Sandbox Code Playgroud)

接下来,编辑httpd.conf.local(在/etc/apache2下)并设置;

 ServerTokens Full
Run Code Online (Sandbox Code Playgroud)

接下来,编辑mod_security2.conf(在/etc/apache2下)并设置;

 SecRuleEngine DetectionOnly         // only remove apache server name
 SecServerSignature "NinjaServer"    // some name other than Apache
Run Code Online (Sandbox Code Playgroud)

也注释掉(本例只是修改公共服务器签名);

# Include /usr/share/apache2-mod_security2/rules/modsecurity_crs_10_setup.conf

 
Run Code Online (Sandbox Code Playgroud)

然后通过重新启动apache

systemctl restart apache2
Run Code Online (Sandbox Code Playgroud)

如果您现在检查标头(浏览器的开发工具),您将看到服务器名称显示为 NinjaServer :-)


Max*_*xym 5

服务器 ID/令牌标头由“ServerTokens”指令(由 mod_core 提供)控制。除了修改 Apache HTTPD 源代码或使用 mod_security 模块之外,没有其他方法可以完全抑制服务器 ID 标头。

使用 mod_security 方法,您可以禁用 modsecurity.conf 文件中的所有模块指令/功能,并仅利用服务器标头 ID 指令,而无需任何额外的“包袱”。(c) 奇普斯特


Sha*_*rpC 5

是我发现的最好的方法:

sudo apt-get install libapache2-mod-security2
Run Code Online (Sandbox Code Playgroud)

然后将其添加到/etc/apache2/apache.conf(您可以使用任何名称,这里我使用了空格):

<IfModule security2_module>
    SecRuleEngine on
    ServerTokens Min
    SecServerSignature " "
</IfModule> 
Run Code Online (Sandbox Code Playgroud)

并重新启动阿帕奇:

sudo service apache2 restart
Run Code Online (Sandbox Code Playgroud)

现在当你运行类似的东西时:

curl -v http://localhost:80/ | head
Run Code Online (Sandbox Code Playgroud)

你应该得到:

< HTTP/1.1 200 OK
< Date: Mon, 25 Jan 2021 09:31:11 GMT
* Server  is not blacklisted
< Server:
Run Code Online (Sandbox Code Playgroud)

有关完整详细信息,请参阅此处