【问题标题】:Best way to uniquely identify a user in this case?在这种情况下唯一标识用户的最佳方法是什么?
【发布时间】:2016-02-04 10:18:54
【问题描述】:

我将在一个 iframe 中的网站上运行代码,该 iframe 可能是跨域的,也可能不是跨域的,并且可能在多个 iframe 中重复。我可能在顶部窗口中运行了代码,我可能没有。我希望我的 JS 生成一个唯一标识符,如果它是由我的代码在该页面上的任何 iframe、多个 iframe、嵌套在 iframe 中的 iframe 或顶部窗口中的代码生成的,在该负载的生命周期内,该标识符将是相同的仅限主页。

它应该在当时为该用户加载的网页的任何窗口上下文中运行时生成相同的标识符。因此,如果删除了一个 iframe,添加的另一个 iframe 应该会生成相同的 id。

为此使用的最佳信息是什么?它本质上是一个“会话”ID,但需要在浏览器中生成,并且对于生成它的任何子 iframe 都是相同的。感谢任何可以提供帮助的人!

【问题讨论】:

    标签: javascript iframe fingerprinting


    【解决方案1】:

    经过一番阅读,似乎制作浏览器指纹将是解决方案。这些 github 项目很有帮助:

    我可能会使用其中之一,或者获得一些想法来实现我自己的简化解决方案。

    【讨论】:

      【解决方案2】:

      我不能 100% 确定这是否能回答您的问题,但我生成随机字符串的首选方法部分受到 MongoDB 生成唯一对象 ID 的方式的启发:

      var uniqueString = Date.now().getTime() + Math.random();
      

      除非您有成千上万的用户都在完全相同的毫秒内运行此代码,否则您应该得到一个随机字符串。

      编辑

      问题在顶部窗口中提到了正在运行的代码。有了这个,有多种解决方案可以工作:

      • 使用PostMessage API 向页面上的所有 iframe 发送相同的随机 id
      • 使用随机 id 作为查询字符串部署 iframe(例如http://www.example.com/mypage?id=123

      但是,如果您无法在顶部窗口中执行代码,则必须在服务器端执行操作。在这里我不太确定我会怎么做,因为我不确定你在后端使用什么,但在 Node.js 中你可以检查 req 对象。它将包含诸如用户的 IP 地址、他们的用户代理字符串、请求的日期等内容。连接 IP 地址、用户代理字符串,也许还有引用页面(即您的用户正在查看的加载 iframe 的页面)应该给出给定用户给定页面上所有框架的唯一 ID。

      【讨论】:

      • 谢谢,但这不合适。每次我的代码在网页实例上运行时,无论是否在 iframe/多帧中,我都需要它是相同的。即使我只是使用时间戳,每个 iframe 的加载时间也会有所不同。然后随机数会使每个人再次不同。我会更新问题以使其更清楚,但感谢您的尝试!
      • 所以如果我去 www.example.com 并得到随机字符串“1”,之后每次我去那里,我总是会得到随机字符串“1”,而 Bob 会有“2”和查理将有“3”?
      • 没错!但是,如果代码在 www.example.com 上的 iframe1 和 iframe2 中运行,它们都应该为 Bob 加载该网页的整个生命周期生成相同的 id。 Charlie 将在主页和所有这些 iframe 上获得不同的 id,但如果有人关闭页面并重新开始,他们将分别获得一个新的。有意义吗?
      • 是的,这是一个有趣的问题。我会考虑更多,也许我能想出更好的东西。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-04
      • 1970-01-01
      • 1970-01-01
      • 2010-10-29
      相关资源
      最近更新 更多