【问题标题】:Unique serial number using php/javascript使用 php/javascript 的唯一序列号
【发布时间】:2011-03-10 08:55:38
【问题描述】:

有没有办法使用 php/javascript 为 Mac、Windows 等机器和 iPhone、Blackberry 等设备获取唯一序列号?

【问题讨论】:

  • 这个SN的目的是什么? Mac、Windows等是什么意思?
  • 您的意思是机器 MAC 地址 (en.wikipedia.org/wiki/MAC_address) 还是只是随机的唯一数字,例如 GUID?
  • 另外,这是用于公共网站还是类似 Intranet 或受信任的网站?
  • 使用 javascript/php 我需要系统唯一信息来创建唯一的用户 ID。
  • @user475685 友好的建议:不要走这条路。你迟早会发现这是一条死胡同。相反,做一些明智的事情:在服务器端代码中生成用户 ID,简单的方法是生成大随机数(例如,在 1000000000-9000000000 范围内),只要该数字已经被占用,就继续生成。如果您采用这种方式,请随时使用您的新请求编辑您的问题,我们将为您提供更多选择。

标签: php javascript unique-key


【解决方案1】:

它确实需要至少一个参考数据 - javascript 无法读取 IP 地址或 MAC 地址之类的东西 - 所以这被排除在外。 PHP 有uuid 的实现——但要创建一个有效的,您需要分配一个真实的IP 地址。

如果在服务器端部署了代码,则可以直接实现基于计数器的系统。

【讨论】:

    【解决方案2】:

    什么是机器?

    机器是由零件制成的,因此确定机器是否仍然相同本身就是一个哲学问题。

    例如一台计算机的硬盘驱动器可能有一个唯一的序列号,如果该机器有一个网卡,它就有一个唯一的 MAC 地址,当运行不同的操作系统时它甚至可能被认为是“不同的机器”( Windows、Mac 等)。所有这些唯一的 ID 可以混合在一起以创建唯一的机器 ID,这正是 Mathematica 等一些软件供应商所做的,以确保您不在机器或操作系统上运行软件,您没有获得许可它为。

    使用接口标识符

    随着 IPv6 最终变得广泛可用,该协议的 接口标识符 可以用作您的机器(或至少是它的网卡)的标识符,因为它包含网卡的MAC地址。 IPv6 提供隐私扩展来防止这种识别,因为在个人计算机和移动设备时代,机器识别等于用户识别,这是一个巨大的隐私问题。 目前,Apple 和 Android 移动设备不提供隐私扩展,在 Mac 和 Linux 上默认禁用。似乎只有 Windows 7 默认启用了它们。

    在 PHP 和 javascript 中访问 IP 地址

    • 在 PHP 中,通过$_SERVER['REMOTE_ADDR'] 访问 IP 地址非常简单
    • 在 javascript 中,您可以向返回用户 IP 地址的服务器发出 JSONP 请求。

    见:Can I perform a DNS lookup (hostname to IP address) using client-side Javascript?

    在 Javascript 中访问 MAC 地址

    即使机器只有 IPv4 - 也有一个概念验证黑客 (http://samy.pl/mapxss/) 通过 javascript XSS 从某些路由器检索 MAC 地址。然后将路由器的 MAC 地址发送到谷歌地理定位服务,以识别机器的确切位置。 (当然这只是移动设备的弱标识符)

    组合标识符

    Webbrowsers 会为您提供一个用户代理字符串,它可以让您的标识符更加“独特”,然后还有 cookie、地理定位服务等。

    虽然这些技术都不能提供创建 100% 唯一标识符的方法,但其中一些技术结合起来可以提供非常高的识别准确度。即使机器的部件发生了变化,您也可以在应用一系列识别技术时重新识别它。另请注意,在使用浏览器识别等时,您可能会面临过度识别的问题,尤其是在一台机器使用多个浏览器访问您的服务时。

    询问用户

    由于潜在的隐私问题,您应该考虑使用选择加入的方法来创建唯一 ID。此外,由于是与他们的机器联系的用户,因此他们是唯一能够以100% 确定性唯一标识他们的机器的人。所以最好的办法是激励用户信任你识别他们的机器。一个简单的场景是为用户提供登录名(这样您就有了用户身份),然后要求用户帮助您进行机器识别。当然,这只有在您信任您的用户时才有效,但如果您不信任,他们可能也不应该信任您。

    【讨论】:

      【解决方案3】:

      不,没有办法做到这一点。

      这是一件好事,因为它使通过网站跟踪人们变得更加困难。

      隐私是宝贵的;)

      Martin 赶紧去删除他所有的 cookie 并戴上他的锡纸帽子

      【讨论】:

      • 这显然是个玩笑。谁说 SN 是跟踪代码?
      • 嗯,其实这不是玩笑。 Javascript 只能在它的沙箱里玩,PHP 不能访问客户端硬件信息,所以确实没有办法只用 PHP 或 javascript 来读取客户端硬件信息。
      • @fabrik:不管是不是跟踪代码,都不可能。
      • @wimvds, @Martin:你确定它是硬件标识符吗?
      • @fabrik:他要求机器/设备的唯一序列号,所以对我来说,这听起来像是一个硬件标识符。
      【解决方案4】:

      什么是机器?

      机器是由零件制成的,因此确定机器是否仍然相同本身就是一个哲学问题。

      例如,一台计算机的硬盘驱动器可能有一个唯一的序列号,如果该机器有一个网卡,它就有一个唯一的 MAC 地址,在运行不同的操作系统时它甚至可能被认为是“不同的机器”( Windows、Mac 等)。所有这些唯一 ID 可以混合在一起以创建唯一的机器 ID,这正是 Mathematica 等一些软件供应商所做的,以确保您不在机器或操作系统上运行软件,您没有获得许可它为。

      使用接口标识符

      随着 IPv6 最终变得广泛可用,协议的接口标识符可以用作您的机器(或至少它的网卡)的标识符,因为它包含网卡的 MAC 地址。 IPv6 提供隐私扩展来防止这种识别,因为在个人计算机和移动设备时代,机器识别等于用户识别,这是一个巨大的隐私问题。目前,Apple 和 Android 移动设备不提供隐私扩展,在 Mac 和 Linux 上默认禁用。似乎只有 Windows 7 默认启用了它们。

      【讨论】:

        猜你喜欢
        • 2020-03-10
        • 2013-04-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多