如何唯一识别访问我的网站的计算机?


184

我需要找出一种唯一标识访问我正在创建的网站的每台计算机的方式。有人对如何实现这一目标有任何建议吗?

因为我希望该解决方案能在所有机器和所有浏览器上正常运行,所以我试图使用javascript创建一个解决方案。

感谢您的帮助。谢谢。

编辑:

Cookies不会。

假设计算机没有发生硬件更改,我需要有能力创建一个计算机唯一且可重复的GUID。我正在考虑的方向是获取网卡的MAC和其他具有这种性质的信息,这些信息将使机器访问该网站。


4
您无法获得其网卡的mac-IP不包含该信息,您所能获得的最好信息是其ISP网关的IP地址。对于某些ISP,给定城市中的所有用户可能都是相同的。
Martin Beckett

1
您不希望用户能够欺骗它的事实。答案当然是,如果没有在用户计算机上安装您的某些特权组件,就无法做到这一点。
AnthonyWJones

MAC地址很容易被欺骗。我的小型无线连接会通过您的MAC,替代自己的MAC,或使用您指定的无线连接。
肯特·布鲁斯特

这无法完成-Cookies是您最好的选择
Draemon

请在此页面阅读我的答案。我对这个问题有一个很好的主意:)
Mahdi Jazini

Answers:


58

这些人已经开发出一种指纹识别方法,可以高度准确地识别用户:

https://panopticlick.eff.org/static/browser-uniqueness.pdf

我们通过根据请求将其传输到网站的版本和配置信息来调查现代Web浏览器受到“设备指纹识别”的程度。我们实施了一种可能的指纹识别算法,并从访问我们测试侧panopticlick.eff.org的大量浏览器样本中收集了这些指纹。 。我们观察到指纹的分布至少包含18.1位的熵,这意味着如果我们随机选择一个浏览器,充其量我们只能期望286,777个其他浏览器中的一个会共享其指纹。在支持Flash或Java的浏览器中,情况更糟,平均每个浏览器至少携带18.8位识别信息。在我们的示例中,使用Flash或Java的浏览器中94.2%是唯一的。

通过观察回头客,我们可以估算浏览器指纹随时间变化的速度。在我们的样本中,指纹的变化非常快,但是即使是简单的启发式方法也通常能够猜测指纹何时是先前观察到的浏览器指纹的“升级”版本,正确的猜测率为99.1%,假阳性率仅为0.86%。 。

我们讨论了实践中隐私威胁浏览器指纹的构成,以及可能适合采取哪些对策。在保护可指纹性和某些类型的可调试性之间需要权衡取舍,在当前的浏览器中,可调试性在保护隐私方面具有很高的权重。矛盾的是,如果没有足够多的人使用防指纹隐私技术,它们可能会失败。我们表明,某些隐私措施目前已成为这一悖论的受害者,但其他措施却没有……


14
我是一名开发人员,我来这里是为了寻找快速的解决方案或小片段代码。本文档未显示如何实现它。我想知道如何实现此目的,以便可以跟踪网站的唯一身份用户。
奥利弗·

9
@Oliver您是正确的。这不会给您答案。它需要进一步阅读,了解所有涉及的问题,以及为什么简单的代码片段不太可能完全起作用。进取的开发人员可能会编写一个图书馆,该图书馆会做所有的艰苦工作,并使人们能够搜索“快速解决方案”以使将来受益。
乔纳森

2
答案也是仅链接。在PDF不可用的情况下,将对PDF中描述的技术进行总结。
Damian Yerrick '17

2
在这里查看我的答案以获取实现指纹识别的开源软件包和简便易行的方法stackoverflow.com/a/47536192/3650835
KayakinKoder

因此,我最好制作一个随机大数字的弹性“ cookie”:D
Luis Mauricio,

49

介绍

我不知道是否存在或将永远只有一种方法可以单独使用浏览器来唯一标识计算机。主要原因是:

  • 您将需要在用户计算机上保存数据。用户可以随时删除此数据。除非您有一种方法来重新创建此数据,否则对于每台计算机而言,这都是唯一的,那么您的工作就会陷入困境。
  • 验证。您需要防止欺骗,会话劫持等。

即使有一些方法可以在不使用Cookie的情况下跟踪计算机,总会有一种绕过计算机的方法,而软件会自动执行此操作。如果您确实需要基于计算机来跟踪某些内容,则必须编写本机应用程序(Apple Store / Android Store / Windows程序/等)。

