Django auth: как запретить сеанс пользователя, если его IP не совпадает с исходным (тем, с которого он вошел) - PullRequest
1 голос
/ 31 июля 2010

Как можно настроить или изменить аутентификацию, чтобы запретить сеансы пользователя, если IP-адрес пользователя не совпадает с IP-адресом, с которым он вошел в систему?Я действительно стараюсь максимально защитить свой сайт Django от XSS.Но я никогда не могу быть уверен, что покрыл все основы.Если худшее приходит к худшему, и кто-то может добавить XSS на мой сайт, по крайней мере, это может помешать ему захватить существующие пользовательские сессии.

Ответы [ 2 ]

3 голосов
/ 17 января 2013

Используйте следующее, чтобы убедиться, что вы получаете реальный IP-адрес посетителя, а не прокси-сервер или балансировщик нагрузки. (на случай, если ваш сервер отстает от одного)

# on login:
request.session['logged_ip'] = request.META.get('HTTP_X_FORWARDED_FOR',
                                request.META.get('HTTP_X_REAL_IP',
                                 request.META.get('REMOTE_ADDR', '1.2.3.4')))

# on each request
if (request.META.get('HTTP_X_FORWARDED_FOR',
    request.META.get('HTTP_X_REAL_IP',
    request.META.get('REMOTE_ADDR', '1.2.3.4'))) != request.session['logged_ip'])
    # don't allow
1 голос
/ 01 августа 2010

В вашем классе модели User создайте поле IP, в котором хранится IP-адрес запроса.

original_ip_address = request.META['REMOTE_ADDR']

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

if request.META['REMOTE_ADDR'] == ip_from_database: `
# Do something
else:
 #redirect to login

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

...