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 不匹配(他登录的那个),如何禁止用户会话的主要内容,如果未能解决你的问题,请参考以下文章