我可能无法回答您提出的问题,但可以向您展示如何实现会话跟踪。使用会话跟踪,您尝试跟踪浏览会话,而不是计算机访问您的站点。通过跟踪会话,您的数据库架构将如下所示:

sesssion:
  sessionID: string
  // Global session data goes here

  computers: [{
     BrowserID: string
     ComputerID: string
     FingerprintID: string
     userID: string
     authToken: string
     ipAddresses: ["203.525....", "203.525...", ...]
     // Computer session data goes here
  }, ...]

基于会话的跟踪的优点:

  1. 对于已登录的用户,您始终可以从用户username/ password/中生成相同的会话ID email
  2. 您仍然可以使用跟踪访客用户sessionID
  3. 即使几个人使用同一台计算机(例如网吧),您也可以在登录后分别跟踪他们。

基于会话的跟踪的缺点:

  1. 会话是基于浏览器的,而不是基于计算机的。如果用户使用2个不同的浏览器,则将导致2个不同的会话。如果这是一个问题,您可以在这里停止阅读。
  2. 如果用户未登录,会话将过期。如果用户未登录,则会话将使用访客会话,如果用户删除Cookie和浏览器缓存,则该会话将无效。

实作

有很多实现方法。我想我无法涵盖所有​​内容,我只会列出我最喜欢的内容,这样可以得出结论。记住这一点。

基本

我将使用称为永远的cookie来跟踪会话。即使用户删除其cookie或更新其浏览器,这些数据也将自动重新创建自己。但是,它无法在用户删除其cookie和浏览缓存的同时幸免。

为了实现这一点,我将使用浏览器缓存机制(RFC),WebStorage API(MDN)和浏览器cookie(RFCGoogle Analytics(分析))。

法律

为了利用跟踪ID,您需要将其添加到您的隐私权政策和使用条款中,最好在“ 跟踪 ”小标题下。我们将在document.cookie和 上使用以下键window.localStorage

  • _ga:Google Analytics(分析)数据
  • __utma:Google Analytics(分析)跟踪Cookie
  • sid:SessionID

确保在所有使用跟踪的页面上都包含指向您的隐私政策和使用条款的链接。

我的会话数据存储在哪里?

您可以将会话数据存储在网站数据库中或用户计算机上。由于我通常在使用第三方应用程序(例如Google Analytics(分析)/ Clicky等)的较小站点(少于1万个连续连接)上工作,因此最好将数据存储在客户端计算机上。这具有以下优点:

  1. 没有数据库查找/开销/负载/延迟/空间等
  2. 用户可以随时删除自己的数据,而无需给我写烦人的电子邮件。

缺点:

  1. 数据必须经过加密/解密和签名/验证,这会在客户端(还不错)和服务器(bah!)上造成cpu开销。
  2. 用户删除其Cookie和缓存时,数据将被删除。(这是我真正想要的)
  3. 当用户离线时,数据不可用于分析。(仅适用于当前浏览用户的分析)

单位

  • BrowserID:从浏览器用户代理字符串生成的唯一ID。Browser|BrowserVersion|OS|OSVersion|Processor|MozzilaMajorVersion|GeckoMajorVersion
  • ComputerID:从用户的IP地址和HTTPS会话密钥生成。 getISP(requestIP)|getHTTPSClientKey()
  • FingerPrintID:基于JavaScript的指纹,基于经过修改的Fingerprint.jsFingerPrint.get()
  • SessionID:用户1st访问站点时生成的随机密钥。BrowserID|ComputerID|randombytes(256)
  • GoogleID:从__utmacookie 生成。getCookie(__utma).uniqueid

机制

前几天,我和女友一起看温蒂·威廉姆斯的节目,当主持人建议观众至少每月删除一次浏览器历史记录时,我感到非常震惊。删除浏览器历史记录通常具有以下效果:

  1. 删除访问过的网站的历史记录。
  2. 删除cookie和window.localStorage(aww人)。

大多数现代浏览器都使此选项易于使用,但不要害怕朋友。因为有一个解决方案。浏览器具有缓存机制来存储脚本/图像和其他内容。通常,即使我们删除了历史记录,该浏览器缓存仍然保留。我们需要的只是一种在此处存储数据的方法。有两种方法可以做到这一点。更好的方法是使用SVG图片并将我们的数据存储在其标签中。即使使用Flash禁用了JavaScript,仍可以通过这种方式提取数据。但是,由于这有点复杂,因此我将演示另一种使用JSONP(Wikipedia)的方法。

