修复Codeigniter中的主机头攻击漏洞

时间:2014-12-09 08:35:53

标签: php header host

我被要求在Windows服务器 IIS 上托管的codeigniter应用程序中解决安全问题,以下是问题的描述。我相信它来自名为“Acunetix”的报告软件。

  

主机标头攻击

     

漏洞描述

     

攻击者可以操纵Web应用程序看到的Host标头,并导致应用程序以意外方式运行。开发人员经常使用非常不值得信任的HTTP Host头(PHP中的_SERVER [“HTTP_HOST”])。即使是其他安全的应用程序也相信这个值足以将其写入页面,而无需使用以下代码进行HTML编码:

   <link href="http://_SERVER['HOST']"    (Joomla)
   ...and append secret keys and tokens to links containing it: 
   <a href="http://_SERVER['HOST']?token=topsecret">  (Django, Gallery, others)
   ....and even directly import scripts from it: 
   <script src="http://_SERVER['HOST']/misc/jquery.js?v=1.4.4">  (Various)
     

受影响的物品

     
      
  • / techP / user / forget
  •   
  • / techP / user / login
  •   
  • / techP / user / loginexec
  •   
  • / techP / user / register
  •   
     

此漏洞的影响

     

攻击者可以操纵Web应用程序看到的Host标头,并导致应用程序以意想不到的方式运行。

     

如何修复此漏洞

     

Web应用程序应使用SERVER_NAME而不是Host标头。它还应该创建一个虚拟虚拟主机,用于捕获具有无法识别的主机头的所有请求。这也可以通过指定非通配符SERVER_NAME在Nginx下完成,在Apache下通过使用非通配符serverName并打开UseCanonicalName指令来完成。有关详细信息,请参阅参考资料。

我不明白实际问题是什么,所以有人可以简要解释如何解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

据我了解,此漏洞主要影响作为IP地址默认虚拟主机的网站。也就是说,无论客户端发送的Host HTTP标头如何,都将为该网站提供服务。作为HTTP服务器上唯一配置的站点的站点有时会设置为这样。

虚拟托管的网站(即他们需要有效的Host标头)可能仍然容易受到攻击,因为some attacks send multiple copies of the header(特别参见&#39;缓存中毒&#39;)。

你的第一步就是复制它。在本地Apache实例上设置应用程序,并尝试复制提到的特定漏洞。要做到这一点,您需要让它响应IP地址(例如127.0.0.1)以及localhost。完成后,您可以使用标头修改工具(例如,通过curl或浏览器插件)修改发送给客户端的Host值。

尝试创建这些情况:

  • 与您使用的实际域名无关的域名,以确定您是否可以说服该应用重定向到您的域名
  • 在其中注入包含XSS hack的域

一旦您演示了攻击,请找出主机已被专门阅读的位置,并将其替换为已配置的版本。当然,这需要特定于环境。