在这种情况下唯一标识用户的最佳方法?

问题描述 投票:0回答:3

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

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

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

javascript iframe fingerprinting
3个回答
1
投票

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

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


0
投票

我不能 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。


0
投票

@tripRev 你曾经让它工作过吗?我正在研究类似的东西,但在不同的域和 iframe 窗口中准确性较低。

© www.soinside.com 2019 - 2024. All rights reserved.