example.com/assets/js/tracking.js(实际上是tracking.php)

var now = new Date();
var window.__sid = "SessionID"; // Server generated

setCookie("sid", window.__sid, now.setFullYear(now.getFullYear() + 1, now.getMonth(), now.getDate() - 1));

if( "localStorage" in window ) {
  window.localStorage.setItem("sid", window.__sid);
}

现在我们可以随时获取会话密钥:

window.__sid || window.localStorage.getItem("sid") || getCookie("sid") || ""

如何使tracking.js停留在浏览器中?

我们可以使用Cache-ControlLast-ModifiedETag HTTP标头来实现。我们可以SessionID为etag标头使用as值:

setHeaders({
  "ETag": SessionID,
  "Last-Modified": new Date(0).toUTCString(),
  "Cache-Control": "private, max-age=31536000, s-max-age=31536000, must-revalidate"
})

Last-Modified标头告诉浏览器该文件基本上从不修改。Cache-Control告诉代理和网关不要缓存文档,但告诉浏览器将其缓存1年。

下次浏览器请求文档时,它将发送If-Modified-SinceIf-None-Match标头。我们可以使用它们来返回304 Not Modified响应。

example.com/assets/js/tracking.php

$sid = getHeader("If-None-Match") ?: getHeader("if-none-match") ?: getHeader("IF-NONE-MATCH") ?: ""; 
$ifModifiedSince = hasHeader("If-Modified-Since") ?: hasHeader("if-modified-since") ?: hasHeader("IF-MODIFIED-SINCE");

if( validateSession($sid) ) {
  if( sessionExists($sid) ) {
    continueSession($sid);
    send304();
  } else {
    startSession($sid);
    send304();
  }
} else if( $ifModifiedSince ) {
  send304();
} else {
  startSession();
  send200();
}

现在,每次浏览器请求tracking.js我们的服务器时,它都会响应304 Not Modified并强制执行的本地副本tracking.js

我还是不明白 给我解释

假设用户清除了他们的浏览历史记录并刷新了页面。用户计算机上剩下的唯一内容是tracking.js浏览器缓存中的副本。当浏览器请求tracking.js304 Not Modifiedtracking.js它会收到一个响应,使它执行所接收到的第一个版本。tracking.js执行并恢复SessionID已删除的。

验证方式

假设Haxor X在客户仍然登录时窃取了他们的cookie。我们如何保护它们?密码术和浏览器指纹识别可以营救。记住我们最初的定义SessionID是:

BrowserID|ComputerID|randomBytes(256)

我们可以将其更改为:

Timestamp|BrowserID|ComputerID|encrypt(randomBytes(256), hk)|sign(Timestamp|BrowserID|ComputerID|randomBytes(256), hk)

在哪里hk = sign(Timestamp|BrowserID|ComputerID, serverKey)

现在,我们可以SessionID使用以下算法来验证:

