Linux
為什麼 apache 使用程式碼 200 記錄對 GET 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 (兼容; MSIE 5.01; Win2000)” 我的直接回答是有人在探索一些有點狡猾的東西。
但:
- 如何?推測… 一個簡短的 perl 或 python 腳本可以很容易地連接並請求一個帶有無效主機的 URL。
- 漏洞?當他們這樣做時,有人在尋找什麼,他們學到了什麼,我們應該修補它嗎?
- 我需要一頂錫箔帽來防止他們讀懂我的想法嗎?
- 對我來說真正的問題是:不應該是 404 響應,而不是 200!?
這是在標準 LAMP 伺服器 (Ubuntu) 上。
也許你想閱讀http://wiki.apache.org/httpd/ProxyAbuse
特別是這一點:“我的伺服器已正確配置為不代理,那麼為什麼 Apache 返回 200(成功)狀態碼?”,它問您的問題“不應該是 404 響應,而不是 200!?”
如果 apache conf 沒問題,它只是發送根頁面。這是因為你得到的狀態碼是 200。
我認為如果有人試圖將伺服器用作代理,就會發生這種情況。這將使 http://… URL “正常”(而不是您期望從正常伺服器請求中獲得的路徑部分。)
至於 200 狀態碼,那… err.. 好吧,我的伺服器也是這樣做的。它似乎忽略了http://hostname部分並使用剩餘路徑從本地伺服器返回結果。您可能必須深入研究 RFC 才能弄清楚為什麼這樣做是有意義的;我不知道答案。