lagman / evercookie
Evercookie 是一个 JavaScript API,可以在浏览器中生成极其持久的 cookies。
This package is auto-updated.
Last update: 2024-09-17 19:39:11 UTC
README
Evercookie 是一个 JavaScript API,可以在浏览器中生成极其持久的 cookies。它的目标是在用户删除标准 cookies、Flash cookies(本地共享对象或 LSOs)和其他 cookies 后,仍然能够识别客户端。
这通过尽可能多地存储 cookie 数据在浏览器的存储机制中来实现。如果从任何存储机制中删除了 cookie 数据,只要其中一种机制仍然完整,Evercookie 会积极地在该机制中重新创建它。
如果 LSO 机制可用,Evercookie 甚至可以在同一台客户端机器上的不同浏览器之间传播 cookies!
由 Samy Kamkar 编写,并有其他人的出色 贡献
浏览器存储机制
客户端浏览器必须尽可能多地支持以下存储机制,以便 Evercookie 有效地工作。
- 标准 HTTP Cookies
- Flash 本地共享对象
- Silverlight 隔离存储
- CSS 历史敲击
- 在 HTTP ETags 中存储 cookies(需要后端服务器)
- 在 Web 缓存 中存储 cookies(需要后端服务器)
- window.name 缓存
- Internet Explorer userData 存储
- HTML5 Session Storage
- HTML5 Local Storage
- HTML5 Global Storage
- HTML5 通过 SQLite 的数据库存储
- HTML5 Canvas - 将 cookie 值存储在自动生成、强制缓存的 PNG 图像的 RGB 数据中(需要后端服务器)
- HTML5 IndexedDB
- Java JNLP PersistenceService
- Java 漏洞 CVE-2013-0422 - 尝试逃离 applet 沙箱并将 cookie 数据直接写入用户的硬盘。
将来可能实现(也许由你实现?)
- HTTP Strict Transport Security 锚定
- Google Gears
- 使用 Java 生成基于 NIC 信息的唯一密钥
- HTTP认证中的缓存
- 还有其他方法?请留言!
Java持久性机制由Gabriel Bauman开发和维护在这里。
后端服务器
某些存储机制需要后端服务器。此软件包包含PHP实现的etag、缓存和png后端服务器。
- 对于Node.js版本,请访问node-evercookie。
- 对于Django版本,请访问Django Evercookie
注意事项
警告!Evercookie可能会给您或您的用户带来潜在问题。
-
某些存储机制需要在客户端浏览器中加载Silverlight或Flash。在某些机器上,这可能会是一个非常缓慢的过程,伴随着大量的磁盘读写。在旧版移动设备上,这可能会使您的网站无法使用。
-
CSS历史敲击可能导致在首次设置cookie时产生大量HTTP请求。
-
在某些圈子中,使用Evercookie被认为是不礼貌的。在将Evercookie用于生产时,请考虑您的声誉和您的受众。
-
浏览器制造商正在尽力堵住Evercookie所利用的许多漏洞。这对互联网来说是个好事,但这意味着今天有效的方法可能明天就不那么有效了。
您对自己使用Evercookie的决定负责。请明智选择。
有想法吗?
发起一个拉取请求!