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. git获取别人远程dev分支上的代码

    我们在使用 git clone  xxx.git 下载代码的时候,获取到的只是 master上的代码 假入有个 dev 分支我们想获取上面的代码怎么办! #下载dev分支上的代码并切换到dev分支 g ...

  2. windows下配置nginx环境

    一. nginx软件拷贝 拷贝 nginx文件 到对应的服务目录中 如 E:/service/nginx nginx文件地址: 链接: http://pan.baidu.com/s/1c25oq6O ...

  3. setInterval()设置页面5,4,3,2,1秒后跳转

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  4. vue的一些特殊特性

    一.使用$ref特性获取DOM元素 代码示例如下所示: <!DOCTYPE html> <html lang="en"> <head> < ...

  5. Angular 基础教程(1)

    简介 什么是AngularJS 一个功能非常完备的前端框架,通过增强HTML的方式提供一种便捷开发Web应用程序的方式 其核心特点就是几乎无任何DOM操作,让开发人员的精力和时间全部集中于业务 MVC ...

  6. 【Linux】unix/Linux常用命令英文全称

    英文全称解释更容易理解 知其然,更要知其所以然 man: Manual 意思是手册,可以用这个命令查询其他命令的用法. pwd:Print working directory 显示当前工作路径. su ...

  7. Java—集合框架 List和Set的contains()以及Map的containsKey()、containsValue()

    如何判断集合中是否存在某个元素——contains() 1.List的contains(obj)方法 实际上,List调用contains(Object obj)方法时,会遍历List中的每一个元素, ...

  8. 用Webstorm 运行React-native 工程时,出错:xcrun: error: unable to find utility "instruments", not a developer tool or in PATH

    解决方法:在 终端执行如下命令 sudo xcode-select -s /Applications/Xcode.app/Contents/Developer/ 注意:前提是你已经安装了xcode

  9. python操作excel (openpyxl)

    最近看到好几次群里有人问xlwt.wlrd的问题,怎么说呢,如果是office2007刚出来,大家用xlsx文件用不习惯,还可以理解,这都10年过去了喂,就算没有进化到office2016,还在用of ...

  10. Orchard Core 文档翻译 (四)CMS ModulesTitle (OrchardCore.Title)

    Title (OrchardCore.Title) 标题模块提供Title Part ,允许用户定义内容项的标题.它还定义了ContentItemMetadata方面的DisplayText属性 Th ...