无法删除Server:Apache标头

Aud*_*ile 11 apache centos apache2 http-headers

我的HTTP响应头中有"Server:Apache",并希望将其删除.我按照说明添加到httpd.conf:

ServerSignature Off  
ServerTokens Prod
Header unset Server
Run Code Online (Sandbox Code Playgroud)

但最后一行没有效果.前两行改变了标题的内容(之前它还包含有关OS和PHP的信息),但我需要完全删除它.这该怎么做?

Bar*_*ard 33

Apache不允许您完全取消设置.事实上,一些开发人员强烈反对添加这个,尽管它是一个简单的代码更改,已被建议(甚至写入!)几次.请参阅 此处此处,了解一些已经提出并被拒绝的讨论.

他们给出了各种理由,包括:

  1. 默默无闻的安全性是一种神话,并且给出了一种虚假的安全感,因为根据它对特定请求的响应方式,可以很容易地指示服务器查看它可能是哪个软件.虽然有一个真实的含义,默认情况下将ServerTokens指定为Full 肯定是一个安全问题,泄漏的信息远远超过公共网站上默认显示的信息.

  2. 它可能会也可能不会违反HTTP规范而不提供服务器头.这似乎是在一些争议中,仍然没有回答为什么他们不允许你将它改为一些随机字符串而不是Apache.

  3. 这可能会使计算野外Apache安装数量变得更加困难.如果它很容易指纹和自负的原因,那么这与上面的论点1相反.

  4. 这使得调试问题变得很困难,如果指纹很容易,那么这又与上面的参数1相反,你认为任何需要调试的人都会知道或者能够找到确切的版本.

  5. 如果代理服务器知道另一端的服务器类型,它"可能"以不同的方式处理请求.代理服务器哪个错误恕我直言,我怀疑它已经做了很多.

  6. 如果人们真的想修改或隐藏这个标题,他们可以编辑源代码.坦率地说,这是一个危险的建议,建议没有代码经验的人做,如果他们从非打包版本运行只是为了添加它,可能会导致其他安全问题.

他们甚至将其添加到官方文档中:

建议不要将ServerTokens设置为小于最小值,因为这会使调试互操作问题变得更加困难.另请注意,禁用Server:标头不会使您的服务器更安全."通过默默无闻的安全"的想法是一个神话,导致虚假的安全感.

整个情况是,恕我直言,很荒谬,他们应该改变立场,让人们按照自己的意愿配置软件.在最坏的情况,因为他们说这不添加任何东西,但我个人认为你给了少不必要的信息,将更好,所以希望能够关闭这个功能停止这整个问题被提出,每隔一段时间.

在那个不太可能的转弯之前,你只剩下:

  1. 将其设置为最小 - 这可能足够好了
  2. 编辑源代码 - 除了最偏执的外,这是过度的
  3. 安装ModSecurity - 它(至少用于)允许您将此标头覆盖(但不删除)到您想要隐藏服务器软件的任何内容.虽然WAF还有其他好处,但可能只是为了安装它而过度杀伤.
  4. 代理Apache在另一个Web服务器后面,允许您更改此字段.
  5. 切换到另一个Web服务器.

咆哮.

  • 隐藏你所拥有的东西不仅仅是为了安全。它还可以向您的竞争对手隐藏您使用的技术。官方文档显然是废话。对此持开放态度:“这符合我们的利益,并为你曝光 apache 支付我们的账单”,不要让它看起来像是我需要的东西 (3认同)

Sha*_*rpC 19

标头检索

为了获取 headers,如果在服务器上,这似乎可以充分工作(所有测试都在 Ubuntu 14.04 Trusty Tahr 上完成):

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

它会产生类似的东西:

< HTTP/1.1 200 OK
< Date: Mon, 25 Jan 2021 09:17:51 GMT
* Server Apache/2.4.7 (Ubuntu) is not blacklisted
< Server: Apache/2.4.7 (Ubuntu)
Run Code Online (Sandbox Code Playgroud)

删除版本号

删除版本号,请编辑文件/etc/apache2/conf-enabled/security.conf并修改以下行:

  • ServerTokens OSServerTokens Prod
  • ServerSignature OnServerSignature Off

并重新启动阿帕奇:

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

您现在应该得到如下响应:

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

删除“阿帕奇”一词

Apache要完全删除该词,请首先安装 ModSecurity

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

以下几行似乎不是必需的(启用模块并重新启动 Apache),但仅供参考

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

检查模块是否已启用:

apachectl -M | grep security
Run Code Online (Sandbox Code Playgroud)

应该显示:

security2_module (shared)
Run Code Online (Sandbox Code Playgroud)

然后,尽管您可以修改 /etc/modsecurity/modsecurity.conf(通过重命名modsecurity.conf-recommended),但修改/etc/apache2/apache.conf看起来更容易 (注意您可以使用您想要的任何名称,在本例中我只是使用了一个空格)

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

(使用Min而不是还Full可以防止模块mod_fastcgi出现在空白服务器名称之后。)

然后重新启动阿帕奇:

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)