检测“唯一”的匿名用户

51

由于欺骗相当容易,因此无法将用户或请求识别为“唯一”。

然而,有几种方法可以结合使用,以阻止作弊尝试并给用户准唯一的状态。

我知道以下方法:

  1. IP地址-将每个访问者的IP地址存储在某种数据库中
    • 可以被伪造
    • 多台计算机/用户可以拥有相同的地址
    • 具有动态IP地址的用户(某些ISP会发放)
  2. Cookie跟踪-为每个访问者存储一个cookie。没有该cookie的访问者被认为是“唯一”的
    • 可以被伪造
    • Cookie可以通过浏览器进行阻止或清除

是否还有其他方法来跟踪未经授权(非登录、非身份验证)的网站访问者?


伪造IP地址并不是问题,因为它们不会收到响应,因此无法浏览您的网页。 - jgauffin
4个回答

65

实际上,有很多方法可以检测“唯一”的用户。我们的市场营销朋友使用了许多这些方法。如果启用了插件(如Java、Flash等),检测就更容易了。

目前我最喜欢的基于cookie的跟踪方法是evercookie (http://samy.pl/evercookie/)。它通过多个存储机制创建一个“永久”cookie,平均用户无法清除,具体使用以下机制:

  • 标准HTTP Cookie
  • 本地共享对象(Flash Cookie)
  • Silverlight孤立存储
  • 使用HTML5 Canvas标签将cookie存储在自动生成的强制缓存PNG文件的RGB值中,并读取像素(即cookies)。
  • 在Web历史记录中存储cookie
  • 在HTTP ETags中存储cookie
  • 在Web缓存中存储cookie
  • window.name缓存
  • Internet Explorer userData存储
  • HTML5会话存储
  • HTML5本地存储
  • HTML5全局存储
  • 通过SQLite使用HTML5数据库存储

我记不得URL了,但也有一个网站会根据从您的Web浏览器中获取的所有信息来告诉您有多“匿名”:您加载了哪些插件、版本、语言、屏幕大小等等。然后,您可以利用我之前提到的插件(Flash、Java等)来进一步了解用户的情况。如果我找到了显示“你有多独特”的页面,我会编辑这篇文章,或者也许有人知道。»»实际上,每个用户看起来都是独一无二的!

--编辑--

找到了我说的那个页面:Panopticlick - “你的浏览器有多独特和可追踪”

它收集的信息包括用户代理、HTTP_ACCEPT标头、浏览器插件、时区、屏幕尺寸和深度、系统字体(通过Java?)、Cookies等。

我的结果:迄今为止,在已测试的 1,221,154 个浏览器指纹中,您的浏览器指纹似乎是独一无二的。


3
我赞同这个观点,但世上已经有足够多的邪恶行为了,我们不应该滥用他人的电脑。 - annakata
5
你说得没错,但了解你所面对的情况总是有好处的,这样你就可以保护自己。 - Dennis G
普通用户无法清除缓存?我只需要在Chrome中打开一个隐身窗口就可以了 :P - Chris Bolton
隐身模式不是普通用户使用的功能。其次,你拿Chrome这样的好浏览器作为例子,想想IE。此外,这个答案是2010年10月的,现在的浏览器在处理Flash本地存储等方面已经变得更加出色了。 - Dennis G
我访问了evercookie的链接并下载了zip文件。扫描后,发现zip文件中嵌入了两个病毒。只是觉得有人可能想知道。 - user2789697
显示剩余4条评论

9
Panopticlick 有一种非常精细的指纹识别方法,用于检查唯一用户。除了 IP 地址和用户代理之外,它还使用诸如时区、屏幕分辨率、系统中安装的字体和浏览器中安装的插件等内容,因此为每个用户生成一个非常独特的 ID,而无需在他们的计算机上存储任何东西。假阴性(找到具有完全相同指纹的两个不同用户)非常罕见。
这种方法的问题是,如果用户例如安装了新字体,它可能会产生一些误报,即将同一用户视为新用户。我想这是否可以接受取决于您的应用。

你知道Panopticlick的源代码是否可用吗? - Omar
1
是的,它全部(或至少大部分)在浏览器中运行,所以只需访问该网站并单击“测试我”,然后查看源代码并阅读JavaScript。此文件似乎包含了大部分较难检测的内容:https://panopticlick.eff.org/resources/fetch_whorls.js - Jakob

3
是的,无法百分之百确定匿名访客的身份。你能做的最好就是收集你所拥有的信息,并尽可能地区分访客。
还有一种可用的信息:
1. 浏览器字符串 - 它不是唯一的,但与其他信息相结合可以提高解析度。
如果需要百分之百确定访问者的身份,则需要让他们登录。

3
在我看来,没有一种确切的方法可以实现这个目标。在你所提供的选项中,使用Cookies最有可能产生一个相当真实的数字。NAT和代理服务器可以掩盖大量用户的IP地址,动态IP地址分配将混淆许多其他用户的结果。
你有考虑过使用Google Analytics或类似服务吗?它们作为其服务的一部分进行唯一访问者跟踪,并且他们可能拥有更多的资金投入到找到此问题启发式解决方案中,比你或我要多得多。只是一个想法!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接