为什么apache日志请求使用代码200获取http://www.google.com?

我最近被问到“在我们的access.log中是什么原因造成这种情况?

59.56.109.181 – – [22 / Feb / 2010:16:03:35 -0800]“GET http://www.google.com/ HTTP / 1.1”200 295“ – ”“Mozilla / 5.0(compatible; MSIE 5.01 ; Win2000)“

我的直接答案是有人探索一些有点狡猾的东西。

但:

  • 怎么样? 猜测…一个简短的Perl或Python脚本可以很容易地连接,并要求一个无效的主机的URL。 但不要发布一个。 如果你知道一个好的class轮,我会好奇的。 考虑今天的高尔夫:)
  • 漏洞? 当他们这样做的时候,他们在寻找什么,他们学到了什么,我们应该修补它?
  • 我需要一个锡箔帽子,以防止他们读我的脑海?
  • 对我来说,真正的问题是:这不应该是一个404响应,而不是一个200!

这是一个标准的LAMP服务器(Ubuntu)。

也许你想阅读http://wiki.apache.org/httpd/ProxyAbuse

特别是这一点:“我的服务器configuration正确,不能代理,为什么Apache返回一个200(成功)的状态代码?”,它会问你的问题:“这不应该是一个404响应,而不是200!

如果apache的conf是好的,它只是发送根页面。 这是因为你得到一个状态码是200。

我想这会发生,如果有人试图使用服务器作为代理。 这将使http:// … URL“正常”(而不仅仅是您期望从常规服务器请求获得的path部分)。

至于200状态码,那…错,呃,我的服务器也是这样。 它似乎忽略了http://主机名部分,并使用剩余path从本地服务器返回结果。 你可能需要挖掘RFC来找出为什么这是有道理的; 我不知道答案。