在这种情况下唯一识别用户的最佳方法是什么?

时间:2016-01-30 19:11:59

标签: javascript iframe fingerprinting

我将在iframe中的网站上运行代码,该代码可能是也可能不是跨域的,并且可能在多个iframe中重复。我可能在顶部窗口运行代码,我可能不会。我希望我的JS能够生成一个唯一的标识符,如果它是由我的代码在该页面上的任何iframe中生成,在多个iframe中嵌套,iframe嵌套在iframe中,或者在顶部窗口中,生成仅主页面。

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

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

2 个答案:

答案 0 :(得分:0)

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

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

除非您有成千上万的用户在完全相同的毫秒内运行此代码,否则您应该可以保证随机字符串。

修改

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

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

但是,如果您无法在顶部窗口中执行代码,则必须在服务器端执行操作。在这里,我不太确定我是如何做到的,因为我不确定你在后端使用了什么,但是在Node.js中你可以查看{ {1}}对象。它将包含诸如用户的IP地址,其用户字符串,请求日期等内容。连接IP地址,用户字符串,以及可能是引用页面(即用户正在查看的加载了该页面的页面) iframes)应为给定用户的给定页面上的所有帧提供唯一ID。

答案 1 :(得分:0)

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

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