filipgolonka / evercookie
This package is not auto-updated.
Last update: 2024-09-14 18:47:36 UTC
README
Evercookie 是一个JavaScript API,可以在浏览器中产生非常持久的cookies。其目标是识别客户端,即使他们已经删除了标准cookies、Flash cookies(本地共享对象或LSOs)等。
通过尽可能多地使用浏览器存储机制来存储cookie数据来实现。如果从任何存储机制中删除了cookie数据,evercookie会积极地在每个机制中重新创建它,只要其中有一个仍然完好。
如果可用Flash LSO、Silverlight或Java机制,Evercookie甚至可以在同一客户端机器上的不同浏览器之间传播cookies!
由 Samy Kamkar 编写,得到了其他人的出色 贡献
浏览器存储机制
客户端浏览器必须尽可能多地支持以下存储机制,以便Evercookie有效。
- 标准 HTTP Cookies
- Flash 本地共享对象
- Silverlight 隔离存储
- CSS 历史敲击
- 在 HTTP ETags 中存储cookies(需要后端服务器)
- 在 Web缓存 中存储cookies(需要后端服务器)
- window.name缓存
- Internet Explorer userData存储
- HTML5 会话存储
- HTML5 本地存储
- HTML5 全局存储
- HTML5 通过SQLite的数据库存储
- HTML5 Canvas - 将cookie值存储在自动生成的、强制缓存的PNG图像的RGB数据中(需要后端服务器)
- HTML5 IndexedDB
- Java JNLP PersistenceService
- Java漏洞 CVE-2013-0422 - 尝试逃离applet沙盒并将cookie数据直接写入用户的硬盘。
将来某个时候(可能由你实现?)将实现
- HTTP严格传输安全 指定
- 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做出决定负责。请明智选择。
有什么想法吗?
提交一个pull request吧!