Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 阻止用户使用其他计算机或设备登录_Php_Security - Fatal编程技术网

Php 阻止用户使用其他计算机或设备登录

Php 阻止用户使用其他计算机或设备登录,php,security,Php,Security,我试图解决这个问题已经有一段时间了 我已经构建了一个应用程序,它正在我们客户机的服务器上运行。客户端必须为每个用户购买使用系统的许可证。因此,每个用户在其计算机上都有一个链接,以便仅使用该计算机访问应用程序。对于每台计算机,必须为每个用户注册并存储在数据库中 因此,我必须限制用户使用其他计算机/设备访问应用程序。我的问题是如何使用php(或任何其他语言)从每台计算机捕获唯一的信息,以便在用户每次尝试登录时检查这些信息。我知道你只能用php获取浏览器信息。因此,我在寻找一些能指引我正确方向的想法

我试图解决这个问题已经有一段时间了

我已经构建了一个应用程序,它正在我们客户机的服务器上运行。客户端必须为每个用户购买使用系统的许可证。因此,每个用户在其计算机上都有一个链接,以便仅使用该计算机访问应用程序。对于每台计算机,必须为每个用户注册并存储在数据库中

因此,我必须限制用户使用其他计算机/设备访问应用程序。我的问题是如何使用php(或任何其他语言)从每台计算机捕获唯一的信息,以便在用户每次尝试登录时检查这些信息。我知道你只能用php获取浏览器信息。因此,我在寻找一些能指引我正确方向的想法


我尝试的是在每台电脑中存储唯一的cookie,并将它们注册到数据库中。但问题是,我们总是遇到这样一个问题:一些用户清除了他们的cookie,因此无法访问该应用程序。

我认为您不能仅使用PHP来归档该应用程序。PHP在服务器上运行,您可以从服务器上检索的唯一客户机信息是IP,但它不起作用,因为它可以是动态的,如果所有用户都在同一个LAN中,那么它对所有用户都是相同的

想法是使用在客户端运行的东西,然后javascript作为一个好主意出现,但它有一个问题:用户可以看到它,他可以看到它如何检查或检索信息,因此操纵它的行为非常容易。即使您要从javascript检索用户的MAC,它也不会工作,因为MAC可以更改

我认为您应该安装一些类型的EXE(例如C、C++、C、java),以确保它们不能从任何其他计算机或设备中登录。当然,在用户使用web应用程序之前,应该安装并通知用户


另一方面,你为什么要做一个只能在1台电脑上运行的web应用程序?我的意思是,web应用程序的一大优点是,它们几乎可以在任何PC/设备上使用

我认为您不能仅使用PHP来构建此文档。PHP在服务器上运行,您可以从服务器上检索的唯一客户机信息是IP,但它不起作用,因为它可以是动态的,如果所有用户都在同一个LAN中,那么它对所有用户都是相同的

想法是使用在客户端运行的东西,然后javascript作为一个好主意出现,但它有一个问题:用户可以看到它,他可以看到它如何检查或检索信息,因此操纵它的行为非常容易。即使您要从javascript检索用户的MAC,它也不会工作,因为MAC可以更改

我认为您应该安装一些类型的EXE(例如C、C++、C、java),以确保它们不能从任何其他计算机或设备中登录。当然,在用户使用web应用程序之前,应该安装并通知用户


另一方面,你为什么要做一个只能在1台电脑上运行的web应用程序?我的意思是,web应用程序的一大优点是,它们几乎可以在任何PC/设备上使用

将用户链接到计算机不是一个好主意。为什么要先创建一个web应用程序的独立性和灵活性(假设它是一个web应用程序,因为它是PHP,或者您实际上有命令行用户吗?),然后将它限制在单个设备上,这些设备可能会损坏、被盗。。。也许该公司没有为每个用户提供固定的工作点,但它为更多的兼职员工使用的计算机数量较少,因此每个用户每天可能使用不同的计算机

如果你真的想要这样的限制,你最好限制每个用户的会话数。也就是说:将会话ID和这些会话的用户名记录在一个表中。在每个请求中,更新表以存储请求日期时间,以便检查过期会话。使用MySQL,您可以创建一个存储类型为
MEMORY
的表,这对于会话信息来说非常快速和有用。重新启动数据库服务器时,数据将消失,但这通常不是此类信息的问题

现在,有可能继续:

  • 如果用户再次在另一台电脑或浏览器上登录,它将收到一个新的会话id。在这种情况下,在登录过程中,您可以查看会话表,查看该用户是否打开了另一个会话id。如果是,请阻止登录

    如果会话超时,例如,当会话超过15分钟时,您可以允许登录并删除旧会话

    缺点是,如果浏览器或PC崩溃,用户必须等待超时时间,然后才能继续在其他地点工作。这在任何工作环境中都可能是不可接受的

  • 更好的解决方案可能是:用户只能有一个“活动”会话。如果用户从另一个工作点登录,他们将自动获得一个新会话。如果发生这种情况,您可以只接受新会话并删除旧会话id。如果他们继续使用旧会话,您可以看到该会话不再在会话表中,需要他们再次登录

    使用该解决方案,用户将能够在工作区之间快速切换,而无需等待,但如果两个用户同时使用相同的用户名,他们将不得不在几乎每个请求上重新登录

  • 但我真的会再三考虑:你到底为什么想要那个限制?如果一家公司愿意让更多的用户使用该软件,他们也愿意修改PHP代码来删除该检查,这将是微不足道的


    此外,如果你让你的软件太烦人,他们可能会决定根本不使用它,并寻找替代方案。我认为最好信任你的客户。

    将用户链接到计算机不是一个好主意。你为什么要先创造