if( getTimestamp($sid) is older than 1 year ) return false;
if( getBrowserID($sid) !== createBrowserID($_Request, $_Server) ) return false;
if( getComputerID($sid) !== createComputerID($_Request, $_Server) return false;

$hk = sign(getTimestamp($sid) + getBrowserID($sid) + getComputerID($sid), $SERVER["key"]);

if( !verify(getTimestamp($sid) + getBrowserID($sid) + getComputerID($sid) + decrypt(getRandomBytes($sid), hk), getSignature($sid), $hk) ) return false;

return true; 

现在,为了使Haxor的攻击起作用,他们必须:

  1. 一样ComputerID。这意味着他们必须与受害者(Tricky)拥有相同的ISP提供者。这将使我们的受害者有机会在自己的国家采取法律行动。Haxor还必须从受害者(Hard)获取HTTPS会话密钥。
  2. 一样BrowserID。任何人都可以欺骗User-Agent字符串(讨厌)。
  3. 能够创建自己的假货SessionID(非常困难)。批量攻击不会起作用,因为我们使用时间戳来生成加密/签名密钥,因此基本上就像为每个会话生成新密钥一样。最重要的是,我们对随机字节进行加密,因此也不可能进行简单的字典攻击。

我们可以通过转发GoogleIDFingerprintID(通过ajax或隐藏字段)并与之匹配来改善验证。

if( GoogleID != getStoredGoodleID($sid) ) return false;
if( byte_difference(FingerPrintID, getStoredFingerprint($sid) > 10%) return false;

1
顺便说一句,这是一个美丽的答案。如此多的信息。我很惊讶您没有更多的赞誉。老实说,我不敢相信使用svgs和jsonp的技术已经存在,但是必须如此。禁用cookie / localStorage / sessionStorage时,没有库可以使用这种技术吗?
faceyspacey.com 17-10-10

另外,我想知道是否有一个高级版本,可以简单地使用缓存的tracking.js文件(或多个此类文件)将其本质上用作localStorage / cookie,即记住大量数据。这个想法是让一个库具有在会话期间创建的所有差异的诸如storageFacade.setItemand storageFacade.getItem . And it tries to use localStorage, but fallsback to your technique when disabled. ..Perhaps the way it works is via a single file for "diffs" i.e. each time you call setItem . And then a manifest 这样的方法,该方法会每隔一段时间自动创建一次。
faceyspacey.com 17-10-10

如果清单每隔一段时间才创建一次,从本质上说,它将限制所创建清单的数量。然后,在以后的javascript中,您可以尝试请求创建所有可能的清单,然后使用最新的清单从diff快照重建状态。如果我们仅有差异,则可能有成百上千个差异,尝试将它们全部获取直到一个失败之前可能是性能问题。也就是说,您以增量方式获取diff或manifest:manifest-1.js,manifest-2.js等,直到失败(因为它不存在)。这意味着您拥有所有清单(或差异)
faceyspacey.com 17-10-10

@ faceyspacey.com对不起,没有库。您必须编写代码并不断更新自己的自定义解决方案。想一想。一旦为此开发了一个库,所有的添加阻止程序/浏览器/ etc都将立即对其进行抵消。起作用的唯一原因是因为它依赖于一个非常重要的核心浏览器功能,而这些功能根本不会删除/禁用:CACHING。我一直在丢失我的登录名和密码。而且由于我不再问很多问题了,所以我不需要回答很多问题,因此我可以给名誉留下一笔悬赏。我刚刚看到了这一点,意识到没有真正的答案。
Walter

30

没有所有者的合作,就不可能确定访问网站的计算机。但是,如果他们允许您,则可以存储cookie以在机器再次访问您的站点时标识该机器。关键是,访客在控制之中;他们可以随时删除Cookie并以新访客的身份出现。


7
如果他使用3种不同的浏览器访问您的网站,则他将拥有3种不同的Cookie,因为应用之间未共享Cookie。此外,如果他使用DHCP而不是静态IP地址,则可能很长一段时间他的计算机将没有相同的IP地址。
JohnnySoftware 2010年

2
是的,没有。浏览器指纹识别可以以较高的概率识别浏览器配置文件,但这不是此问题中寻求的绝对一对一的识别。对于精明的用户,如果他们愿意的话,故意绕开它也很简单(但可能不容易)。
erickson

30

一种可能是使用Flash Cookie

  • 无处不在的可用性(95%的访问者可能会使用闪存)
  • 您可以为每个Cookie存储更多数据(最大100 KB)
  • 跨浏览器共享,因此更有可能唯一地标识机器
  • 清除浏览器cookie不会删除Flash cookie。

您需要构建一个小的(隐藏的)Flash电影来读取和写入它们。

无论选择哪种方法,请确保您的用户选择加入以进行跟踪,否则,您将侵犯他们的隐私并成为坏人之一。


5
许多用户使用Flashblock。如果用户希望单击,将通过单击激活Flash。
Horcrux7

3
有删除Cookie的方法,但它们超出了普通用户的范围。有Adobe的网站页面进行查看和删除LSO(本地共享对象en.wikipedia.org/wiki/Local_Shared_Object)尽管Firefox用户异议附加是删除它们最简单的方法
山姆·哈斯勒

我认为这是最好的解决方案之一。YouTube,Google等使用LSO打击滥用行为。
Uku Loskit 2010年

4
Flash cookie与现代版本的Firefox和Chrome中的HTTP cookie一样容易删除:WikipediaAdobe announced that Flash Player 10.3 enables Mozilla Firefox 4 and "future releases of Apple Safari and Google Chrome" to delete local shared objects,[11] so since version 4, Firefox treats LSOs the same way as HTTP cookies - deletion rules that previously applied only to HTTP cookies now also apply to LSOs.
JoJo

4
在过去的九年里,情况发生了变化。如今,95%的用户甚至都没有使用台式机,而移动用户从未真正拥护Adobe Flash Player。
Damian Yerrick '17

21

您可能想尝试在evercookie中设置唯一的ID(它可以在跨浏览器中使用,请参见其常见问题解答):http ://samy.pl/evercookie/

还有一家名为ThreatMetrix的公司,许多大公司都在使用它来解决此问题:http ://threatmetrix.com/our-solutions/solutions-by-product/trustdefender-id/ 它们非常昂贵,有些他们的其他产品效果不是很好,但是其设备ID效果很好。

最后,有一个panopticlick想法的开源jquery实现:https : //github.com/carlo/jquery-browser-fingerprint 现在看来还很成熟, 但可以扩展。

希望能帮助到你!


+1-布赖恩-很好的信息!事实证明,这一切都是非常有用的。谢谢。如果以后没有学到更多信息,请添加更多信息。
本奥

1
关于evercookie。尝试与歌剧。设置cookie,然后从Opera中删除所有历史记录,然后关闭Opera,再次单击以打开Click to rediscover cookies并看到null或未定义。所以这对我不起作用
Andris

在iOS Safari私有模式和隐身桌面Chrome隐身模式下对示例页面进行了尝试,重新启动浏览器后无法检索Cookie。
莫里奥

20

在此科学文章中介绍了一种称为“画布指纹”的流行方法:“ Web永不忘记:野外的持久跟踪机制”。一旦开始寻找它,您会惊讶于它的使用频率。该方法创建唯一的指纹,该指纹对于每个浏览器/硬件组合都是一致的。

本文还回顾了其他持久跟踪方法,例如evercookies,重新生成http和Flash cookie以及cookie同步。

有关画布指纹的更多信息,请参见:


1
因此,如果两个设备相同(同一批计算机,相同的操作系统,相同的浏览器),则指纹相同,对吗?
xiaoyu2er

此处的实际问题是我可以在代码中使用的javascript库。阅读大量理论并不能解决接下来60分钟内必须解决的问题。
塔纳西斯·约阿尼迪斯

11

您只能通过HTTP连接获得少量信息。

  1. IP-但是,正如其他人所说,由于ISP的动态分配策略,对于许多(即使不是大多数)互联网用户来说,这也不是固定的。

  2. Useragent字符串-几乎所有浏览器都会在每次请求时发送它们属于哪种浏览器。但是,今天用户可以在许多浏览器中进行设置。

  3. 请求字段的集合-每个请求都发送其他字段,例如受支持的编码等。这些字段(如果用于汇总中)可以帮助标识用户的计算机,但是同样取决于浏览器并且可以更改。

  4. Cookies-设置cookie是识别机器(或更具体地说是机器上的浏览器)的另一种方法,但是正如其他人所说的那样,它们可以被用户删除或关闭,并且仅适用于浏览器,而不适用于机。

因此,正确的响应是您无法仅通过HTTP over IP协议就可以实现自己的生活。但是,结合使用cookie和IP以及HTTP请求中的字段,您很有可能猜测一下它是什么机器。用户倾向于只使用一个浏览器,并且通常使用一台机器,因此这可能很容易理解,但这取决于受众。...技术人员更可能会弄乱这些东西,并使用更多的机器/浏览器。另外,这甚至可以与对IP进行地理位置定位并同时使用该数据的尝试结合在一起。但是无论如何,没有任何解决方案会一直都是正确的。


10

cookie和非cookie方法都存在缺陷。但是,如果您可以原谅cookie方法的缺点,那么这里就有一个想法。

如果您已经在网站上使用Google Analytics(分析),则无需自己编写代码来跟踪唯一身份用户。__utmaGoogle文档所述,Google Analytics(分析)通过cookie值为您完成此操作。通过重用此值,您不会创建其他cookie有效负载,这对于页面请求具有效率优势。

您可以轻松地编写一些代码来访问该值,或使用此脚本的 getUniqueId()功能。


我会用得到相同的ID getUniqueId()在同一台机器不同的浏览器?
Ankur Akvaliya

8

与以前的解决方案一样,Cookie是一个好方法,但是请注意,它们可以识别浏览器。如果我在Firefox中访问过一个网站,然后在Internet Explorer中访问,则将分别存储两次cookie。一些用户还禁用cookie(但更多人禁用JavaScript)。

可以考虑的另一种方法是IP和主机名标识(请注意,这些可能会因拨号/非静态IP用户而异,AOL也使用覆盖IP)。但是,由于这只能标识网络,因此可能无法像cookie一样有效。


使用IP地址标识访问网络的好点-使用NAT,可能会有整个国家/地区隐藏在单个IP地址的后面,而明智的选择是。由于IPv4地址短缺,您仍然会看到相当大的公司或学校/大学为其出站Internet流量共享一个IP地址。
Piskvor在

6

除了使用cookie的建议外,HTTP请求标头中还包含唯一可用于询问的全面识别属性集。因此,可以使用其中的一些子集为用户代理(即浏览器)创建伪唯一标识符。此外,默认情况下,大多数此类信息可能已被记录在Web服务器软件的所谓“访问日志”中,如果没有,则可以很容易地配置为这样做。然后,可以开发一种仅扫描该日志内容并创建指纹的通用工具包括IP地址和用户代理字符串等每个请求。更多可用数据,甚至包括特定cookie的内容,都增加了此指纹唯一性的质量。但是,正如许多其他人已经指出的那样,HTTP协议并不能使这种协议百分百地做到万无一失-充其量只能作为一个相当不错的指标。


6

当我使用从未访问过我的网上银行网站的机器时,系统会要求我进行其他身份验证。然后,如果我第二次回到网上银行站点,我没有被询问其他身份验证...我删除了IE中的所有cookie,然后重新登录到我的网上银行站点,完全希望再次被询问身份验证问题。令我惊讶的是,我没有被问到。这难道不使人相信银行正在做某种不涉及cookie的pc标签吗?

这是银行使用的一种非常常见的身份验证类型。

假设您正在通过example-isp.com访问银行网站。第一次到那里时,系统会要求您输入密码以及其他身份验证。通过之后,银行便知道用户“ thatisvaliant”已通过身份验证,可以通过example-isp.com访问该网站。

将来,当您通过example-isp.com访问该网站时,它不会要求进行额外的身份验证(除了密码之外)。如果您尝试通过another-isp.com访问银行,则银行将再次执行相同的例程。

综上所述,根据您的IP地址,银行的标识是您的ISP和/或netblock。显然,并非您ISP的每个用户都是您,这就是银行仍然要求您输入密码的原因。

您曾经有信用卡公司打电话来验证在其他国家/地区使用信用卡可以正常进行吗?相同的概念。


4

确实,您无法做的事情因为协议不允许这样做。如果普遍使用静态IP,那么您也许可以做到这一点。它们不是,所以您不能。

如果您真的想识别,请让他们登录。

由于它们可能会移动到您网站上的不同页面,因此您需要一种跟踪它们移动的方法。

只要它们已登录,并且您通过cookie / link-parameters / beacons /无论如何跟踪它们在站点内的会话,就可以确定他们在这段时间内使用的是同一台计算机。

最终,如果您的用户没有使用自己的本地网络并且没有静态IP地址,那么这告诉您他们正在使用哪台计算机是不正确的。

如果您要与用户合作完成某项工作,并且每个cookie只有一个用户并且他们使用单个Web浏览器,则只需使用cookie。


3

Cookies对确定唯一身份访问者不会有用。用户可以清除cookie并刷新站点-然后他又被归类为新用户。

我认为执行此操作的最佳方法是实施服务器端解决方案(因为您将需要在某个地方存储数据)。根据您对此类数据的需求的复杂性,您将需要确定什么是唯一访问。明智的方法是允许IP地址在第二天返回,并进行唯一访问。一天中来自一个IP地址的多次访问不应视为唯一身份。

例如,使用PHP,获取访问者的IP地址并将其存储在文本文件(或sql数据库)中很简单。

服务器端解决方案将在所有计算机上运行,​​因为您将在用户首次加载您的站点时对其进行跟踪。不要使用javascript,因为这是用于客户端脚本编写的,而且用户可能在任何情况下都已将其禁用。

希望有帮助。


4
我和妻子在家里的NAT防火墙后面的四台不同的计算机中浏览。我们显示具有相同的IP,因此根据您的方案,我们显示为相同的用户。
亚当·尼斯

如果在mysql中写其他变量(在此处提到panopticlick.eff.org/browser-uniqueness.pdf)怎么办?因此ip地址将相同,但其他一些特征可能会有所不同。
Andris

3

因为我希望该解决方案能在所有机器和所有浏览器上正常运行,所以我试图使用javascript创建一个解决方案。

这不就是一个很好的理由使用JavaScript?

正如其他人所说-cookie可能是您最好的选择-请注意局限性。


3

您可以使用指纹

new Fingerprint2().get(function(result, components) {
  console.log(result) // a hash, representing your device fingerprint
  console.log(components) // an array of FP components
  //submit hash and JSON object to the server 
})

之后,您可以针对所有用户检查现有用户并检查JSON相似性,因此即使他们的指纹发生了变化,您仍然可以跟踪他们


2

我猜这是我无法以编程方式唯一地标识正在访问我的网站的计算机。

我有以下问题。当我使用从未访问过我的网上银行网站的机器时,系统会要求我进行其他身份验证。然后,如果我第二次回到在线银行网站,则不会再询问其他身份验证。阅读我的问题的答案,我认为它一定是一个cookie。因此,我删除了IE中的所有cookie,然后重新登录到我的网上银行站点,完全希望再次被询问身份验证问题。令我惊讶的是,我没有被问到。这难道不使人相信银行正在做某种不涉及cookie的pc标签吗?

此外,经过大量的搜索,我发现以下一家公司声称出售一种解决方案,该解决方案可以唯一标识访问网站的机器。http://www.the41.com/products.asp

如果您能进一步澄清这些矛盾的信息,我将不胜感激,我发现我将不胜感激。


基于以下内容: the41.com/download/… 看来,他们的解决方案是让用户下载一个软件,该软件会基于计算机创建一个唯一标识符并将其与某些登录凭据相关联。
mmacaulay

如前所述,您并没有排除使用Flash Cookie的银行。如何清除Flash Cookie和有关此问题的其他讨论:tips.vlaurie.com/2007/10/24/…–
micahwittman,

我的猜测:如果您(1)知道您的用户名,(2)知道您的密码,并且(3a)拥有他们的cookie,或者(3b)来自他们先前的IP地址,银行可能会相信您是您与您相关联。
扎克·彼得森

2

我会结合使用cookie和flash cookie。创建一个GUID并将其存储在cookie中。如果该cookie不存在,请尝试从Flash cookie中读取它。如果仍然找不到,请创建它并将其写入Flash Cookie。这样,您可以在浏览器之间共享相同的GUID。


1

我认为cookie可能正是您想要的;这就是大多数网站唯一标识访问者的方式。


0

假设您不希望用户掌控一切,那么您就不可能。网络无法正常工作,您所希望的最好是启发式。

如果可以选择强制访问者安装某些软件并使用TCPA,则可以从中获得帮助。


0

我的帖子可能不是解决方案,但是我可以提供一个示例,说明该功能已实现。

如果您访问的注册页面 www.supertorrents.org是第一次从计算机,那很好。但是,如果刷新页面或再次打开页面,则表明您以前访问过该页面。真正的美就在这里-即使您重新安装Windows或其他操作系统,它也可以识别。

我在某处读到它们存储了CPU ID。尽管我找不到他们该怎么做,但我对此表示严重怀疑,他们可能会使用MAC地址来执行此操作。

如果我发现我一定会分享如何做到这一点。


www.supertorrents.org已死
工具包

0

一个恶作剧:

  1. 创建2个注册页面:

    首次注册页面:无需任何电子邮件或安全检查(只需输入用户名和密码即可)

    第二注册页面:具有较高的安全级别(电子邮件验证请求和安全映像等)

  2. 为了使客户满意并易于注册,默认注册页面应为(第一注册页面),但在 (第一注册页面)中存在隐藏的限制。这是IP限制。如果IP试图第二次注册(例如,少于1小时),而不是显示阻止页面。您可以显示(第二注册页面)

  3. (第一注册页面)您可以设置(例如:从1个IP阻止2次尝试仅持续1小时或24小时),然后(例如)1小时后,您可以自动从该IP打开访问权限

请注意:(第一注册页面)(第二注册页面)不应放在分开的页面中。您只制作一页。(例如:register.php),并使其在第一PHP样式和第二PHP样式之间进行切换变得非常聪明。


Mahdi Jazini。没关系,但是我的问题是您如何识别客户端计算机的IP地址。
JENKINS J
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.