2008-11-24 22 views
3

我有一個漂亮可愛的Django網站正在運行,但已經注意到我的error.log文件變得越來越大,在幾個月的生活後超過150 MB。原來一堆垃圾郵件機器人的尋找衆所周知的URL漏洞(或東西),打像http://mysite.com/iehttp://mysite.com/~admin.php等一堆子目錄Spambots正在混淆我的日誌文件[Django]

由於Django使用URL重寫,它正在尋找模板,以適應這些要求,這引發了一個TemplateDoesNotExist異常,然後是500條消息(Django做到了這一點,而不是我)。我關掉了調試,所以他們只能得到通用的500消息,但它很快就填滿了我的日誌。

有沒有辦法關閉這種行爲?或者也許只是阻止IP這樣做?

+0

不應該是404消息嗎? – jfs 2008-11-24 21:28:17

+0

500是一個Django的東西,我會編輯這個帖子,使其更清晰。 – swilliams 2008-11-24 22:39:58

+0

這是500.它不一定是一個壞請求;作爲開發者,我們碰巧知道客戶正在探索。然而,Django認爲開發者忘記了包含一個URL。 – 2008-11-25 02:00:51

回答

6

也許使用logrotate可以定期旋轉和壓縮日誌,如果它尚未完成的話。

0

一種編程解決方案是:

  • 打開日誌文件
  • 讀入緩衝區裏的行
  • 更換匹配的機器人引起了錯誤,該行
  • 尋求開始的文件
  • 寫新緩衝區
  • 將文件截斷爲當前指針位置
  • close

瞧!完成 !

3

「有沒有辦法關閉這種行爲?」 - 500是絕對強制性的。日誌條目也是強制性的。

「或者也許只是阻止IP這樣做?」 - 我們不希望。

每個人都有這個問題。幾乎每個人都使用Apache log rotation。其他人都使用操作系統旋轉或自己滾動。

3

如果您可以在UserAgent字符串中找到模式,則可以使用DISALLOWED_USER_AGENT設置。我的是:

DISALLOWED_USER_AGENTS = (
    re.compile(r'Java'), 
    re.compile(r'gigamega'), 
    re.compile(r'litefinder'), 
) 

請參閱Django docs中的說明。

0

如何在你的urls文件的最後一項中設置一個抓包模式並將其引導到一個通用的「沒有這樣的頁面」,甚至是你的主頁?換句話說,把500轉換成你的主頁的請求。

0

爲什麼不解決這些「錯誤」?如果URL模式不匹配,則應顯示正確的錯誤消息。通過添加這些模板,您將help the user和你自己:-)

2

如果URL不匹配URLConf中的任何條目,Django應該拋出404而不是500。

http://docs.djangoproject.com/en/dev/topics/http/urls/#handler404

您需要提供一個404模板:

如果你沒有定義自己的404視圖 - 並且只使用默認,這是推薦 - 你仍然有一個義務:在模板目錄的根目錄下創建一個404.html模板。默認的404視圖將爲所有404錯誤使用該模板。

0
  1. 是的,它應該是404,而不是500 500表示事情是試圖處理的URL,並在這個過程中失敗。你需要找到並解決這個問題。

  2. 我們有類似的問題。由於我們運行的是Apache/mod_python,因此我選擇使用mod_rewrite規則在.htaccess中處理它。我會定期查看日誌,並在我的「進入地獄」列表中添加一些模式。這些全部重寫提供1x1像素的gif文件。沒有海嘯的404s混亂了我的日誌分析,並且對Django和Apache的負載最小。

你不能讓這些空洞消失,所以你所能做的就是儘量減少它們對你的系統的影響並繼續你的生活。