如何在javascript中获得唯一的设备ID?

Lor*_* A. 10 javascript typescript

我正在大学从事我的学士项目,我正在开发一个需要唯一设备 ID 的应用程序。我正在使用 javascript 并且应用程序(在下载应用程序或进入网页时可以访问)将在以下执行平台上运行:

  • 手机和平板电脑:Android、iOS、Windows Phone、Firefox OS、Tizen

  • 智能电视:Android、Tizen OS、Web OS

  • 浏览器:Windows、Mac、Linux

我的问题是:是否有可能获得物理设备的标识符,例如 MAC 地址,但它永远不会改变(因为用户可以随时更改 MAC),或者至少对于某些上面提到的执行平台?

Rob*_*t D 14

在现代浏览器中,您可以创建如下所示的函数来完成这项工作。机器 ID 对于浏览器/机器组合来说是唯一的。

function getMachineId() {
    
    let machineId = localStorage.getItem('MachineId');
    
    if (!machineId) {
        machineId = crypto.randomUUID();
        localStorage.setItem('MachineId', machineId);
    }

    return machineId;
}
Run Code Online (Sandbox Code Playgroud)


sam*_*ime 10

如果作为应用程序安装在移动设备或智能电视上,您可能有足够的访问权限来获得一些独特的东西。我不一定会选择 Mac 地址,但不同的设备会有不同的唯一标识符,您可以获取(即使只是一个电话号码对于手机来说也是一个不错的选择)。

浏览器是您列出的最受限制的环境,但情况不同。

简短的回答,没有。

更长的答案,不,但有点。

无法从客户端获取任何类型的真正唯一且不可更改的标识符。这意味着没有 MAC 地址、序列号、IMSI 或任何其他内容。

您必须采用一种广告商经常使用的方法来在整个网络上跟踪您。

基本上,您可以获取可以访问的有关用户的所有信息。这些内容可能包括用户代理字符串、IP 地址、操作系统等。基本上,通过 HTTP 请求和/或通过 JavaScript 客户端发送的内容。通过将这些值组合在一起,您可以创建一些相当独特的指纹,尽管不能保证并且会因用户访问它的物理环境而有很大差异。

例如,如果我在家里使用我的电脑,而且我一个人,而且我有一个固定的 IP 地址,那么单独获取我的 IP 地址可能只指向我。如果我在大学图书馆或办公室环境中,并且几乎所有其他计算机都使用相同的外部 IP(很多时候很常见),并且所有这些都大致相同数量的最新,那么即使您将一堆不同的数据点混合在一起,很多人也会以同一用户的身份出现。

根据您的用例,它可能“足够好”(这通常是广告商所采用的),但如果您将其用于任何类型的自动访问安全性,请不要这样做。它永远不会足够安全。如果您想做类似的事情,至少将其与 cookie 和/或会话特定值混合以降低风险。

  • 老哥说得很好。我对用户代理信息以及IP地址等也有同样的想法。公平地说,这实际上是一个相当尴尬的开发,我的意思是即使是大公司也没有掌握这一点,即**Facebook**,**Google **等。我发现,当我从同一设备、同一帐户登录时,有时我会收到警告,称某些外国设备已登录我的帐户,而实际上,这只是由于动态 IP 和可能是不同的浏览器。 (5认同)

Lea*_*der 6

It is not technically possible to obtain an ID unique to the device, from a browser.

However there is a way to work around this. You can use JavaScript to generate a long ID, which is statistically guaranteed to be unique, such as a GUID (a 128 bit integer). This value can then be stored in the browsers localStorage (or in a cookie), again using JavaScript.

The next time the users opens this page, you can check if a unique ID is found in the browsers localStorage. If found, you known which device this is.

您还可以使用其他信息来帮助识别设备,例如 IP 地址、设备的屏幕尺寸和其他可通过 JavaScript 读取的设置。

这些解决方案都不能保证有效。例如,如果浏览器处于私有模式,则 localStorage 中的数据将不会持久化。