Pull to refresh

Слежка за пользователями в Django

Reading time2 min
Views8K
Здравствуй %username%

Начну с того, что у меня есть некий Django портал, на котором пользователям начисляются определенные бонусы за приглашение новых пользователй. Такая себе системе рефералов. Но бонус начисляется только в том случая, если приглашенный пользователь проявляет активность. Сегодня у меня возникло подозрение, что один из моих юзеров завел виртуалов. Попробуем уличить его в этом…

У меня в каждом проекте есть апликуха core, где я держу всякие полезные утилиты. В этой апликухе создадим файл middleware.py.

import logging
import logging.handlers

bytes=1024000
count=10
formatter = logging.Formatter("%(asctime)s-%(message)s")

MODELS_FILE = '/home/ramovsky/users.log'
logmodels = logging.getLogger('users')
logmodels.setLevel(logging.DEBUG)
handler = logging.handlers.RotatingFileHandler(MODELS_FILE, maxBytes=bytes, backupCount=count)
handler.setFormatter(formatter)
logmodels.addHandler(handler)

class TrackUsersMiddleware(object):
    def process_request(self, request):
        ip = request.META.get('REMOTE_ADDR', '') or request.META.get('HTTP_X_FORWARDED_FOR', '')
        logmodels.debug('%s %s %s'%(request.user, request.path, ip))

Добавим миддлвер в settings.py

MIDDLEWARE_CLASSES = (
    #----- cut -----
    'core.middleware.TrackUsersMiddleware',
)

И нужно не забыть добавить генерацию заголовка 'HTTP_X_FORWARDED_FOR' в /etc/nginx/nginx.conf
location / {
#---- cut -----
fastcgi_param REMOTE_ADDR $remote_addr;
}

Перезапускаем Django и Nginx. Смотрим лог grep -E 'AnonymousUser|User1|User2' users.log, анализируем.

В общем в зависимости от того насколько пользователь знаком с интернет технологиями и от размера бонуса, возможно несколько вариантов событий:

Нуб будет делать все руками с текущего IP. Такого человека отследить легко по записям типа
2011-04-20 14:00:03,123-AnonymousUser /accounts/login/ 80.91.173.10
2011-04-20 14:00:22,967-User1 Куча активности
2011-04-20 14:00:22,967-User1 /logout/ 80.91.173.10
2011-04-20 14:01:03,123-AnonymousUser /accounts/login/ 80.91.173.10
2011-04-20 14:01:22,967-User2 Куча активности
2011-04-20 14:01:22,967-User2 /logout/ 80.91.173.10

Все действия совершаются с одного IP и от имени разных пользователей поочередно.

Продвинутый пользователь будет пытаться скрытся используя динамический IP или прокси.
2011-04-20 14:00:03,123-AnonymousUser /accounts/login/ 18.11.173.10
2011-04-20 14:00:22,967-User1 Куча активности
2011-04-20 14:00:22,967-User1 /logout/ 18.11.173.10
2011-04-20 14:01:03,123-AnonymousUser /accounts/login/ 34.91.173.10
2011-04-20 14:01:22,967-User2 Куча активности
2011-04-20 14:01:22,967-User2 /logout/ 34.91.173.10

IP разные, но действия псевдо пользователй строго поочередные.

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

А вообще я всем желаю хорошых и честных юзеров. Ведь преджде всего ради них мы и пишем наши порталы.
Tags:
Hubs:
+2
Comments16

Articles