Php 阻止用户与多个IP共享帐户';s

Php 阻止用户与多个IP共享帐户';s,php,security,authentication,Php,Security,Authentication,有谁能告诉我如何将一个用户在一个会员区可以拥有的唯一IP数量限制在5-6个左右。在我帮助管理的网站上,似乎有很多用户与数十到数百人共享他们的用户名。或者有人能解释一下我如何针对这种情况实施某种安全措施吗?IP阻塞不是解决办法 考虑同一公司防火墙内的一群用户。当他们浏览网络时,由于代理服务器的原因,所有人似乎都有相同的IP地址。代理服务器负责确保将请求/响应发送给正确的人 所以,这是行不通的 你可以做的是将登录绑定到会话,并取消以前的会话。基本上: 登录请求进入 服务器为该请求分配会话id,将其本

有谁能告诉我如何将一个用户在一个会员区可以拥有的唯一IP数量限制在5-6个左右。在我帮助管理的网站上,似乎有很多用户与数十到数百人共享他们的用户名。或者有人能解释一下我如何针对这种情况实施某种安全措施吗?

IP阻塞不是解决办法

考虑同一公司防火墙内的一群用户。当他们浏览网络时,由于代理服务器的原因,所有人似乎都有相同的IP地址。代理服务器负责确保将请求/响应发送给正确的人

所以,这是行不通的

你可以做的是将登录绑定到会话,并取消以前的会话。基本上:

  • 登录请求进入
  • 服务器为该请求分配会话id,将其本地存储在该用户表中,并将其发送回cookie
  • 在随后的每个请求中,都会验证会话id,以查看它是否仍然与用户关联。如果没有,请将他们踢出登录页面
  • 用户Bob将登录并获得会话ID 10。鲍勃开始浏览你的网站,一切正常

    然后Sue登录(使用Bob的凭据)。这会将会话ID 22分配给bob帐户。她开始浏览这个网站

    Bob发出的下一个请求get的重新验证。。服务器发现会话10不再与Bob关联。Boom:踢到登录屏幕

    鲍勃一边挠头一边重新登录。这将分配一个新ID:30。Sue的下一个请求将她踢到登录页面。欢闹随之而来

    只是为了好玩,如果在一定时间内(比如2分钟)将几个会话ID分配给同一个帐户,则会向文件中的电子邮件地址发送一条消息,说明他们的帐户可能已被黑客攻击。甚至可能在要求他们通过单击电子邮件中的链接再次确认帐户是否良好时关闭帐户。让他们马上更改密码

    将会发生两件事。首先,许多用户会抱怨(有些人并不感到羞耻)。。一定要有一个好的,但坚定的,关于你是如何保护他们与这个花哨的新的安全功能的回应。不要在这件事上让步

    第二件事是,所有这些匿名用户都将拥有自己的帐户(或者离开)。原因是仅仅因为他们共享了密码就被赶出网站不是一件好事。如果我理解正确的话,这就是我想要的行为



    有趣的是,这与一些公司(如GoToMeeting)的工作原理类似。如果用户帐户当前正在主持会议,然后该帐户登录到其他地方,则原始会议将终止。非常有效。

    我要做的是创建一个数据库表,其中存储了用户ID、使用的IP地址和看到IP的日期。大概是这样的:

    Table IP
    
    Id    UserId    IP       Date
    -------------------------------
    0    42       192.168.1.3   2-21-12:01:32:00
    
    然后在php中计算当前用户拥有多少IP。如果超过5,则阻止用户


    尽管如此,在阅读刚刚发布的一些答案后,我还是同意克里斯·莱弗利的回答,因为这是一个更好的解决方案。

    人类问题没有技术解决方案。人工智能无法与人类的愚蠢相提并论。最后一个内容,如果省略了Saracsm,应该是这样的:你无法区分5个人,每个人的IP地址与1个人的IP地址不同,但是与5个IP地址不同。在智能手机时代,每天20个不同的IP并不少见。你需要实现你真正想要的行为,这与多个IP无关。要扩展@DavidSchwartz的评论,你需要确定人们共享帐户的原因,并为此制定解决方案。像限制IP这样的被动预防措施因没有按您希望的方式工作而享有良好声誉。这正是我要建议的。您必须将会话ID绑定到他们的登录帐户。为了避免每次都要检查数据库,您只需在有人登录时检查上次登录的会话文件是否仍然存在,如果仍然存在,则将其删除(假设您仅将会话用于基本内容,并且删除以强制重新登录是安全的)。此想法可以进一步扩展,以允许同时进行多个会话。如果您维护一个单独的与帐户ID相关的会话ID表,您可以检查强加的限制。如果有这么多会话处于活动状态,请删除最旧的会话,以便为最新的会话让路。为了增加乐趣,删除一个随机的,而不是最旧的。这会让用户保持警觉,不知道下一个谁会被踢。