4

我有一个漂亮可爱的 Django 站点正在运行,但我注意到我的error.log文件在运行几个月后变得很大,超过 150 MB。结果是一堆垃圾邮件机器人正在寻找众所周知的 URL 漏洞(或其他东西)并攻击一堆子目录,如http://mysite.com/ieorhttp://mysite.com/~admin.php等​​。

由于 Django 使用 URL 重写,它正在寻找适合这些请求的模板,这会引发TemplateDoesNotExist异常,然后是 500 消息(Django 这样做,而不是我)。我关闭了调试,所以他们只收到通用的 500 消息,但它很快就填满了我的日志。

有没有办法关闭这种行为?或者也许只是阻止IP这样做?

4

8 回答 8

7

嗯,也许,使用logrotate定期旋转和压缩日志,如果它还没有完成的话。

于 2008-11-24T20:44:05.517 回答
4

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

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

请参阅Django 文档中的描述。

于 2008-11-24T21:39:47.030 回答
3

“有没有办法关闭这种行为?” - 500 是绝对强制性的。日志条目也是强制性的。

“或者也许只是阻止 IP 这样做?” - 我们不希望。

每个人都有这个问题。几乎每个人都使用 Apache日志轮换。其他人要么使用操作系统轮换,要么自己滚动。

于 2008-11-24T21:06:03.413 回答
3

如果 URL 与 URLConf 中的任何条目都不匹配,Django 应该抛出 404,而不是 500。

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

您需要提供 404 模板:

如果您没有定义自己的 404 视图——而只是使用推荐的默认视图——您仍然有一项义务:在模板目录的根目录中创建 404.html 模板。默认的 404 视图将使用该模板来处理所有 404 错误。

于 2008-11-25T16:17:47.223 回答
0

编程解决方案是:

  • 打开日志文件
  • 读取缓冲区中的行
  • 替换与机器人引起的错误匹配的行
  • 寻找到文件的开头
  • 写入新缓冲区
  • 将文件截断到当前指针位置
  • 关闭

瞧!完成 !

于 2008-11-24T20:41:43.870 回答
0

如何将一个包罗万象的模式设置为您的 urls 文件中的最后一项并将其定向到通用的“没有此类页面”甚至您的主页?换句话说,将 500 个请求转化为对您主页的请求。

于 2008-11-24T21:46:38.387 回答
0

为什么不修复那些“错误”?如果 url 模式不匹配,则应显示正确的错误消息。通过添加这些模板,您将帮助用户和您自己:-)

于 2008-11-25T01:26:56.977 回答
0
  1. 是的,它应该是 404,而不是 500。500 表示正在尝试处理 URL 并且在此过程中失败。你需要找到并修复它。

  2. 我们也有类似的问题。由于我们正在运行 Apache/mod_python,我选择在 .htaccess 中使用 mod_rewrite 规则来处理它。我会定期查看日志并将一些模式添加到我的“下地狱”列表中。这些都重写以提供 1x1 像素的 gif 文件。没有 404 的海啸会扰乱我的日志分析,它给 Django 和 Apache 带来最小的负载。

You can't make these a**holes go away, so all you can do is minimize their impact on your system and get on with your life.

于 2008-11-25T16:52:54.440 回答