欢迎大家访问我的博客 blog.ayla1688.cool
Evercookie
Evercookie是一种Javascript API,可在浏览器中生成非常持久的cookie。 它的目标是即使删除了标准Cookie,Flash Cookie(本地共享对象或LSO)和其他Cookie,也可以识别客户端。
这是通过将cookie数据存储在尽可能多的浏览器存储机制上来实现的。 如果从任何一种存储机制中删除了cookie数据,evercookie就会在每种机制中积极地重新创建它,只要其中一种仍然完好无损即可。
如果有Flash LSO,Silverlight或Java机制可用,Evercookie甚至可以在同一客户端计算机上的不同浏览器之间传播cookie!
浏览器存储机制
客户端浏览器必须支持尽可能多的以下存储机制,才能使Evercookie生效。
- 标准HTTP Cookie
- Flash本地共享对象
- Silverlight隔离存储
- CSS历史敲门
- 在HTTP ETag中存储cookie(需要后端服务器)
- 将cookie存储在Web缓存中(需要后端服务器)
- HTTP严格传输安全性(HSTS)固定(在隐身模式下工作)
- window.name缓存
- Internet Explorer用户数据存储
- HTML5会话存储
- HTML5本地存储
- HTML5全球存储
- 通过SQLite的HTML5数据库存储
- HTML5 Canvas-自动生成的,强制缓存的PNG图像的RGB数据中存储的Cookie值(需要后端服务器)
- HTML5 IndexedDB
- Java JNLP PersistenceService
- Java利用CVE-2013-0422-尝试转出applet沙箱并将cookie数据直接写入用户的硬盘驱动器。
要在某天实施(也许由您执行):
- TLS会话恢复标识符/票证(在隐身模式下工作)
- 每位用户生成HTTP公钥固定(HPKP)证书
- HTTP身份验证中的缓存
- Google Gears
- 使用Java产生基于NIC信息的唯一密钥
- 其他方法?请评论!
- Java持久性机制由Gabriel Bauman在此处开发和维护。
后端服务器
一些存储机制需要后端服务器。该软件包随附etag,cache和png后端服务器的PHP实现。
- 对于Node.js版本,请访问node-evercookie。
- 对于Django版本,请访问Django Evercookie
注意事项
被警告! Evercookie可能会给您或您的用户带来问题。
- 一些存储机制涉及在客户端浏览器中加载Silverlight或Flash。在某些计算机上,这可能是一个非常缓慢的过程,并且磁盘抖动很多。在较旧的移动设备上,这会使您的网站无法使用。
- 首次设置Cookie时,CSS历史记录的敲除会导致大量HTTP请求。
- 在某些圈子中,使用Evercookie被认为是不礼貌的。在生产中使用Evercookie时,请考虑您的声誉和受众。
- 浏览器供应商正在尽最大努力来弥补Evercookie所利用的许多漏洞。对于Internet来说这是一件好事,但这意味着今天可以使用的东西明天可能无法很好地使用。
github连接:https://github.com/samyk/evercookie
有兴趣的同学可以去研究一下。