如何识别来自不同浏览器的用户

Pav*_*kov 2 javascript php cookies symfony

我有一个任务来创建一个民意调查。这项民意调查背后的想法是在网站上可见,但没有用户。您无需登录用户即可回答投票。然而,我需要的是让它在投票一次后不能投票两次。这不是很难,也是我在新闻网站上经常看到的。

对此的一般解决方案是 cookie。您将信息存储在 cookie 中,如果他们提交了答案,则您将该信息存储在 cookie 中,这样您就没事了。

但是,我想做一些更好的事情 - 我想做到这一点,如果您打开 Chrome 并投票,然后打开 Mozilla,您将无法再次投票。

想到的第一件事是使用 IP,但是……如果您在一个连接上有多台计算机怎么办?像在大写字楼里?

这意味着无论他的互联网连接如何,我都需要一台特定计算机独有的东西。

我想到的是使用特定且唯一的东西来为 cookie 生成 ID。这意味着通过使用独特的东西,我将生成一个 ID,它对于特定的计算机总是相同的,无论浏览器和连接如何。您可以删除 cookie,然后当我创建新的 cookie 时,它​​将使用相同的 ID 创建,我将能够识别出使用该计算机的人已经为投票投票。

我的问题是 - 我可以通过浏览器访问的计算机的独特之处是什么?我将 PHP 与 Symfony 和 javascript 用于前端。

我将再次总结我想要实现的目标——某种方式让我无需登录即可识别用户(计算机),即使该用户删除了所有 cookie 并切换浏览器或处于不同的连接状态。他可以使用 VPN 或从一个国家移动到另一个国家并切换互联网提供商或任何类似的东西……只要他在同一台计算机上并且该计算机没有收到制动更改(修复、升级等)我需要认出它。

Kay*_*der 5

这称为浏览器指纹识别。

检查https://browserleaks.com/的名单,你可以获取用户数据块。该网站使用客户端代码,您也可以使用它来获取您在那里看到的所有数据,包括:

--他们安装了什么字体

--他们使用的是什么操作系统

--他们的ISP

--他们安装了哪些插件

--使用<canvas>,一个非常独特的指纹本身

--他们的屏幕分辨率

以及更多,特别是如果用户启用了 Flash、WebGL 或 WebRTC。使用此数据,您可以在数据库中创建用户的“指纹”。例如,假设我访问了您的网站;你记录了我安装的所有 322 种字体、我有什么操作系统、我的 ISP 是谁、我安装了哪些插件、我的屏幕分辨率等。当我尝试从不同的浏览器甚至不同的 IP 访问你的站点时,你仍然可以从你收集的所有其他数据中确切地知道我是谁。

编辑:鉴于 duskwuff 的评论和反对票,我想我觉得有必要提供一些研究和结果的链接。请注意,浏览器指纹识别并非 100% 有效,因此不应像在数据库中那样用作唯一 ID 来绝对识别用户,但使用最新技术,您可以获得非常高的成功率。大多数网站将其用于广告营销,或者如您所愿,一种反垃圾邮件技术:

https://panopticlick.eff.org/static/browser-uniqueness.pdf(99.1% 的 有效性) http://yinzhicao.org/TrackingFree/crossbrowsertracking_NDSS17.pdf(99.24% 的有效性) http://mickvaites.com/wp- content/uploads/2013/09/T802_Michael_Vaites_2013-BrowserFingerprinting.pdf(95% 有效性)

编辑 2:要实际实施此无高价企业 SaaS 产品:https : //www.npmjs.com/package/fingerprintjs2 在“指纹来源列表”下,您将看到不同数据的列表用户访问您的网站。每当有人提交投票时,您都应该将此数据记录在您的数据库中。在允许投票提交之前,查询您的数据库中的内容,例如“过去是否有人使用相同的用户代理、语言、颜色深度...等提交过投票?如果是,这可能是有人试图提交两次投票,所以不允许提交。” 那是一个这样做的简化方法,并且不会很好地工作;在理想的世界中,您需要一个复杂的算法来检查所有数据点并确定用户与以前相同的概率。例如,也许他们更改了时区以避开您的垃圾邮件检测;如果除时区外的所有点都相同,则您很容易检测到。

一个简单的方法来实现这一点到一个不错的准确度:使用画布指纹+安装的字体。画布指纹识别非常准确,并且很难被欺骗。与已安装的字体相同。仅这两项数据就可以为您提供一个相当不错的垃圾邮件检测系统。用户可以在他们的浏览器中禁用 html canvas,因此如果 canvas 指纹数据为空,您需要阻止他们提交投票。用户可以很容易地删除和添加字体,因此单独的字体并不完美,但两者的结合将阻止任何基本的恶意尝试多次提交投票。