1. Evercookie

Evercookie是一个Javascript API,可以在浏览器中生成极其持久的cookie。 它的目标是在客户删除标准cookie,Flash cookie(本地共享对象或LSO)等之后识别客户端。

2. 实现原理

Evercookie是通过将cookie数据存储在尽可能多的浏览器存储机制上来实现的。 如果从任何存储机制中删除cookie数据,只要一个仍然完好无损,evercookie就会在每个机制中积极地重新创建它。

如果Flash LSO,Silverlight或Java机制可用,Evercookie甚至可以在同一客户机上的不同浏览器之间传播cookie!

3. 浏览器存储机制

客户端浏览器必须支持尽可能多的以下存储机制才能使Evercookie有效:

a. Standard HTTP Cookies
b. Flash Local Shared Objects
c. Silverlight Isolated Storage
d. CSS History Knocking
e. Storing cookies in HTTP ETags (Backend server required)
f. Storing cookies in Web cache (Backend server required)
g. HTTP Strict Transport Security (HSTS) Pinning (works in Incognito mode)
h. window.name caching
i. Internet Explorer userData storage
j. HTML5 Session Storage
k. HTML5 Local Storage
l. HTML5 Global Storage
m. HTML5 Database Storage via SQLite
n. HTML5 Canvas - Cookie values stored in RGB data of auto-generated, force-cached PNG images (Backend server required)
o. HTML5 IndexedDB
p. Java JNLP PersistenceService
q. Java exploit CVE-2013-0422 - Attempts to escape the applet sandbox and write cookie data directly to the user’s hard drive.

4. 后端服务器

某些存储机制需要后端服务器。 该软件包附带了etag,cache和png后端服务器的PHP实现。

5. 缺点或注意事项

a. CSS历史记录首次设置cookie时,可能会导致大量HTTP请求。
b. 一些存储机制涉及在客户端浏览器中加载Silverlight或Flash。 在某些机器上,这可能是一个非常缓慢的过程,会严重影响性能。 在较旧的移动设备上,这可能会使您的网站无法使用.
c. 浏览器供应商正在尽最大努力填补Evercookie利用的许多漏洞。 这对互联网来说是一件好事,但这意味着今天有效的方法明天可能效果不佳。

参考资料: https://github.com/samyk/evercookie

Evercookie的更多相关文章

  1. 前端持久化--evercookie

    引言: 前端持久化就是要将数据永久的保存在前端,让数据难以删除或者删除后能够重新恢复.存储的数据可以理解为是一种 “僵尸数据”,下面介绍一种前端持久化方法 -- evercookie. 一.everc ...

  2. cookie窃取和session劫持

    Updates 2014-08-17 感谢@搞前端的crosser的提醒,加入了HTTP Response Splitting的内容. 此篇文章的Presentation戳这里. 一.cookie的基 ...

  3. 浏览器cookie数

    <?php for ($w=0; $w < 200 ; $w++) { setcookie('name'.$w,'value'.$w, time()+3600*10 ); } var_du ...

  4. laravel小抄

    原文地址:http://cheats.jesse-obrien.ca/ Artisan // Displays help for a given command php artisan --help ...

  5. Laravel Cheat 表 http://cheats.jesse-obrien.ca/#

    Laravel Cheat Sheet Toggle Code Comments PDF Version Github Laravel 3 Docs Laravel 4 Docs Artisan ph ...

  6. [转]取代cookie的网站追踪技术:”帆布指纹识别”初探

    [前言] 一般情况下,网站或者广告联盟都会非常想要一种技术方式可以在网络上精确定位到每一个个体,这样可以通过收集这些个体的数据,通过分析后更加精准的去推送广告(精准化营销)或其他有针对性的一些活动.C ...

  7. 笔记整理--Http-Cookie

    如何设置一个永远无法删除的Cookie -- 系统架构 -- IT技术博客大学习 -- 共学习 共进步! - Google Chrome (2013/6/20 9:46:38) 如何设置一个永远无法删 ...

  8. 浏览器存储(cookie、localStorage、sessionStorage)

    互联网早期浏览器是没有状态维护,这个就导致一个问题就是服务器不知道浏览器的状态,无法判断是否是同一个浏览器.这样用户登录.购物车功能都无法实现,Lou Montulli在1994年引入到web中最终纳 ...

  9. web API简介(二):客户端储存之document.cookie API

    概述 前篇:web API简介(一):API,Ajax和Fetch 客户端储存从某一方面来说和动态网站差不多.动态网站是用服务端来储存数据,而客户端储存是用客户端来储存数据.document.cook ...

随机推荐

  1. 理解JavaScript作用域

    这是一篇译文,这里贴上译文地址:http://www.zcfy.cc/article/understanding-scope-in-javascript-8213-scotch-4075.html 这 ...

  2. Scrapy框架之基于RedisSpider实现的分布式爬虫

    需求:爬取的是基于文字的网易新闻数据(国内.国际.军事.航空). 基于Scrapy框架代码实现数据爬取后,再将当前项目修改为基于RedisSpider的分布式爬虫形式. 一.基于Scrapy框架数据爬 ...

  3. 三大集合框架之map

    Map 是一种把键对象和值对象映射的集合,它的每一个元素都包含一对键对象和值对象. Map没有继承于Collection接口 从Map集合中检索元素时,只要给出键对象,就会返回对应的值对象. Map是 ...

  4. java生成实体类的工具内部是如何实现的(mysql)

    一.认识INFORMATION_SCHEMA数据库 INFORMATION_SCHEMA数据库提供了访问数据库元数据(数据的数据)的方式 该数据库中存放有数据库名.表名,列名.列的数据类型等各种数据 ...

  5. JSP禁用缓存的方式 response.setHeader( "Pragma", "no-cache" ); setDateHeader("Expires", 0);

    JSP禁用缓存的方式    使用服务器端控制AJAX页面缓存:        response.setHeader( "Pragma", "no-cache" ...

  6. ios端微信浏览器禁止上下滑动

    在body里的第一个div容器中添加 position:fixed

  7. 再学UML-深入浅出UML类图(四)

    实例分析1——登录模块 某基于C/S的即时聊天系统登录模块功能描述如下: 用户通过登录界面(LoginForm)输入账号和密码,系统将输入的账号和密码与存储在数据库(User)表中的用户信息进行比较, ...

  8. oracle_set_autocommit

    preface 1.centos  operating  system. 2.database is oracle 11g. 3.oracle account  is  scott. step 1.e ...

  9. tensorflow报错 tensorflow Resource exhausted: OOM when allocating tensor with shape

    在使用tensorflow的object detection时,出现以下报错 tensorflow Resource exhausted: OOM when allocating tensor wit ...

  10. March 18 2017 Week 11 Saturday

    When you feel like quitting, think about why you started. 当你想放弃时,想想你为什么开始. When I heard of the messa ...