我被要求在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指令来完成。有关详细信息,请参阅参考资料。
我不明白实际问题是什么,所以有人可以简要解释如何解决这个问题吗?
答案 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
值。
尝试创建这些情况:
一旦您演示了攻击,请找出主机已被专门阅读的位置,并将其替换为已配置的版本。当然,这需要特定于环境。