Django auth:如果他的 IP 与原始 IP 不匹配(他登录的那个),如何禁止用户会话

Posted

技术标签:

【中文标题】Django auth:如果他的 IP 与原始 IP 不匹配(他登录的那个),如何禁止用户会话【英文标题】:Django auth: How to disallow user session if his IP doesn't match the original one(the one he logged in with) 【发布时间】:2010-07-31 18:35:51 【问题描述】:

如果用户的 IP 与他登录时使用的 IP 不同,如何配置或修改身份验证以禁止用户会话? 我真的尽我所能保护我的 Django 站点免受 XSS 攻击。但我永远不能确定我涵盖了所有的基础。如果最坏的情况发生并且有人能够在我的网站中放置一些 XSS,至少这可以防止他劫持现有的用户会话..

【问题讨论】:

我看不出这可以如何防止 XSS,但我可以看到这将如何防止用户通过动态 IP 或笔记本电脑使用您的网站。 【参考方案1】:

使用以下内容只是为了确保您获得的是访问者的真实 IP 地址,而不是代理或负载平衡器的 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

【讨论】:

【参考方案2】:

在您的 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

您可以使上述函数始终在视图中的其他任何内容之前被调用。

【讨论】:

确保在每次成功登录尝试时更新 ip 或在注销后将其删除,否则他们可能无法返回。

以上是关于Django auth:如果他的 IP 与原始 IP 不匹配(他登录的那个),如何禁止用户会话的主要内容,如果未能解决你的问题,请参考以下文章

Django - 原始 SQL 查询或 Django QuerySet ORM

Django 向 auth_view 添加消息

167.权限-添加权限的两种方式

Django空字段回退

Django CSRF与auth模块

当他从所有浏览器(Django-rest-auth,JWT)更改密码时如何注销用户?