我需要确保每个访问我的Web应用程序的用户只能从一台计算机上执行此操作,因此100个用户意味着100台机器。最好的解决方案是什么?在第一次登录期间检测和存储IP是否好主意?我认为即使在会议的一生中,IP可能会改变吗?我还考虑在用户首次登录时存储cookie。然后将这些cookie分配给用户,就像我已经使用密码和用户名一样,并且每次访问应用程序检查是否存在该cookie的存在时。

请让我知道您认为最好的解决方案。如果这很重要,我的后端是PHP/MySQL。

编辑:我需要澄清...这是正常会话管理的补充。我需要限制用户只能从一台特定的计算机登录到Web应用程序。因此,如果用户最初在工作中从他的计算机登录,并且我存储了其IP/cookie/etc。,那么客户端会注销(甚至没有),然后回家并试图登录将无法做到这一点。我同意它可怕的想法,但客户坚持:)

有帮助吗?

解决方案

在移动客户端或有线网络和无线网络之间切换的客户端的情况下,IP地址可能会发生变化。最好的选择可能是在第一次连接时为每个客户端提供一个随机生成的UID(如果尚未拥有cookie)。然后,您可以检查相同的用户名是否使用两个不同的UID连接。

诀窍是您需要确保将此UID计时,以便如果用户进入另一台计算机,则不会被锁定。也许对UID的更改是可以的,但是他们不能回到已经使用的UID?

其他提示

您可以通过使用keygen元素创建的客户端SSL证书发出客户端来限制单个用户,这会使浏览器生成密钥对,将私钥保留在用户代理中,然后您会收到SPKAC,您会收到一个SPKAC可以用来openssl创建证书,然后您将其发送回用户代理,它可以安装它,并且可以使用该证书来识别该特定浏览器中的用户,仅通过HTTP+TLS从那时开始。

其他任何东西,根本不会100% - 尽管您可以破解似乎有效的方法(直到出现问题并且它不起作用):)

不幸的是,由于多种原因,IP不是机器特定的:

  1. 会议期间的IP地址可能会更改,没有通知(用户甚至可能不知道)
  2. 大多数用户具有动态IP,因此肯定会在某个时候改变
  3. 对于笔记本电脑,平板电脑或手机等机器,IP地址基于当前的服务提供商
  4. 代理背后的所有用户都将作为单个IP出现在您身上,因此您仍然无法检测到他们是否从一台计算机移到另一台计算机

取而代之的是,为会话生成某种唯一键,并将其与用户名结合使用。如果同一用户名已经在另一个活动会话中,则防止它们登录。 (如果您丢失会话结尾事件,您还需要某种方法来自动冲洗这些。)

最好的解决方案已经在Web服务器中内置,具体取决于您正在使用的服务器。那就是 会议 是给。在asp.net/iis中,通常每个会话超时有20分钟。

因此,如果用户使用另一台计算机访问您的WebApplication,则会会话超时将从闲置的计算机发布连接。

更新

您可能需要考虑通过其机器的MAC地址限制用户,而这些用户是唯一的。

如果这是一个非常内部的应用程序,仅在公司内部使用,则可以定义IP范围,因为在全球范围内不运营的较小公司可能会从其Internet访问提供商中拥有一定数量的IP。

您还可以考虑使用$ _server的一些信息将用户限制为单个Web浏览器(HTTP_USER_AGENT)和单个端口(远程_PORT)的梳理 - 作为区分机器的另一种方法。

但是所有这些解决方案都是不好或更糟的,从技术上讲可能无法解决此问题(除非您可以从客户那里保证所有机器都会保留静态IP,在这种情况下,如果其他问题是微不足道的)。

不要那样做。许多人将从多台计算机访问您的网站,如果您阻止它们,他们会抱怨。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top