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

时间:2018-04-06 11:45:15

标签: javascript typescript

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

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

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

  • 浏览器:Windows,Mac,Linux

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

3 个答案:

答案 0 :(得分:2)

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

浏览器是您列出的最受限制的环境,是一个不同的故事。

简短回答,不。

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

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

您必须转向广告客户经常用来在网络上跟踪您的方法。

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

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

根据您的使用情况,它可能足够好" (这通常是广告客户使用的),但如果您将其用于任何类型的自动访问安全性,不要这样做。它永远不会足够安全。如果你想做这样的事情,至少要把它与cookie和/或会话特定值混合起来,以降低风险。

答案 1 :(得分:2)

有一个 NPM 包可以解决这个问题 https://www.npmjs.com/package/device-uuid

注意:这将在不同浏览器中提供几乎 90%-100% 的 uuid。

答案 2 :(得分:0)

从技术上讲,无法从浏览器获取设备唯一的ID。

但是,有一种解决方法。您可以使用JavaScript生成一个长ID,该ID在统计上被保证是唯一的,例如GUID(128位整数)。然后,可以再次使用JavaScript将这个值存储在浏览器的localStorage(或cookie)中。

用户下次打开此页面时,可以检查是否在浏览器的localStorage中找到了唯一ID。如果找到,就知道这是哪台设备。

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

这些解决方案中的任何一个都不能保证起作用。例如,如果浏览器处于私有模式,则localStorage中的数据将不会保留。