如何从Web浏览器获取唯一的PC ID

6
我有一个Web应用程序将在多台特定目标机器上运行。我可以让用户在登录时选择他所在的机器,但这容易出错。是否有一种方法可以从每台PC获取某些唯一ID,将它们存储在我的服务器上的数据库中,然后当某人从特定机器登录时,识别该机器?我想到了IP地址,但由于我们部署的性质,这些可能也会改变。但是,我知道系统正在哪台机器上运行非常重要。
注意:我不想确定Web用户机器的机器代码,因为那将侵犯隐私。我认识我的机器,所以我想以某种方式将它们与数据库绑定。这也作为我的安全措施,因为我可以拒绝来自未知机器的登录。
感谢任何想法。我正在使用带有Code Igniter 3和Centos 6.5的Apache。

这里讨论的不是特定于PHP的内容,而是一般性的方法。请参考此处链接:http://stackoverflow.com/a/23374664/782094 - PCoder
5个回答

5

如果没有客户端组件、浏览器插件或类似的东西,这是不可能实现的。最接近的替代方案是:

  • 使用 cookies;
  • 使用客户端证书;
  • 使用浏览器指纹技术。

每种方法都有其自身的缺点。


3
您可以将此作为计算机ID使用:
$computerId = $_SERVER['HTTP_USER_AGENT'].$_SERVER['LOCAL_ADDR'].$_SERVER['LOCAL_PORT'].$_SERVER['REMOTE_ADDR'];

这并非完全可靠,因为$_SERVER的值可能被伪造,但它仍将增加一层不依赖于cookie的安全性。


2
你回答中与客户端相关的唯一两个值是HTTP_USER_AGENTREMOTE_ADDR。对于内部部署,仅使用远程地址作为标识符只有在所有机器都具有固定IP地址时才有意义。对于外部部署,可能会有成千上万台机器使用相同的公共IP地址。至于用户代理,不仅易于欺骗,而且企业部署通常要求用户在特定操作系统上使用特定浏览器,从而使所有用户代理字符串相同。即使不是这种情况,将其用作标识符也是一个坏主意。 - Robby Cornelissen
正如我所说,这并不是完全可靠的。有什么建议可以改进我的答案,而不依赖于cookies吗? - Dan Bray
我认为可用的选项已列在我的答案中。目前我不知道其他方法... - Robby Cornelissen

1
第一次访问您的网站时,通过IP地址识别用户的计算机。然后设置一个具有您选择的唯一标识符的持久性cookie。
下次他们访问该网站时,您可以通过先前设置的唯一标识符cookie来识别他们。

直到他们清除cookies,否则这个方法不起作用。我不想跟踪所有用户,我只想知道我的哪些特定机器是连接的。 - Doug Wolfgram

0

我会选择以下其中一种方式:

使用类似于 bin2hex(openssl_random_pseudo_bytes(512)) 的值作为cookie并对cookie进行检查。

或者

使用基于IP的记录,例如(127.0.0.1)已输入“hello”等信息。

或者

使用MAC地址(有相应的php库)。


0

2
你所提到的类别具有完全不同的目的。当前的浏览器不会在HTTP请求中发送网络接口的MAC地址。 - Robby Cornelissen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接