Evercookie is a Javascript API that produces extremely persistent cookies in a browser. Its goal is to identify a client even after they've removed standard cookies, Flash cookies (Local Shared Objects or LSOs), and others.
This is accomplished by storing the cookie data as many browser storage mechanisms as possible. If cookie data is removed from any of the storage mechanisms, evercookie aggressively re-creates it in each mechanism as long as one is still intact.
If the LSO mechanism is available, Evercookie may even propagate cookies between different browsers on the same client machine!
Client browsers must support as many of the following storage mechanisms as possible in order for Evercookie to be effective.
- Standard HTTP Cookies
- Flash Local Shared Objects
- Silverlight Isolated Storage
- CSS History Knocking
- Storing cookies in HTTP ETags
- Storing cookies in Web cache
- window.name caching
- Internet Explorer userData storage
- HTML5 Session Storage
- HTML5 Local Storage
- HTML5 Global Storage
- HTML5 Database Storage via SQLite
- HTML5 Canvas - Cookie values stored in RGB data of auto-generated, force-cached PNG images
To be implemented someday (perhaps by you?):
- Caching in HTTP Authentication
- Using Java to produce a unique key based off of NIC info
Be warned! Evercookie can potentially cause problems for you or your users.
-
Some storage mechanisms involve loading Silverlight or Flash in the client browser. On some machines this can be a very slow process with lots of disk thrashing. On older mobile devices this can render your site unusable.
-
CSS History Knocking can cause a large number of HTTP requests when a cookie is first being set.
-
In some circles, it is considered rude to use Evercookie. Consider your reputation and your audience when using Evercookie in production.
-
Browser vendors are doing their best to plug many of the holes exploited by Evercookie. This is a good thing for the Internet, but it means what works today may not work so well tomorrow.
You are responsible for your own decision to use Evercookie. Choose wisely.
Want to help improve this? Email samy or send a pull request!