描述:
evercookie是一个可用的JavaScript API 浏览器中非常持久的cookie。它的目标 是在客户删除标准后识别客户 Cookie,Flash Cookie(本地共享对象或LSO),以及其他。
evercookie通过存储cookie数据来实现这一目标 可用的几种类型的存储机制 本地浏览器。此外,如果evercookie找到了 用户已删除任何类型的cookie,它 使用每种可用机制重新创建它们。
具体来说,在创建新cookie时,它会使用 以下存储机制:
- Standard HTTP Cookies
(需要后端服务器)
- Local Shared Objects (Flash Cookies)
- Silverlight Isolated Storage
- Storing cookies in RGB values of auto-generated, force-cached
PNGs using HTML5 Canvas tag to read pixels (cookies) back out - Storing cookies in and reading out Web History
(需要后端 服务器)
- Storing cookies in HTTP ETags - Storing cookies in Web cache
(需要后端服务器)- window.name caching
evercookie就会在每个机制中积极地重新创建它
- Internet Explorer userData storage
- HTML5 Session Storage
- HTML5 Local Storage
- HTML5 Global Storage
- HTML5 Database Storage via SQLite
Evercookie旨在使持久性数据持久化。通过将相同的数据存储在客户端可以访问的多个位置,如果任何数据都会丢失(例如,通过清除cookie),数据可以恢复,然后重置和重用。简单地把它想象成不会消失的cookie.
如果用户删除了他们的cookie,只需要一个cookie来保留下来,。如果用户在一个浏览器上进行浏览并切换到另一个浏览器,只要它们仍然具有本地共享对象cookie,即cookie将在两个浏览器中重现。
客户端是否必须安装任何东西?客户只是在不知道的情况下使用网站正在设置持久性数据,就像他们使用标准网站一样HTTP cookie。
后端服务器:
某些存储机制需要后端服务器。该软件包附带了etag,cache和png后端服务器的PHP实现。
git地址:https://github.com/samyk/evercookie
破解方法:
就是删除历史记录后,一定不能在原窗口内刷新页面。一定要关闭当前窗口tab
。然后新开tab里面,再次访问对应的evercookie
,就可以看到并不能恢复cookie
值了。这就是由window.name
这个特殊的技术点,所决定的。
某些存储机制需要后端服务器。 该软件包附带了etag,cache和png后端服务器的PHP实现。
缺点和注意事项:
被警告!Evercookie可能会给您或您的用户带来问题。
-
某些存储机制涉及在客户端浏览器中加载Silverlight或Flash。在某些机器上,这可能是一个非常缓慢的过程,有很多磁盘抖动。在较旧的移动设备上,这可能会使您的网站无法使用。
-
CSS历史记录首次设置cookie时,敲门可能会导致大量HTTP请求。
-
在某些圈子里,使用Evercookie被认为是粗鲁的。在生产中使用Evercookie时,请考虑您的声誉和受众。
-
浏览器供应商正在尽最大努力填补Evercookie利用的许多漏洞。这对互联网来说是一件好事,但它意味着今天有效的东西明天可能效果不好。
您自己决定使用Evercookie。做出明智的选择。
使用示例:
<html>
<head>
<title>我的网页</title>
<script type ="text/javascript" src="./js/jquery.js"></script>
<script type ="text/javascript" src="./js/swfobject-2.2.min.js"></script>
<script type ="text/javascript" src="./js/evercookie.js"></script>
</head>
<body>
<button id="open">点我</button>
<script type ="text/javascript">
$(document).ready(function(){
$("#open").bind("click",function(){
var ec = new evercookie();
debugger;
ec.set("id","12345");
// ec.get("id",function(value){
// alert("cookid is "+ value);
// });
ec.get("id", getCookie);
});
function getCookie(best_candidate, all_candidates)
{
alert("The retrieved cookie is: " + best_candidate + "\n" +
"You can see what each storage mechanism returned " +
"by looping through the all_candidates object.");
for (var item in all_candidates)
document.write("Storage mechanism " + item +
" returned: " + all_candidates[item] + "<br>");
}
});
</script>
</body>
</html>