Спам-боты загромождают мой лог-файл [Django] - PullRequest
3 голосов
/ 24 ноября 2008

У меня есть хороший и прекрасный сайт Django, но я заметил, что мой файл error.log стал огромным, более 150 МБ после нескольких месяцев работы. Оказывается, спам-боты ищут хорошо известные уязвимости URL (или что-то в этом роде) и попадают в несколько подкаталогов, таких как http://mysite.com/ie или http://mysite.com/~admin.php и т. Д.

Поскольку Django использует перезапись URL-адресов, он ищет шаблоны, соответствующие этим запросам, что вызывает исключение TemplateDoesNotExist, а затем сообщение 500 (Django делает это, а не я). У меня отключена отладка, поэтому они получают только общее сообщение 500, но оно очень быстро заполняет мои журналы.

Есть ли способ отключить это поведение? Или, возможно, просто заблокировать IP-адреса, делающие это?

Ответы [ 8 ]

6 голосов
/ 24 ноября 2008

Гм, возможно, используйте logrotate для периодического вращения и сжатия журналов, если это еще не сделано.

3 голосов
/ 25 ноября 2008

Если вы можете найти шаблон в строке UserAgent, вы можете использовать настройку DISALLOWED_USER_AGENT. Мой это:

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

См. Описание в Django docs .

3 голосов
/ 25 ноября 2008

"Есть ли способ отключить это поведение?" - 500 абсолютно обязательно. Запись в журнале также является обязательной.

"Или, может быть, просто заблокировать IP, делающие это?" - разве мы не желаем.

У всех есть эта проблема. Почти каждый использует Apache ротация журналов . Все остальные либо используют ротацию ОС, либо сворачивают свои.

2 голосов
/ 25 ноября 2008

Django должен выдавать 404, а не 500, если URL не соответствует ни одной записи в вашем URLConf.

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

Вам необходимо предоставить шаблон 404:

Если вы не определяете свое собственное представление 404 - и просто используете значение по умолчанию, что рекомендуется - у вас все еще есть одно обязательство: создать шаблон 404.html в корневом каталоге вашего шаблона. Представление 404 по умолчанию будет использовать этот шаблон для всех ошибок 404.

0 голосов
/ 25 ноября 2008
  1. Да, это должно быть 404, а не 500. 500 означает, что что-то пытается обработать URL-адрес и в процессе происходит сбой. Вам нужно найти и исправить это.

  2. У нас похожая проблема. Поскольку мы запускаем Apache / mod_python, я решил работать с ним в .htaccess с правилами mod_rewrite. Я периодически просматриваю логи и добавляю несколько шаблонов в свой список «иди в ад». Все они переписывают, чтобы предоставить 1x1 пиксель GIF-файл. Нет никакого цунами 404-х годов, чтобы загромождать мой анализ логов, и это накладывает минимальную нагрузку на Django и Apache.

Вы не можете сделать так, чтобы эти ** дыры исчезли, поэтому все, что вы можете сделать, это минимизировать их влияние на вашу систему и продолжать жить.

0 голосов
/ 25 ноября 2008

Почему бы не исправить эти "ошибки"? Если шаблон URL не совпадает, то должно отображаться правильное сообщение об ошибке. Добавив эти шаблоны, вы поможете пользователю и себе: -)

0 голосов
/ 25 ноября 2008

Как насчет установки шаблона «все для всех» в качестве последнего элемента в вашем файле urls и направления его на общую «нет такой страницы» или даже на вашу домашнюю страницу? Другими словами, превратите 500 в запросы на вашу домашнюю страницу.

0 голосов
/ 24 ноября 2008

Программным решением будет:

  • открыть файл журнала
  • читать строки в буфере
  • заменить строки, которые соответствуют ошибкам, вызванным ботами
  • искать в начале файла
  • записать новый буфер
  • усечь файл до текущей позиции указателя
  • близко

Вуаля! Это сделано!

...