{"id":350899,"date":"2023-07-28T09:02:04","date_gmt":"2023-07-28T09:02:04","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=350899"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=350899","title":{"rendered":"<span>\u041a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 Evercookie \u0432 2023 \u0433\u043e\u0434\u0443<\/span>"},"content":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/289\/b7a\/bae\/289b7abaeae61d82aaf730db5977600e.jpg\" width=\"1920\" height=\"1080\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/289\/b7a\/bae\/289b7abaeae61d82aaf730db5977600e.jpg\" data-blurred=\"true\"\/><\/figure>\n<p><a href=\"https:\/\/ru.wikipedia.org\/wiki\/Evercookie\" rel=\"noopener noreferrer nofollow\">Evercookie<\/a> \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0443 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f, \u0435\u0441\u043b\u0438 \u0442\u043e\u0442 \u0443\u0434\u0430\u043b\u0438\u043b \u043a\u0443\u043a\u0438. \u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0446\u0435\u043b\u044c evercookie\u00a0\u2014 \u044d\u0442\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0432\u043e\u00a0\u0432\u0441\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440. \u0415\u0441\u043b\u0438 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0443\u0434\u0430\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u0437\u00a0\u043a\u0430\u043a\u043e\u0433\u043e\u00a0\u043b\u0438\u0431\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430, \u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0447\u0442\u0435\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438\u0437\u00a0\u0434\u0440\u0443\u0433\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430.<\/p>\n<p>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e evercookie \u043c\u043e\u0436\u043d\u043e \u0433\u043b\u044f\u043d\u0443\u0442\u044c \u0432\u00a0\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 \u043d\u0430\u00a0github\u00a0\u2014 <a href=\"https:\/\/github.com\/samyk\/evercookie\" rel=\"noopener noreferrer nofollow\"><u>https:\/\/github.com\/samyk\/evercookie<\/u><\/a>.<\/p>\n<p>\u041f\u0440\u0438\u043d\u0446\u0438\u043f \u0440\u0430\u0431\u043e\u0442\u044b evercookie \u043f\u043e \u0448\u0430\u0433\u0430\u043c:<\/p>\n<ol>\n<li>\n<p>\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430 (UID) \u0438\u0437\u00a0\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449.<\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u043f\u0440\u0438\u00a0\u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0438 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432\u00a0\u0431\u044b\u043b\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u044b \u0440\u0430\u0437\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f,\u0442\u043e \u0442\u043e\u0433\u0434\u0430 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u043b\u0443\u0447\u0448\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438\u0437\u00a0\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 (\u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c \u0438\u0437\u00a0\u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439).<\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 UID \u043d\u0435\u00a0\u043d\u0430\u0439\u0434\u0435\u043d, \u0442\u043e \u0442\u043e\u0433\u0434\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u0438\u0441\u0432\u043e\u0438\u0442\u044c \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440. \u0422\u0430\u043a \u043a\u0430\u043a\u00a0\u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u00a0\u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430\u0445 \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0442\u043e \u0434\u043b\u044f\u00a0\u043f\u043e\u043b\u043d\u043e\u0442\u044b \u0440\u0430\u0431\u043e\u0442\u044b\u00a0\u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0447\u0438\u0441\u043b\u043e\u0432\u043e\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u043e\u0449\u0435 \u0437\u0430\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u0442\u044c. <\/p>\n<\/li>\n<\/ol>\n<h2>\u041c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u044b \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445<\/h2>\n<p>\u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u043e \u043d\u0430\u00a0\u0441\u0435\u043c\u043d\u0430\u0434\u0446\u0430\u0442\u0438 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430\u0445 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f.<\/p>\n<ol>\n<li>\n<p>\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 cookie\u2011\u0444\u0430\u0439\u043b\u044b HTTP<\/p>\n<\/li>\n<li>\n<p>HTTP Strict Transport Security (HSTS)<\/p>\n<\/li>\n<li>\n<p>\u041b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u043e\u0431\u0449\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b (Flash cookies)<\/p>\n<\/li>\n<li>\n<p>\u0418\u0437\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 Silverlight<\/p>\n<\/li>\n<li>\n<p>\u0425\u0440\u0430\u043d\u0435\u043d\u0438\u0435 cookie\u2011\u0444\u0430\u0439\u043b\u043e\u0432, \u0437\u0430\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0432\u00a0\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u0445 RGB \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445, \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 PNG \u0441\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0442\u0435\u0433\u0430 HTML5\u00a0Canvas \u0434\u043b\u044f\u00a0\u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0433\u043e \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 (\u0444\u0430\u0439\u043b\u043e\u0432 cookie).<\/p>\n<\/li>\n<li>\n<p>\u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 cookie\u2011\u0444\u0430\u0439\u043b\u043e\u0432 \u0432\u00a0\u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u043f\u043e\u0438\u0441\u043a\u0430<\/p>\n<\/li>\n<li>\n<p>\u0425\u0440\u0430\u043d\u0435\u043d\u0438\u0435 cookie\u2011\u0444\u0430\u0439\u043b\u043e\u0432 \u0432\u00a0HTTP ETag<\/p>\n<\/li>\n<li>\n<p>\u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 cookie\u2011\u0444\u0430\u0439\u043b\u043e\u0432 \u0432\u00a0\u0432\u0435\u0431\u2011\u043a\u044d\u0448\u0435 <\/p>\n<\/li>\n<li>\n<p>\u041a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 window.name<\/p>\n<\/li>\n<li>\n<p>\u0425\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 Internet Explorer<\/p>\n<\/li>\n<li>\n<p>\u0412\u0435\u0431\u2011\u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0441\u0435\u0430\u043d\u0441\u043e\u0432 HTML5 <\/p>\n<\/li>\n<li>\n<p>\u041b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u0435\u0431\u2011\u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 HTML5<\/p>\n<\/li>\n<li>\n<p>\u0413\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 HTML5<\/p>\n<\/li>\n<li>\n<p>\u0411\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 HTML5\u00a0Web SQL \u0447\u0435\u0440\u0435\u0437 SQLite<\/p>\n<\/li>\n<li>\n<p>HTML5\u00a0IndexedDB<\/p>\n<\/li>\n<li>\n<p>Java JNLP PersistenceService<\/p>\n<\/li>\n<li>\n<p>\u042d\u043a\u0441\u043f\u043b\u043e\u0439\u0442 Java CVE-2013\u20130422<\/p>\n<\/li>\n<\/ol>\n<blockquote>\n<p>\u0421\u043f\u0438\u0441\u043e\u043a \u0432\u0437\u044f\u0442 \u0441 \u0412\u0438\u043a\u0438\u043f\u0435\u0434\u0438\u0438 \u0438 \u0441\u0440\u0430\u0432\u043d\u0435\u043d \u0441 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u043c\u0438 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430\u043c\u0438. <\/p>\n<p>\u041f\u043e\u0434 \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u043c \u043f\u0443\u043d\u043a\u0442 &#8212; \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 cookie\u2011\u0444\u0430\u0439\u043b\u043e\u0432 \u0432\u00a0\u0432\u0435\u0431\u2011\u043a\u044d\u0448\u0435. \u0415\u0441\u043b\u0438 \u0440\u0435\u0447\u044c \u0438\u0434\u0435\u0442 \u043f\u0440\u043e basic authorization, \u0442\u043e \u0442\u043e\u0433\u0434\u0430 \u0432\u0441\u0435 \u0445\u043e\u0440\u043e\u0448\u043e.<\/p>\n<\/blockquote>\n<p>\u041a\u0440\u0430\u0442\u043a\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u043e\u0432 \u0441 \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430 \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. <\/p>\n<h4>\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 cookie-\u0444\u0430\u0439\u043b\u044b HTTP<\/h4>\n<p><a href=\"https:\/\/developer.mozilla.org\/ru\/docs\/Web\/HTTP\/Cookies\" rel=\"noopener noreferrer nofollow\">HTTP-\u043a\u0443\u043a\u0438<\/a> \u2014 \u044d\u0442\u043e \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043a\u0443\u043a\u0438 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430. \u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0441\u0430\u0439\u0442\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u043a\u0443\u043a\u0438 \u0434\u043b\u044f\u00a0\u0441\u0435\u0441\u0441\u0438\u0439 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432. \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043f\u043e\u0441\u0435\u0449\u0430\u0435\u0442 \u0441\u0430\u0439\u0442 \u0438 \u0435\u043c\u0443 \u0441\u0435\u0440\u0432\u0435\u0440 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u0432\u00a0\u043a\u0443\u043a\u0438 UID, \u043f\u043e\u00a0\u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0432\u00a0\u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u0441\u0435\u0440\u0432\u0435\u0440 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u0447\u0442\u043e\u00a0\u0437\u0430\u00a0\u043a\u043b\u0438\u0435\u043d\u0442 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435.<\/p>\n<h4>HTTP Strict Transport Security (HSTS)<\/h4>\n<p><a href=\"https:\/\/developer.mozilla.org\/ru\/docs\/Web\/HTTP\/Headers\/Strict-Transport-Security\" rel=\"noopener noreferrer nofollow\">HTTP Strict Transport Security<\/a> \u2014 \u044d\u0442\u043e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0434\u043b\u044f\u00a0\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0437\u0430\u0449\u0438\u0449\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0432\u00a0\u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435 \u0438 \u0441\u0432\u044f\u0437\u0430\u043d \u0441\u00a0\u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u043c \u0434\u043e\u043c\u0435\u043d\u043e\u043c \u0438 \u043f\u043e\u0434\u0434\u043e\u043c\u0435\u043d\u0430\u043c\u0438. \u041c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043d\u0430\u0431\u043e\u0440 \u0434\u043e\u043c\u0435\u043d\u043e\u0432, \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u0445 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u043e\u0436\u0435\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u00ab\u0434\u0430\u00bb \u0438\u043b\u0438 \u00ab\u043d\u0435\u0442\u00bb. \u0424\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u043e\u0434\u0438\u043d \u0434\u043e\u043c\u0435\u043d \u044d\u0442\u043e \u043e\u0434\u0438\u043d \u0431\u0438\u0442, \u0435\u0441\u043b\u0438 \u0432\u0437\u044f\u0442\u044c 32\u00a0\u0434\u043e\u043c\u0435\u043d\u0430, \u0442\u043e \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u0442\u044c int. <\/p>\n<p>\u041d\u0430\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u043f\u0440\u0438\u0441\u0432\u043e\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0440\u0430\u0432\u043d\u043e\u0435 21, \u0442\u043e \u0432\u00a0\u0434\u0432\u043e\u0438\u0447\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442: 00\u00a0000\u00a0000\u00a0000\u00a0000\u00a0000\u00a0000\u00a0000\u00a0000\u00a0010\u00a0101. <\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u0434\u043e\u043c\u0435\u043d\u043e\u0432 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 0 \u0438\u043b\u0438 1, \u0433\u0434\u0435 \u0441\u0435\u0440\u0432\u0435\u0440 \u0441\u0435\u0431\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043b\u0438 <code>HSTS<\/code> \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0434\u043e\u043c\u0435\u043d\u0430. \u041f\u043e\u0441\u043b\u0435 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449, \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0438\u0442\u044c \u0443 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 \u0434\u043e\u043c\u0435\u043d\u043e\u0432 \u043d\u0443\u0436\u043d\u043e \u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>https<\/code>. \u0418 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0432 \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432 \u0447\u0438\u0441\u043b\u043e \u0438\u0437 \u0434\u0432\u043e\u0438\u0447\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u0442\u0435\u0440\u0442\u044b\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440.<\/p>\n<h4>\u041b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u043e\u0431\u0449\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b (Flash cookies)<\/h4>\n<p><a href=\"https:\/\/ru.wikipedia.org\/wiki\/Adobe_Flash\" rel=\"noopener noreferrer nofollow\">Adobe Flash<\/a> &#8212; \u043e\u0434\u043d\u0430 \u0438\u0437\u00a0\u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0439 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0439 \u0432\u00a0\u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435. \u0424\u043b\u0435\u0448 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043d\u0430\u00a0\u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u043c \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435, \u043d\u043e\u00a0\u0438\u0437\u2011\u0437\u0430 \u0441\u0432\u043e\u0435\u0439 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u044d\u0442\u043e\u0433\u043e \u0443\u0436\u0435 \u043d\u0438\u043a\u0442\u043e \u043d\u0435\u00a0\u0434\u0435\u043b\u0430\u0435\u0442. \u041c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u043a\u0435\u0448\u0430 flash. \u041d\u0430\u0432\u0435\u0440\u043d\u043e\u0435, \u044d\u0442\u043e \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435, \u0442\u0440\u0443\u0434\u043d\u043e \u0443\u0434\u0430\u043b\u044f\u0435\u043c\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0442\u0430\u043a \u043a\u0430\u043a\u00a0\u0435\u0433\u043e \u0441\u043b\u043e\u0436\u043d\u043e \u0441\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u0432\u00a0\u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435.<\/p>\n<p>\u0421\u0442\u043e\u0438\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u0440\u0435\u0448\u0435\u043d\u0438\u044f. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u044d\u0442\u043e\u0442 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0434\u043e\u00a0\u0441\u0438\u0445 \u043f\u043e\u0440.<\/p>\n<blockquote>\n<p>\u042f \u043e\u0442\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u043e\u0442 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u043e\u00a0\u0444\u043b\u0435\u0448\u0435, \u0442\u0430\u043a \u043a\u0430\u043a\u00a0\u0432\u0441\u0435 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u044b \u0431\u0443\u0434\u0443\u0442 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e. \u0410\u00a0\u043e\u0431\u0445\u043e\u0434\u043d\u044b\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0434\u043b\u044f\u00a0\u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u0441\u043e\u043c\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438.<\/p>\n<\/blockquote>\n<h4>\u0418\u0437\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 Silverlight  <\/h4>\n<p><a href=\"https:\/\/ru.wikipedia.org\/wiki\/Microsoft_Silverlight\" rel=\"noopener noreferrer nofollow\">Silverlight<\/a> \u2014 \u044d\u0442\u043e \u0430\u043d\u0430\u043b\u043e\u0433 flash \u043e\u0442\u00a0Microsoft. \u041c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u0435\u043d \u0444\u043b\u0435\u0448\u0443, \u0433\u0434\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u043a\u0435\u0448.<\/p>\n<blockquote>\n<p>\u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0434\u043e\u00a0\u0441\u0438\u0445 \u043f\u043e\u0440, \u043e\u0434\u043d\u0430\u043a\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0441\u00a0\u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u043c <code>silverlight<\/code> \u0441\u0442\u0440\u0435\u043c\u0438\u0442\u0441\u044f \u043a\u00a0\u043d\u0443\u043b\u044e. <\/p>\n<\/blockquote>\n<p><strong>\u0425\u0440\u0430\u043d\u0435\u043d\u0438\u0435 cookie\u2011\u0444\u0430\u0439\u043b\u043e\u0432, \u0437\u0430\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0432\u00a0\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u0445 RGB \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445, \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 PNG \u0441\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0442\u0435\u0433\u0430 HTML5\u00a0Canvas \u0434\u043b\u044f\u00a0\u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0433\u043e \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 (\u0444\u0430\u0439\u043b\u043e\u0432 cookie).<\/strong><\/p>\n<p>\u041c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d \u043d\u0430\u00a0\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0438 \u0435\u0433\u043e \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438. \u041f\u0440\u0438\u00a0\u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f, \u0438\u0434\u0435\u0442 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0435 \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0441\u0442\u0435\u0440\u0442\u044b\u0439 UID.<\/p>\n<h4>\u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 cookie-\u0444\u0430\u0439\u043b\u043e\u0432 \u0432 \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u043f\u043e\u0438\u0441\u043a\u0430<\/h4>\n<p>\u041c\u0435\u0442\u043e\u0434 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u043d\u0430\u00a0\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0438 \u043f\u043e\u0441\u0435\u0449\u0435\u043d\u043d\u044b\u0445 \u0441\u0430\u0439\u0442\u043e\u0432. \u0420\u0430\u043d\u044c\u0448\u0435 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u043b \u043f\u043e\u043d\u044f\u0442\u044c, \u043f\u043e\u0441\u0435\u0449\u0435\u043d\u00a0\u043b\u0438 \u0441\u0430\u0439\u0442 \u0440\u0430\u043d\u0435\u0435 \u0441\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u0441\u0435\u0432\u0434\u043e\u043a\u043b\u0430\u0441\u0441\u0430 <code>:visited<\/code> \u0432\u00a0CSS. \u0412\u00a0\u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442, Javascript \u043d\u0435\u00a0\u0438\u043c\u0435\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a\u00a0\u0434\u0430\u043d\u043d\u043e\u043c\u0443 \u043f\u0441\u0435\u0432\u0434\u043e\u043a\u043b\u0430\u0441\u0441\u0443 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0441\u0441\u044b\u043b\u043a\u0438. <\/p>\n<h4>\u0425\u0440\u0430\u043d\u0435\u043d\u0438\u0435 cookie-\u0444\u0430\u0439\u043b\u043e\u0432 \u0432 HTTP ETag<\/h4>\n<p><a href=\"https:\/\/developer.mozilla.org\/ru\/docs\/Web\/HTTP\/Headers\/ETag\" rel=\"noopener noreferrer nofollow\">Etag<\/a>\u00a0\u2014 \u044d\u0442\u043e \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0432\u0435\u0440\u0441\u0438\u044e \u0440\u0435\u0441\u0443\u0440\u0441\u0430. \u041c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432\u00a0\u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u043d\u0438\u0438 UID \u0432\u0435\u0440\u0441\u0438\u0438 etag.<\/p>\n<p><strong>\u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 cookie\u2011\u0444\u0430\u0439\u043b\u043e\u0432 \u0432\u00a0\u0432\u0435\u0431\u2011\u043a\u044d\u0448\u0435 (Basic Authentication cache)<\/strong><\/p>\n<p>\u0420\u0430\u043d\u044c\u0448\u0435 \u043f\u0440\u0438\u00a0\u0431\u0430\u0437\u043e\u0432\u043e\u0439 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u043c\u043e\u0436\u043d\u043e\u00a0\u0431\u044b\u043b\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043a\u0435\u0448. \u041c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0441\u0442\u0440\u043e\u0438\u043b\u0441\u044f \u043d\u0430\u00a0\u0437\u0430\u043f\u0438\u0441\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043d\u0430\u00a0\u0441\u0435\u0440\u0432\u0435\u0440. \u0414\u043b\u044f\u00a0\u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f\u00a0\u0431\u044b\u043b\u0430 \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0441\u00a0\u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u0433\u0434\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u0430\u0441\u044c \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f. <\/p>\n<blockquote>\n<p>\u042f \u043b\u0438\u0447\u043d\u043e \u0441\u0430\u043c \u043d\u0435 \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u043b\u0441\u044f \u0441 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u043c \u0438 \u0432 \u043f\u043e\u0437\u0434\u043d\u0438\u0445 \u043a\u043e\u043c\u043c\u0438\u0442\u0430\u0445 \u044d\u0442\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0432\u044b\u043a\u043b\u044e\u0447\u0438\u043b\u0438.\u00a0<\/p>\n<\/blockquote>\n<h4>\u041a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 window.name<\/h4>\n<p>\u0423\u00a0\u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 <a href=\"https:\/\/developer.mozilla.org\/ru\/docs\/Web\/API\/Window\" rel=\"noopener noreferrer nofollow\">Window<\/a> \u0435\u0441\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c\u043e\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e\u00a0\u2014 <code>name<\/code>, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0437\u0430\u0434\u0430\u0435\u0442 \u0438\u043c\u044f \u043e\u043a\u043d\u0430. \u041e\u0431\u044b\u0447\u043d\u043e \u0441\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e \u044d\u0442\u043e\u0433\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u043b\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u043c\u0435\u0436\u0434\u0443 \u043e\u043a\u043d\u0430\u043c\u0438. <\/p>\n<p>\u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 <code>window.name<\/code> &#8212; \u044d\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0434\u0430\u0436\u0435 \u043f\u0440\u0438\u00a0\u043e\u0447\u0438\u0441\u0442\u043a\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449. <\/p>\n<p>\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u0432\u00a0\u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u043f\u0430\u043d\u0435\u043b\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0438 \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u0432\u043e\u00a0\u0432\u043a\u043b\u0430\u0434\u043a\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0438\u0445 \u0438\u00a0\u043d\u0435\u00a0\u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443, \u0442\u043e \u0438\u043c\u044f \u043e\u043a\u043d\u0430 \u043d\u0435\u00a0\u0431\u0443\u0434\u0435\u0442 \u0441\u0431\u0440\u043e\u0448\u0435\u043d\u043e, \u0430\u00a0\u0437\u043d\u0430\u0447\u0438\u0442 evercookie \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0430 \u0438 \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u0441\u043d\u043e\u0432\u0430 \u0432\u0435\u0437\u0434\u0435.<\/p>\n<h4>\u0425\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 Internet Explorer<\/h4>\n<p>\u041c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0437\u0430\u043f\u0438\u0441\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u00a0IE. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0434\u043e\u00a0\u0441\u0438\u0445 \u043f\u043e\u0440, \u043d\u043e\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 IE \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u0442\u0441\u044f, \u0438 \u0441\u043a\u043e\u0440\u043e \u0441\u043e\u0432\u0441\u0435\u043c \u0438\u0441\u0447\u0435\u0437\u043d\u0435\u0442.<\/p>\n<p>\u041c\u0435\u0442\u043e\u0434 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d \u043d\u0430\u00a0\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 div \u0438 \u0437\u0430\u043f\u0438\u0441\u0438 UID. \u041f\u0440\u0438\u00a0\u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438\u0437\u00a0\u043a\u0435\u0448\u0430. <\/p>\n<blockquote>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 IE, \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u0434\u0435\u044f\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0432\u0441\u0435 \u0442\u0430\u043a \u0438 \u0435\u0441\u0442\u044c. \u042f \u043d\u0435 \u0443\u0433\u043b\u0443\u0431\u043b\u044f\u043b\u0441\u044f \u0432 \u0434\u0430\u043d\u043d\u0443\u044e \u0442\u0435\u0445\u043d\u0438\u043a\u0443.\u00a0<\/p>\n<\/blockquote>\n<h4>\u0412\u0435\u0431-\u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0441\u0435\u0430\u043d\u0441\u043e\u0432 HTML5<\/h4>\n<p><a href=\"https:\/\/developer.mozilla.org\/ru\/docs\/Web\/API\/Window\/sessionStorage\" rel=\"noopener noreferrer nofollow\">SessionStorage<\/a> \u2014 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0434\u043b\u044f\u00a0\u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0435\u0441\u0441\u0438\u0438. \u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0447\u0438\u0449\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0438 \u0441\u0435\u0441\u0441\u0438\u0438. <\/p>\n<p>\u041c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u00a0\u0437\u0430\u043f\u0438\u0441\u0438 \u043a\u043b\u044e\u0447\u0430 \u0432\u00a0\u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0438 \u0435\u0433\u043e \u0447\u0442\u0435\u043d\u0438\u0438.<\/p>\n<blockquote>\n<p>\u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043a\u0430\u043a \u0447\u0430\u0441\u044b.<\/p>\n<\/blockquote>\n<h4>\u041b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u0435\u0431-\u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 HTML5<\/h4>\n<p><a href=\"https:\/\/developer.mozilla.org\/ru\/docs\/Web\/API\/Window\/localStorage\" rel=\"noopener noreferrer nofollow\">LocalStorage<\/a>\u00a0\u2014 \u044d\u0442\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0434\u043b\u044f\u00a0\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445. \u0414\u0430\u043d\u043d\u044b\u0435 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u043f\u043e\u043a\u0430 \u043d\u0435\u00a0\u0431\u0443\u0434\u0443\u0442 \u043e\u0447\u0438\u0449\u0435\u043d\u044b \u0432\u0440\u0443\u0447\u043d\u0443\u044e. \u041c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d \u043d\u0430\u00a0\u0437\u0430\u043f\u0438\u0441\u0438 \u043a\u043b\u044e\u0447\u0430 \u0432\u00a0\u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0438 \u0435\u0433\u043e \u0447\u0442\u0435\u043d\u0438\u0438.<\/p>\n<h4>\u0413\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 HTML5<\/h4>\n<p>\u041a\u0440\u043e\u0441\u0441\u0434\u043e\u043c\u0435\u043d\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0440\u0430\u043d\u044c\u0448\u0435\u00a0\u0431\u044b\u043b\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u0434\u043b\u044f\u00a0\u0437\u0430\u043f\u0438\u0441\u0438 \u0438 \u0447\u0442\u0435\u043d\u0438\u044f. \u0412\u00a0\u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0435\u00a0\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e. <\/p>\n<p>\u041c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u0435\u043d <code>LocalStorage<\/code> \u0438 <code>SessionStorage<\/code>.<\/p>\n<h4>\u0411\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 HTML5 Web SQL \u0447\u0435\u0440\u0435\u0437 SQLite<\/h4>\n<p><a href=\"https:\/\/ru.wikipedia.org\/wiki\/Web_SQL\" rel=\"noopener noreferrer nofollow\">Web SQL<\/a> \u00a0\u2014 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0430\u044f \u0431\u0430\u0437\u0430 SQLite \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430\u044f \u0432\u00a0\u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435. <\/p>\n<p>\u041c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432\u00a0\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043d\u043e\u0432\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0438 \u0437\u0430\u043f\u0438\u0441\u0438 \u0442\u0443\u0434\u0430 UID. \u0422\u0430\u043a \u043a\u0430\u043a\u00a0\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435\u00a0\u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0435\u0442\u0441\u044f, \u0442\u043e \u0441\u043a\u043e\u0440\u043e \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u044b \u043f\u0440\u0435\u043a\u0440\u0430\u0442\u044f\u0442 \u0435\u0433\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443. <\/p>\n<h4>HTML5 IndexedDB<\/h4>\n<p><a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/IndexedDB_API\" rel=\"noopener noreferrer nofollow\">IndexedDB<\/a>\u00a0\u2014 \u044d\u0442\u043e \u0437\u0430\u043c\u0435\u043d\u0430 Web SQL. <\/p>\n<p>\u041c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u0442\u0430\u043a\u043e\u0439\u00a0\u0436\u0435 \u043a\u0430\u043a\u00a0\u0438 \u043f\u0440\u0438\u00a0Web SQL. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0430, \u0430\u00a0\u0437\u0430\u0442\u0435\u043c \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f UID.<\/p>\n<h4>Java JNLP PersistenceService<\/h4>\n<p><a href=\"https:\/\/docs.oracle.com\/javase%2F9%2Fdocs%2Fapi%2F%2F\/javax\/jnlp\/PersistenceService.html\" rel=\"noopener noreferrer nofollow\">PersistenceService<\/a>\u00a0\u2014 \u044d\u0442\u043e \u0441\u0435\u0440\u0432\u0438\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432\u00a0\u043a\u0435\u0448\u0435 \u0441\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e java.<\/p>\n<p>\u041c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044e Java Applet, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0443\u043c\u0435\u0440\u043b\u0430 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441\u00a0Flash \u0438 Silverlight. <\/p>\n<blockquote>\n<p>\u041e\u043d\u0430 \u0447\u0430\u0441\u0442\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432, \u0436\u0434\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u044b. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u00a0\u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u043c \u0432\u0435\u0431\u0435 \u0441\u043e\u043c\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e.<\/p>\n<\/blockquote>\n<h4>\u042d\u043a\u0441\u043f\u043b\u043e\u0439\u0442 Java CVE-2013-0422<\/h4>\n<p>\u042d\u043a\u0441\u043f\u043b\u043e\u0439\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043b\u044e\u0431\u043e\u0439 \u043a\u043e\u0434 \u0438\u0437\u2011\u0437\u0430 \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0439 \u043e\u0448\u0438\u0431\u043a\u0438. \u041f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e \u043a\u00a0\u0441\u0442\u0430\u0440\u044b\u043c \u0432\u0435\u0440\u0441\u0438\u044f\u043c Java. <\/p>\n<p>\u0412 \u0438\u0442\u043e\u0433\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u043d\u0430 2023 \u0433\u043e\u0434 \u0441\u043f\u0438\u0441\u043e\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0445 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u043e\u0432:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td data-colwidth=\"84\" width=\"84\">\n<p align=\"center\"><strong>+\/-<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"center\"><strong>\u041c\u0435\u0442\u043e\u0434<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"84\" width=\"84\">\n<p align=\"center\">+<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 cookie-\u0444\u0430\u0439\u043b\u044b HTTP\u00a0<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"84\" width=\"84\">\n<p align=\"center\">+<\/p>\n<\/td>\n<td>\n<p align=\"left\">HSTS<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"84\" width=\"84\">\n<p align=\"center\">&#8212;<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u043e\u0431\u0449\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b*<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"84\" width=\"84\">\n<p align=\"center\">&#8212;<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0418\u0437\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 Silverlight*<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"84\" width=\"84\">\n<p align=\"center\">+<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0425\u0440\u0430\u043d\u0435\u043d\u0438\u0435 cookie-\u0444\u0430\u0439\u043b\u043e\u0432, \u0437\u0430\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u0445 RGB \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445, \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445\u00a0<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"84\" width=\"84\">\n<p align=\"center\">&#8212;<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 cookie-\u0444\u0430\u0439\u043b\u043e\u0432 \u0432 \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u043f\u043e\u0438\u0441\u043a\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"84\" width=\"84\">\n<p align=\"center\">+<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0425\u0440\u0430\u043d\u0435\u043d\u0438\u0435 cookie-\u0444\u0430\u0439\u043b\u043e\u0432 \u0432 HTTP ETag<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"84\" width=\"84\">\n<p align=\"center\">&#8212;<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 cookie-\u0444\u0430\u0439\u043b\u043e\u0432 \u0432 \u0432\u0435\u0431-\u043a\u044d\u0448\u0435 (Basic Authentication cache)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"84\" width=\"84\">\n<p align=\"center\">+<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 window.name<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"84\" width=\"84\">\n<p align=\"center\">&#8212;<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0425\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 Internet Explorer*<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"84\" width=\"84\">\n<p align=\"center\">+<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0412\u0435\u0431-\u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0441\u0435\u0430\u043d\u0441\u043e\u0432 HTML5<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"84\" width=\"84\">\n<p align=\"center\">+<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u0435\u0431-\u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 HTML5<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"84\" width=\"84\">\n<p align=\"center\">&#8212;<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0413\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 HTML5<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"84\" width=\"84\">\n<p align=\"center\">+<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0411\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 HTML5 Web SQL \u0447\u0435\u0440\u0435\u0437 SQLite<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"84\" width=\"84\">\n<p align=\"center\">+<\/p>\n<\/td>\n<td>\n<p align=\"left\">HTML5 IndexedDB<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"84\" width=\"84\">\n<p align=\"center\">&#8212;<\/p>\n<\/td>\n<td>\n<p align=\"left\">Java JNLP PersistenceService*<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"84\" width=\"84\">\n<p align=\"center\">&#8212;<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u042d\u043a\u0441\u043f\u043b\u043e\u0439\u0442 Java CVE-2013-0422*<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0412\u0441\u0435 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u044b \u043f\u043e\u043c\u0435\u0447\u0435\u043d\u043d\u044b\u0435 \u0437\u0432\u0435\u0437\u0434\u043e\u0447\u043a\u043e\u0439 \u0441\u043a\u043e\u0440\u0435\u0435 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442, \u0447\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442.\u00a0<\/p>\n<blockquote>\n<p>\u041e\u0431\u044b\u0447\u043d\u043e \u044d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u0441\u0442\u0430\u0440\u044b\u0435 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u044b, \u043f\u0440\u0438\u0447\u0435\u043c \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043d\u044b\u0435.<\/p>\n<\/blockquote>\n<p>\u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u043f\u043e\u0434 \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u043c HSTS. \u041f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e, \u0432\u0441\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c, \u043d\u043e \u0441\u0442\u043e\u0438\u0442 \u044d\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c.\u00a0<\/p>\n<h2>\u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043b\u0438 \u044d\u0442\u043e \u0432\u0441\u0435 \u0432 2023 \u0433\u043e\u0434\u0443<\/h2>\n<p>\u0415\u0441\u043b\u0438 \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u0445, \u0442\u043e \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0441\u0442\u0430\u0440\u044b\u0445 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0431\u044b\u043b\u0430 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0430 \u0432 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430\u0445. <\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u043e\u0432\u0443\u044e \u0441\u0435\u0441\u0441\u0438\u044e, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u043d\u043e\u0432\u0443\u044e \u0432\u043a\u043b\u0430\u0434\u043a\u0443 \u0432 \u0438\u043d\u043a\u043e\u0433\u043d\u0438\u0442\u043e. \u0422\u0435\u043a\u0443\u0449\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f evercookie \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u0442 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435.<\/p>\n<p><strong>\u0414\u043b\u044f \u0447\u0435\u0433\u043e \u0442\u043e\u0433\u0434\u0430 \u0441\u0442\u043e\u0438\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c evercookie?<\/strong><\/p>\n<p>Evercookie \u0445\u043e\u0440\u043e\u0448\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0434\u043b\u044f \u043e\u0431\u044b\u0447\u043d\u044b\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u0447\u0438\u0441\u0442\u044f\u0442 \u0438\u0441\u0442\u043e\u0440\u0438\u044e, \u043d\u0435 \u0443\u0434\u0430\u043b\u044f\u044e\u0442 \u043a\u0443\u043a\u0438. \u042d\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0447\u0442\u043e\u0431\u044b \u0441\u0432\u044f\u0437\u0430\u0442\u044c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0441 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c. \u0414\u043b\u044f \u044d\u0442\u0438\u0445 \u0446\u0435\u043b\u0435\u0439 \u044d\u0432\u0435\u0440\u043a\u0443\u043a\u0430 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e.<\/p>\n<p><strong>\u0414\u0440\u0443\u0433\u0438\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438 \u044d\u0442\u043e \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043a\u0430\u043a \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0432\u0435\u0447\u043d\u044b\u0445 \u043a\u0443\u043a?<\/strong><\/p>\n<p>\u0415\u0441\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b, \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 &#8212; \u0444\u0438\u043d\u0433\u0435\u0440\u043f\u0440\u0438\u043d\u0442\u0438\u043d\u0433. \u041e\u0434\u043d\u0430 \u0438\u0437 \u0442\u0435\u0445\u043d\u0438\u043a \u044d\u0442\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u0448\u0440\u0438\u0444\u0442\u043e\u0432 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435. <\/p>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e, \u0441\u0442\u043e\u0438\u0442 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c, \u0447\u0442\u043e \u0432\u0441\u0435 \u0444\u0438\u043d\u0433\u0435\u0440\u043f\u0440\u0438\u043d\u0442\u044b \u043d\u0435 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b. \u0415\u0441\u043b\u0438 \u0432\u0437\u044f\u0442\u044c \u0434\u0432\u0430 \u043d\u043e\u0432\u044b\u0445 iphone, \u043e\u0434\u043d\u043e\u0439 \u0441\u0435\u0440\u0438\u0438 \u0438 \u043c\u043e\u0434\u0435\u043b\u0438 \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043d\u0430 \u043d\u0438\u0445 \u0444\u0438\u043d\u0433\u0435\u0440\u043f\u0440\u0438\u043d\u0442\u044b, \u0442\u043e \u043e\u043d\u0438 \u0441\u043e\u0432\u043f\u0430\u0434\u0443\u0442 \u0441 99.99% \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c\u044e.<\/p>\n<h2>\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u0441\u043f\u043e\u0441\u043e\u0431\u044b<\/h2>\n<p>\u0423 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044f \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u044f\u0432\u0438\u0442\u044c\u0441\u044f \u0432\u043e\u043f\u0440\u043e\u0441, \u0430 \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u043b\u0438 \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u043d\u043e\u0432\u044b\u0435 \u0441\u043f\u043e\u0441\u043e\u0431\u044b \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f?<\/p>\n<p>\u0418\u0437 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 &#8212; \u044d\u0442\u043e supercookie \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u0430\u044f \u043d\u0430 \u0444\u0430\u0432\u0438\u043a\u043e\u043d\u0430\u0445. \u041f\u0440\u043e\u0435\u043a\u0442 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0442\u0443\u0442 &#8212; <a href=\"https:\/\/github.com\/jonasstrehle\/supercookie\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/jonasstrehle\/supercookie<\/a>.<\/p>\n<blockquote>\n<p>\u0423\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 chrome 111. <\/p>\n<\/blockquote>\n<p>\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 <a class=\"mention\" href=\"\/company\/itsumma\">ITSumma<\/a> &#8212; <a href=\"https:\/\/habr.com\/ru\/companies\/itsumma\/articles\/542734\/\" rel=\"noopener noreferrer nofollow\">\u042d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0444\u0438\u043d\u0433\u0435\u0440\u043f\u0440\u0438\u043d\u0442\u0438\u043d\u0433 \u0447\u0435\u0440\u0435\u0437 \u043a\u044d\u0448 \u0444\u0430\u0432\u0438\u043a\u043e\u043d\u043e\u0432 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435<\/a>.  <\/p>\n<p>\u0422\u0430\u043a\u0436\u0435 \u0435\u0441\u0442\u044c issue \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u044d\u0432\u0435\u0440\u043a\u0443\u043a\u0438 <a href=\"https:\/\/github.com\/samyk\/evercookie\/issues\/136\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/samyk\/evercookie\/issues\/136<\/a>, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u0435\u0442\u0441\u044f \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u044d\u0448 TLS \u0441\u0435\u0441\u0441\u0438\u0438. <\/p>\n<blockquote>\n<p>\u041c\u043d\u0435 \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u044d\u0442\u043e \u0438\u043b\u0438 \u043d\u0435\u0442. \u041d\u0443\u0436\u043d\u043e \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c.<\/p>\n<\/blockquote>\n<h2>\u0417\u0430\u0447\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Evercookie<\/h2>\n<p>\u041a\u0430\u043a\u00a0\u0433\u043e\u0432\u043e\u0440\u0438\u043b\u043e\u0441\u044c \u0440\u0430\u043d\u044c\u0448\u0435, \u044d\u0432\u0435\u0440\u043a\u0443\u043a\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u0441\u0435\u0441\u0441\u0438\u044e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0434\u0430\u0436\u0435 \u043f\u043e\u0441\u043b\u0435 \u043e\u0447\u0438\u0441\u0442\u043a\u0438 \u0438\u043c \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u043a\u0443\u043a. <\/p>\n<p>\u0412\u00a0\u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u044d\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043b\u044f\u00a0\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0430\u043d\u0442\u0438\u0444\u0440\u043e\u0434 \u0441\u0438\u0441\u0442\u0435\u043c\u044b. \u041e\u0431\u044b\u0447\u043d\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435\u00a0\u0431\u0443\u0434\u0435\u0442 \u0443\u0434\u0430\u043b\u044f\u0442\u044c \u0441\u0432\u043e\u0438 \u0434\u0430\u043d\u043d\u044b\u0435, \u0430\u00a0\u0432\u043e\u0442 \u043c\u043e\u0448\u0435\u043d\u043d\u0438\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0438 \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u0437\u0430\u043c\u0435\u0441\u0442\u0438 \u0441\u043b\u0435\u0434\u044b.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u043a\u043b\u0438\u0435\u043d\u0442 \u0431\u0443\u0434\u0435\u0442 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430\u00a0\u0441\u0430\u0439\u0442\u0435 \u0441\u00a0\u043e\u0434\u043d\u043e\u0439 \u0438 \u0442\u043e\u0439\u00a0\u0436\u0435 evercookie, \u0442\u043e \u0432\u00a0\u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u0432\u044f\u0437\u0430\u0442\u044c \u0432\u0441\u0435 \u044d\u0442\u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0432\u00a0\u0435\u0434\u0438\u043d\u043e\u0435 \u0446\u0435\u043b\u043e\u0435 \u0438 \u0447\u0442\u043e\u2011\u0442\u043e \u0441\u00a0\u044d\u0442\u0438\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c.<\/p>\n<h2>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 Evercookie<\/h2>\n<p>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0432 <a href=\"https:\/\/github.com\/samyk\/evercookie\" rel=\"noopener noreferrer nofollow\">\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438<\/a>:<\/p>\n<pre><code class=\"bash\">\u251c\u2500\u2500 assets \u2502   \u251c\u2500\u2500 EvercookieCacheServlet.java \u2502   \u251c\u2500\u2500 EvercookieEtagServlet.java \u2502   \u251c\u2500\u2500 evercookie.fla \u2502   \u251c\u2500\u2500 evercookie.jar \u2502   \u251c\u2500\u2500 evercookie.jnlp \u2502   \u251c\u2500\u2500 EvercookiePngServlet.java \u2502   \u251c\u2500\u2500 evercookie_sl \u2502   \u2502   \u251c\u2500\u2500 evercookie \u2502   \u2502   \u2502   \u251c\u2500\u2500 App.xaml \u2502   \u2502   \u2502   \u251c\u2500\u2500 App.xaml.cs \u2502   \u2502   \u2502   \u251c\u2500\u2500 Bin \u2502   \u2502   \u2502   \u2502   \u2514\u2500\u2500 Debug \u2502   \u2502   \u2502   \u2502       \u251c\u2500\u2500 AppManifest.xaml \u2502   \u2502   \u2502   \u2502       \u251c\u2500\u2500 evercookie.dll \u2502   \u2502   \u2502   \u2502       \u251c\u2500\u2500 evercookie.pdb \u2502   \u2502   \u2502   \u2502       \u251c\u2500\u2500 evercookieTestPage.html \u2502   \u2502   \u2502   \u2502       \u2514\u2500\u2500 evercookie.xap \u2502   \u2502   \u2502   \u251c\u2500\u2500 evercookie.csproj \u2502   \u2502   \u2502   \u251c\u2500\u2500 evercookie.csproj.user \u2502   \u2502   \u2502   \u251c\u2500\u2500 MainPage.xaml \u2502   \u2502   \u2502   \u251c\u2500\u2500 MainPage.xaml.cs \u2502   \u2502   \u2502   \u251c\u2500\u2500 obj \u2502   \u2502   \u2502   \u2502   \u2514\u2500\u2500 Debug \u2502   \u2502   \u2502   \u2502       \u251c\u2500\u2500 App.g.cs \u2502   \u2502   \u2502   \u2502       \u251c\u2500\u2500 App.g.i.cs \u2502   \u2502   \u2502   \u2502       \u251c\u2500\u2500 DesignTimeResolveAssemblyReferences.cache \u2502   \u2502   \u2502   \u2502       \u251c\u2500\u2500 DesignTimeResolveAssemblyReferencesInput.cache \u2502   \u2502   \u2502   \u2502       \u251c\u2500\u2500 evercookie.csproj.FileListAbsolute.txt \u2502   \u2502   \u2502   \u2502       \u251c\u2500\u2500 evercookie.dll \u2502   \u2502   \u2502   \u2502       \u251c\u2500\u2500 evercookie.g.resources \u2502   \u2502   \u2502   \u2502       \u251c\u2500\u2500 evercookie.pdb \u2502   \u2502   \u2502   \u2502       \u251c\u2500\u2500 MainPage.g.cs \u2502   \u2502   \u2502   \u2502       \u251c\u2500\u2500 MainPage.g.i.cs \u2502   \u2502   \u2502   \u2502       \u2514\u2500\u2500 XapCacheFile.xml \u2502   \u2502   \u2502   \u2514\u2500\u2500 Properties \u2502   \u2502   \u2502       \u251c\u2500\u2500 AppManifest.xml \u2502   \u2502   \u2502       \u2514\u2500\u2500 AssemblyInfo.cs \u2502   \u2502   \u251c\u2500\u2500 evercookie.sln \u2502   \u2502   \u2514\u2500\u2500 evercookie.suo \u2502   \u251c\u2500\u2500 evercookie.swf \u2502   \u2514\u2500\u2500 evercookie.xap \u251c\u2500\u2500 ChangeLog \u251c\u2500\u2500 css \u2502   \u2514\u2500\u2500 master.css \u251c\u2500\u2500 index.html \u251c\u2500\u2500 js \u2502   \u251c\u2500\u2500 evercookie.js \u2502   \u2514\u2500\u2500 swfobject-2.2.min.js \u251c\u2500\u2500 php \u2502   \u251c\u2500\u2500 _cookie_name.php \u2502   \u251c\u2500\u2500 evercookie_cache.php \u2502   \u251c\u2500\u2500 evercookie_etag.php \u2502   \u251c\u2500\u2500 evercookie_png.php \u2502   \u2514\u2500\u2500 hsts_cookie.php \u2514\u2500\u2500 README.md<\/code><\/pre>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a <code>Java<\/code>, <code>Flash<\/code> \u0438 <code>Silverlight<\/code> \u0432\u044b\u0431\u044b\u043b\u0438, \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u043c\u0438 \u043e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0444\u0430\u0439\u043b\u044b:<\/p>\n<pre><code class=\"bash\">\u251c\u2500\u2500 js \u2502   \u2514\u2500\u2500  evercookie.js \u2514\u2500\u2500  php      \u251c\u2500\u2500 _cookie_name.php      \u251c\u2500\u2500 evercookie_cache.php      \u251c\u2500\u2500 evercookie_etag.php      \u251c\u2500\u2500 evercookie_png.php      \u2514\u2500\u2500 hsts_cookie.php<\/code><\/pre>\n<h2>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f Evercookie<\/h2>\n<p>\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 evercookie \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"javascript\"> this.evercookie_cache = function (name, value) {       if (value !== undefined) {         \/\/ make sure we have evercookie session defined first         document.cookie = opts.cacheCookieName + \"=\" + value + \"; path=\/; domain=\" + _ec_domain;         \/\/ {{ajax request to opts.cachePath}} handles caching         self.ajax({           url: _ec_baseurl + _ec_phpuri + opts.cachePath + \"?name=\" + name + \"&amp;cookie=\" + opts.cacheCookieName,           success: function (data) {}         });       } else {         \/\/ interestingly enough, we want to erase our evercookie         \/\/ http cookie so the php will force a cached response         var origvalue = this.getFromStr(opts.cacheCookieName, document.cookie);         self._ec.cacheData = undefined;         document.cookie = opts.cacheCookieName + \"=; expires=Mon, 20 Sep 2010 00:00:00 UTC; path=\/; domain=\" + _ec_domain;          self.ajax({           url: _ec_baseurl + _ec_phpuri + opts.cachePath + \"?name=\" + name + \"&amp;cookie=\" + opts.cacheCookieName,           success: function (data) {             \/\/ put our cookie back             document.cookie = opts.cacheCookieName + \"=\" + origvalue + \"; expires=Tue, 31 Dec 2030 00:00:00 UTC; path=\/; domain=\" + _ec_domain;              self._ec.cacheData = data;           }         });       }     };<\/code><\/pre>\n<p>\u041f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434 \u0442\u0443\u0442: <a href=\"https:\/\/github.com\/samyk\/evercookie\/blob\/master\/js\/evercookie.js\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/samyk\/evercookie\/blob\/master\/js\/evercookie.js<\/a><\/p>\n<p>\u041a\u043e\u0434 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0443\u0442\u0430\u043d, \u043a\u043e\u0433\u0434\u0430 \u0432\u0438\u0434\u0438\u0448\u044c \u0435\u0433\u043e \u0432 \u043f\u0435\u0440\u0432\u044b\u0439 \u0440\u0430\u0437, \u043d\u043e \u043f\u043e\u0442\u043e\u043c \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u0435\u0433\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435. <\/p>\n<blockquote>\n<p>\u042f \u0434\u043e\u043b\u0433\u043e \u043e\u0431\u0445\u043e\u0434\u0438\u043b \u0441\u0442\u043e\u0440\u043e\u043d\u043e\u0439 \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433 evercookie, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0430. \u041d\u043e \u0432\u0441\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u0435\u0435 \u0447\u0430\u0441\u0442\u0435\u0439 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043d\u0435\u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439, \u043d\u0430\u0447\u0430\u043b\u0438 \u043f\u043e\u044f\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 CORS. \u0422\u0430\u043a \u043a\u0430\u043a \u043e\u0434\u0438\u043d \u0438\u0437 \u043c\u043e\u0438\u0445 Angular \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 evercookie, \u0442\u043e \u044f \u0440\u0435\u0448\u0438\u043b \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c evercookie \u043d\u0430 \u043d\u043e\u0432\u044b\u0439 \u0441\u0442\u0435\u043a.  <\/p>\n<\/blockquote>\n<p>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b evercookie:<\/p>\n<pre><code class=\"typescript\">\/**  * Evercookie options  *\/ export interface EvercookieOptions {   \/**    * Cookie name for HTTP cookie    *    * default: `evercookie_cache`    *\/   cacheCookieName: string;    \/**    * Path to script cache    *    * default: `\/cache.php`    *\/   cachePath: string;    \/**    * Cookie name for PNG    *    * default: `evercookie_png`    *\/   pngCookieName: string;    \/**    * Path to script png    *    * default: `\/png.php`    *\/   pngPath: string;    \/**    * Cookie name for ETag    *    * default: `evercookie_etag`    *\/   etagCookieName: string;    \/**    * Path to script etag    *    * default: `\/etag.php`    *\/   etagPath: string;    \/**    * Path to backend    *    * example: `https:\/\/your-evercookie-server.com`    *\/   baseurl: string;    \/**    * Domain from window.location.host    *    * example: `.your-site-with-evercookie.com`    *\/   domain: string;    \/**    * Path to PHP folder in backend    *    * default: `\/php`    *\/   phpuri: string;    \/**    * Name evercookie in storages    *    * default: `uid`    *\/   name: string;    \/**    * Past date    *    * default: `'Thu, 01 Jun 2000 00:00:00 GMT'`    *\/   expiresPast: string;    \/**    * Expires date    *    * default: `'Thu, 01 Jun 2000 00:00:00 GMT'`    *\/   expires: string; } <\/code><\/pre>\n<ul>\n<li>\n<p><code>cacheCookieName<\/code> &#8212; \u0438\u043c\u044f Cache \u043a\u0443\u043a\u0438;<\/p>\n<\/li>\n<li>\n<p><code>cachePath<\/code> &#8212; \u043f\u0443\u0442\u044c \u0434\u043e \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0441 Cache;<\/p>\n<\/li>\n<li>\n<p><code>pngCookieName<\/code> &#8212; \u0438\u043c\u044f PNG \u043a\u0443\u043a\u0438;<\/p>\n<\/li>\n<li>\n<p><code>pngPath<\/code> &#8212; \u043f\u0443\u0442\u044c \u0434\u043e \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0441 PNG;<\/p>\n<\/li>\n<li>\n<p><code>etagCookieName<\/code> &#8212; \u0438\u043c\u044f ETag \u043a\u0443\u043a\u0438;<\/p>\n<\/li>\n<li>\n<p><code>etagPath<\/code> &#8212; \u043f\u0443\u0442\u044c \u0434\u043e \u0441\u043a\u0440\u0438\u043f\u0442\u0430 ETag;<\/p>\n<\/li>\n<li>\n<p><code>phpuri<\/code> &#8212; \u043f\u0443\u0442\u044c \u0434\u043e \u043f\u0430\u043f\u043a\u0438 \u0441\u043e \u0441\u043a\u0440\u0438\u043f\u0442\u0430\u043c\u0438 PHP;<\/p>\n<\/li>\n<li>\n<p><code>baseurl<\/code> &#8212; \u043f\u0443\u0442\u044c \u0434\u043e \u0431\u0435\u043a\u0435\u043d\u0434\u0430, \u0433\u0434\u0435 \u0432\u044b\u043b\u043e\u0436\u0435\u043d \u043f\u0440\u043e\u0435\u043a\u0442 evercookie;<\/p>\n<\/li>\n<li>\n<p><code>domain<\/code> &#8212; \u0434\u043e\u043c\u0435\u043d, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0443\u0442 \u0441\u0442\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u043a\u0443\u043a\u0438. \u0414\u043e\u043c\u0435\u043d \u043f\u043e-\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0431\u0435\u0440\u0435\u0442\u0441\u044f \u043a\u0430\u043a &#8216;<code>.' + window.location.host<\/code>;<\/p>\n<\/li>\n<li>\n<p><code>name<\/code> &#8212; \u0438\u043c\u044f \u043a\u043b\u044e\u0447\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d \u043f\u0440\u0438 \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435;<\/p>\n<\/li>\n<li>\n<p><code>expiresPast<\/code> &#8212; \u043f\u0440\u043e\u0448\u0435\u0434\u0448\u0430\u044f \u0434\u0430\u0442\u0430, \u0434\u043b\u044f \u0441\u0431\u0440\u043e\u0441\u0430 \u043a\u0443\u043a\u0438;<\/p>\n<\/li>\n<li>\n<p><code>expires<\/code> &#8212; \u0434\u0430\u0442\u0430, \u0434\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0431\u0443\u0434\u0435\u0442 \u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u043a\u0443\u043a\u0430.<\/p>\n<\/li>\n<\/ul>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0441\u0435\u0440\u0432\u0438\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0447\u0438\u0442\u0430\u0442\u044c \u0438 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c evercookie \u0441 \u0434\u0435\u0444\u043e\u043b\u0442\u043d\u044b\u043c\u0438 \u043e\u043f\u0446\u0438\u044f\u043c\u0438:<\/p>\n<pre><code class=\"typescript\">export class EvercookieService {   private readonly options: EvercookieOptions = {     cacheCookieName: 'evercookie_cache',     pngCookieName: 'evercookie_png',     etagCookieName: 'evercookie_etag',     etagPath: '\/etag.php',     baseurl: 'http:\/\/localhost:8080\/evercookie',     domain: '.',     phpuri: '\/php',     pngPath: '\/png.php',     cachePath: '\/cache.php',     name: 'uid',     expiresPast: 'Thu, 01 Jun 2000 00:00:00 GMT',     expires: 'Sat, 01 Jun 2030 00:00:00 GMT',   };    readonly isBrowser!: boolean;    constructor(     private readonly destroyRef: DestroyRef,     private readonly httpClient: HttpClient,     @Inject(DOCUMENT) private readonly document: Document,     \/\/ eslint-disable-next-line @typescript-eslint\/ban-types     @Inject(PLATFORM_ID) private readonly platformId: Object   ) {     this.isBrowser = isPlatformBrowser(this.platformId);      if (this.isBrowser &amp;&amp; this.window) {       this.options.domain = `.${this.window?.location.host.replace(\/:\\d+\/, '')}`;     }   }    get window() {     return this.document.defaultView;   } }<\/code><\/pre>\n<p>\u0414\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 fetch, \u043d\u043e \u0441 \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u043c\u0438 CORS:<\/p>\n<pre><code class=\"typescript\">fetch(url, {   method: 'GET',   mode: 'no-cors',   headers: {     Accept: 'text\/javascript, text\/html, application\/xml, text\/xml, *\/*',   }, });<\/code><\/pre>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a Angular \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d \u043d\u0430 Observable, \u0442\u043e \u043c\u0435\u0442\u043e\u0434 \u043f\u0440\u0438\u043c\u0435\u0442 \u0432\u0438\u0434:<\/p>\n<pre><code class=\"typescript\">  private request(url: string): Observable&lt;string> {     return from(       fetch(url, {         method: 'GET',         mode: 'no-cors',         headers: {           Accept: 'text\/javascript, text\/html, application\/xml, text\/xml, *\/*',         },       })     ).pipe(       switchMap((response) => from(response.text())),       map((result) => result ?? undefined),       takeUntilDestroyed(this.destroyRef)     );   } <\/code><\/pre>\n<p>\u0414\u043b\u044f\u00a0\u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u043e\u0442\u0432\u0435\u0442\u043e\u0432 \u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f \u0434\u0432\u0435 \u0443\u0442\u0438\u043b\u0438\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u0437\u044f\u0442\u044b \u0438\u0437\u00a0\u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 evercookie:<\/p>\n<pre><code class=\"typescript\">export function replace(str: string, key: string, value: string | number): string {   if (str.indexOf('&amp;' + key + '=') > -1 || str.indexOf(key + '=') === 0) {     \/\/ find start     let idx = str.indexOf('&amp;' + key + '=');     if (idx === -1) {       idx = str.indexOf(key + '=');     }      \/\/ find end     const end = str.indexOf('&amp;', idx + 1);      return end !== -1 ? `${str.substr(0, idx)}${str.substr(end + (idx ? 0 : 1))}&amp;${key}=${value}` : `${str.substr(0, idx)}&amp;${key}=${value}`;   }    return `${str}&amp;${key}=${value}`; }  export function getFromStr(name: string, text: unknown) {   if (typeof text !== 'string') {     return;   }    const nameEQ = name + '=';   const ca = text.split(\/[;&amp;]\/);   let c;    for (let i = 0; i &lt; ca.length; i++) {     c = ca[i];      while (c.charAt(0) === ' ') {       c = c.substring(1, c.length);     }      if (c.indexOf(nameEQ) === 0) {       return c.substring(nameEQ.length, c.length);     }   }    return; }<\/code><\/pre>\n<p>\u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0442\u0438\u043f\u044b \u0434\u043b\u044f Window:<\/p>\n<pre><code class=\"typescript\">declare global {   interface Window {     readonly mozIndexedDB?: IDBFactory;     readonly webkitIndexedDB?: IDBFactory;     readonly msIndexedDB?: IDBFactory;     readonly openDatabase?: (       name: string,       version: string,       displayName: string,       estimatedSize: number     ) => {       transaction(         callback: (arg: {           executeSql: (sql: string, params?: any[], cb?: (tx: any, cb: any) => void, eh?: (err: any) => void) => void;         }) => void       ): void;     };   } }<\/code><\/pre>\n<ul>\n<li>\n<p><code>mozIndexedDB<\/code>, <code>webkitIndexedDB<\/code>, <code>msIndexedDB<\/code> &#8212; \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u044b\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 IndexedDB;<\/p>\n<\/li>\n<li>\n<p><code>openDatabase<\/code> &#8212; \u043c\u0435\u0442\u043e\u0434 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a Web SQL.<\/p>\n<\/li>\n<\/ul>\n<h4>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 window.name<\/h4>\n<p>\u0414\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u043d\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0432 window.name \u043d\u0443\u0436\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. <\/p>\n<pre><code class=\"typescript\">private setWindowName(value: string | number): void {   window.name = replace(window.name, this.options.name, value); }<\/code><\/pre>\n<p>\u0414\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u0437\u044f\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 window.name.<\/p>\n<pre><code class=\"typescript\">private getWindowName(): number | undefined {   const value = getFromStr(this.options.name, window.name);      return typeof value !== 'undefined' ? Number(value) : undefined; }<\/code><\/pre>\n<p>Angular:<\/p>\n<pre><code class=\"typescript\">  private getWindowName(): Observable&lt;number | undefined> {     return new Observable((observer) => {       try {         const eid = getFromStr(this.options.name, this.window?.name);         observer.next(typeof eid !== 'undefined' ? Number(eid) : undefined);       } catch (e) {         observer.next(undefined);       }        observer.complete();     });   }    private setWindowName(value: string | number): void {     try {       if (this.window) {         this.window.name = replace(this.window.name, this.options.name, value);       }     } catch (e) {       \/* empty *\/     }   }<\/code><\/pre>\n<ul>\n<li>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a\u00a0\u043d\u0435\u00a0\u0432\u0441\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0447\u0442\u0435\u043d\u0438\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0432\u0441\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u043e\u0431\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0432\u00a0Observable.<\/p>\n<\/li>\n<li>\n<p>\u0414\u043b\u044f\u00a0\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0433\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u043f\u043e\u0442\u043e\u043a\u043e\u0432, \u0432\u0441\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u0432\u00a0try\u2011catch.<\/p>\n<\/li>\n<\/ul>\n<h4>\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 cookie\u2011\u0444\u0430\u0439\u043b\u044b HTTP<\/h4>\n<p>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043a\u0443\u043a\u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u043f\u0438\u0441\u044c\u044e \u0432\u00a0document.cookie.<\/p>\n<pre><code class=\"typescript\">  private setCache(value: string | number): void {     document.cookie = `${this.options.cacheCookieName}=${value}; expires=${this.options.expires}; path=\/; domain=${this.options.domain}`;      void fetch(`${this.options.baseurl}${this.options.phpuri}${this.options.cachePath}?name=${this.options.name}&amp;cookie=${this.options.cacheCookieName}`);   }<\/code><\/pre>\n<p>\u0427\u0442\u0435\u043d\u0438\u0435 \u043a\u0443\u043a\u0438:<\/p>\n<pre><code class=\"typescript\">  private async getCache(): Promise&lt;number | undefined> {     const origvalue = getFromStr(this.options.cacheCookieName, this.document.cookie);     \/\/ reset cookie     this.document.cookie = `${this.options.cacheCookieName}=; expires=${this.options.expiresPast}; path=\/; domain=${this.options.domain}`;      return fetch(       `${this.options.baseurl}${this.options.phpuri}${this.options.cachePath}?name=${this.options.name}&amp;cookie=${this.options.cacheCookieName}`     ).then((response) => {       this.document.cookie = `${this.options.cacheCookieName}=${origvalue}; expires=${this.options.expires}; path=\/; domain=${this.options.domain}`;        return response.text();     }).then(result => result !== '' ? Number(result) : undefined);   } <\/code><\/pre>\n<ol>\n<li>\n<p>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u0442\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043a\u0443\u043a\u0438. <\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u0442\u0435\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0437\u0430\u043f\u0440\u043e\u0441 \u043a\u0443\u043a\u0438.<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0441\u043b\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043e\u0442\u0432\u0435\u0442\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438 \u043c\u0435\u0442\u043e\u0434 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0442\u0432\u0435\u0442 \u043e\u0442\u00a0\u0441\u0435\u0440\u0432\u0435\u0440\u0430. <\/p>\n<\/li>\n<\/ol>\n<blockquote>\n<p>\u0417\u0430\u0447\u0435\u043c \u043d\u0443\u0436\u043d\u043e \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u044f \u043d\u0435\u00a0\u043f\u043e\u043d\u044f\u043b. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043a\u043e\u0433\u0434\u0430 \u0432\u0441\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442, \u0435\u0441\u0442\u044c \u0448\u0430\u043d\u0441 \u0447\u0442\u043e\u00a0\u0434\u0430\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u00a0\u0431\u044b\u043b\u043e \u043b\u0443\u0447\u0448\u0438\u043c \u0438 \u0435\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c. \u0415\u0441\u043b\u0438 \u0441\u0435\u0440\u0432\u0435\u0440 \u0432\u0435\u0440\u043d\u0435\u0442 undefined \u0438 \u043a\u0443\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u0437\u0430\u0442\u0435\u0440\u0442\u0430, \u0442\u043e \u043f\u043e\u0441\u043b\u0435 \u0440\u0435\u0444\u0440\u0435\u0448\u0430 \u043d\u0435\u00a0\u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u043d\u0438\u0447\u0435\u0433\u043e \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c.<\/p>\n<\/blockquote>\n<p>Angular \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f:<\/p>\n<pre><code class=\"typescript\"> private getCache(): Observable&lt;number | undefined> {     return new Observable((observer) => {       \/\/ interestingly enough, we want to erase our evercookie       \/\/ http cookie so the php will force a cached response       const origvalue = getFromStr(this.options.cacheCookieName, this.document.cookie);       this.document.cookie = `${this.options.cacheCookieName}=; expires=${this.options.expiresPast}; path=\/; domain=${this.options.domain}`;        this.request(         `${this.options.baseurl}${this.options.phpuri}${this.options.cachePath}?name=${this.options.name}&amp;cookie=${this.options.cacheCookieName}`       )         .pipe(           tap((response) => {             this.document.cookie = `${this.options.cacheCookieName}=${origvalue}; expires=${this.options.expires}; path=\/; domain=${this.options.domain}`;              observer.next(response !== '' ? Number(response) : undefined);             observer.complete();           }),           catchError(() => {             observer.next(undefined);             observer.complete();              return EMPTY;           })         )         .subscribe();     });   }    private setCache(value: string | number): void {     \/\/ eslint-disable-next-line max-len     this.document.cookie = `${this.options.cacheCookieName}=${value}; expires=${this.options.expires}; path=\/; domain=${this.options.domain}`;      this.request(       \/\/ eslint-disable-next-line max-len       `${this.options.baseurl}${this.options.phpuri}${this.options.cachePath}?name=${this.options.name}&amp;cookie=${this.options.cacheCookieName}`     )       .pipe(catchError(() => EMPTY))       .subscribe();   }<\/code><\/pre>\n<p>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043d\u0430 PHP:<\/p>\n<pre><code class=\"php\">&lt;?php \/* evercookie, by samy kamkar, 09\/20\/2010  *  http:\/\/samy.pl : code@samy.pl  *  * This is the server-side simple caching mechanism.  *  * -samy kamkar  *\/  \/\/ we get cookie name from current file name so remember about it when rename of this file will be required  include dirname(__FILE__) . DIRECTORY_SEPARATOR . '_cookie_name.php'; $cookie_name = evercookie_get_cookie_name(__FILE__);  \/\/ we don't have a cookie, user probably deleted it, force cache if (empty($_COOKIE[$cookie_name])) {     header('HTTP\/1.1 304 Not Modified');     exit; }  header('Content-Type: text\/html'); header('Last-Modified: Wed, 30 Jun 2010 21:36:48 GMT'); header('Expires: Tue, 31 Dec 2030 23:30:45 GMT'); header('Cache-Control: private, max-age=630720000');  echo $_COOKIE[$cookie_name];<\/code><\/pre>\n<p>\u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e \u0438\u0437 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043a\u0443\u043a\u0430 \u0438 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u043e\u0442\u0432\u0435\u0442 \u0441 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u043c\u0438 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430\u043c\u0438.<\/p>\n<h4>\u0425\u0440\u0430\u043d\u0435\u043d\u0438\u0435 cookie\u2011\u0444\u0430\u0439\u043b\u043e\u0432, \u0437\u0430\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0432\u00a0\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u0445 RGB <\/h4>\n<p>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f:<\/p>\n<pre><code class=\"typescript\">private setPng(value: string | number): void {   try {     this.document.cookie = this.options.pngCookieName + '=' + value + '; path=\/; domain=' + this.options.domain;      const img = new Image();     img.style.visibility = 'hidden';     img.style.position = 'absolute';     img.src = `${this.options.baseurl}${this.options.phpuri}${this.options.pngPath}?name=${this.options.name}&amp;cookie=${this.options.pngCookieName}`;     img.crossOrigin = 'Anonymous';   } catch (e) {     \/* empty *\/   } }<\/code><\/pre>\n<p>\u0421\u0443\u0442\u044c \u043c\u0435\u0442\u043e\u0434\u0430 \u0432\u00a0\u0442\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u043f\u0440\u043e\u0441\u0438\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u00a0\u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u0437\u0430\u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u043e.<\/p>\n<p>\u041c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043a\u0443\u043a\u0438 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d \u043d\u0430\u00a0\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043a\u0430\u0440\u0442\u044b \u0441\u00a0\u0437\u0430\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u0446\u0432\u0435\u0442\u0430\u043c\u0438. \u041f\u0435\u0440\u0435\u0431\u0438\u0440\u0430\u044f \u043a\u0430\u0436\u0434\u044b\u0439 \u043f\u0438\u043a\u0441\u0435\u043b\u044c \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0437\u0430\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 UID.<\/p>\n<p>\u041f\u043e\u00a0\u0448\u0430\u0433\u0430\u043c:<\/p>\n<ol>\n<li>\n<p>\u0421\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u0439 canvas.<\/p>\n<\/li>\n<li>\n<p>\u0421\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u0443\u043a\u0430.<\/p>\n<\/li>\n<li>\n<p>\u0421\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442.<\/p>\n<\/li>\n<li>\n<p>\u041e\u0442\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435. <\/p>\n<\/li>\n<li>\n<p>\u0414\u0435\u043a\u043e\u0434\u0438\u0440\u0443\u0435\u043c \u043a\u0430\u0436\u0434\u044b\u0439 \u043f\u0438\u043a\u0441\u0435\u043b\u044c.<\/p>\n<\/li>\n<\/ol>\n<pre><code class=\"typescript\">private getPng(): Observable&lt;number | undefined> {   return new Observable((observer) => {     const canvas = this.document.createElement('canvas');     canvas.style.visibility = 'hidden';     canvas.style.position = 'absolute';     canvas.width = 200;     canvas.height = 1;      if (canvas &amp;&amp; canvas.getContext) {       const img = new Image();       img.style.visibility = 'hidden';       img.style.position = 'absolute';         const ctx = canvas.getContext('2d');       const origvalue = getFromStr(this.options.pngCookieName, this.document.cookie);        this.document.cookie = `${this.options.pngCookieName}=; expires=${this.options.expiresPast}; path=\/; domain=${this.options.domain}`;        img.onload = () => {         this.document.cookie = `${this.options.pngCookieName}=${origvalue}; expires=${this.options.expires}; path=\/; domain=${this.options.domain}`;          let png = '';          if (ctx) {           ctx.drawImage(img, 0, 0);            \/\/ get CanvasPixelArray from  given coordinates and dimensions           const pix = ctx.getImageData(0, 0, 200, 1).data;            \/\/ loop over each pixel to get the \"RGB\" values (ignore alpha)           for (let i = 0, n = pix.length; i &lt; n; i += 4) {             if (pix[i] === 0) {               break;             }             png += String.fromCharCode(pix[i]);             if (pix[i + 1] === 0) {               break;             }             png += String.fromCharCode(pix[i + 1]);             if (pix[i + 2] === 0) {               break;             }             png += String.fromCharCode(pix[i + 2]);           }         }          observer.next(png !== '' ? Number(png) : undefined);         observer.complete();       };        img.onerror = () => {         observer.next(undefined);         observer.complete();       };       img.src = `${this.options.baseurl}${this.options.phpuri}${this.options.pngPath}?name=${this.options.name}&amp;cookie=${this.options.pngCookieName}`;       img.crossOrigin = 'Anonymous';     } else {       observer.next(undefined);       observer.complete();     }   }); }<\/code><\/pre>\n<p>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u0430 \u0431\u0435\u043a\u0435\u043d\u0434\u0435:<\/p>\n<pre><code class=\"php\">&lt;?php \/* evercookie, by samy kamkar, 09\/20\/2010  *  http:\/\/samy.pl : code@samy.pl  *  * This is the server-side variable PNG generator for evercookie.  * If an HTTP cookie is passed, the cookie data gets converted into  * RGB-values in a PNG image. The PNG image is printed out with a  * 20-year cache expiration date.  *  * If for any reason this file is accessed again WITHOUT the cookie,  * as in the user deleted their cookie, the code returns back with  * a forced 'Not Modified' meaning the browser should look at its  * cache for the image.  *  * The client-side code then places the cached image in a canvas and  * reads it in pixel by pixel, converting the PNG back into a cookie.  *  * -samy kamkar  *\/  \/\/ we get cookie name from current file name so remember about it when rename of this file will be required include dirname(__FILE__) . DIRECTORY_SEPARATOR . '_cookie_name.php'; $cookie_name = evercookie_get_cookie_name(__FILE__);  \/\/ we don't have a cookie, user probably deleted it, force cache if (empty($_COOKIE[$cookie_name])) {     if(!headers_sent()) {         header('HTTP\/1.1 304 Not Modified');     }     exit; }  \/\/ width of 200 means 600 bytes (3 RGB bytes per pixel) $x = 200; $y = 1;  $gd = imagecreatetruecolor($x, $y);  $data_arr = str_split($_COOKIE[$cookie_name]);  $x = 0; $y = 0; for ($i = 0, $i_count = count($data_arr); $i &lt; $i_count; $i += 3) {     $red   = isset($data_arr[$i])   ? ord($data_arr[$i])   : 0;     $green = isset($data_arr[$i+1]) ? ord($data_arr[$i+1]) : 0;     $blue  = isset($data_arr[$i+2]) ? ord($data_arr[$i+2]) : 0;     $color = imagecolorallocate($gd, $red, $green, $blue);     imagesetpixel($gd, $x++, $y, $color); }  if(!headers_sent()) {     header('Content-Type: image\/png');     header('Last-Modified: Wed, 30 Jun 2010 21:36:48 GMT');     header('Expires: Tue, 31 Dec 2030 23:30:45 GMT');     header('Cache-Control: private, max-age=630720000'); }  \/\/ boom. headshot. imagepng($gd);<\/code><\/pre>\n<h4>\u0425\u0440\u0430\u043d\u0435\u043d\u0438\u0435 cookie\u2011\u0444\u0430\u0439\u043b\u043e\u0432 \u0432\u00a0HTTP ETag<\/h4>\n<p>\u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 ETag \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0437\u0430\u043f\u0438\u0441\u0438 \u043a\u0443\u043a\u0438.<\/p>\n<pre><code class=\"typescript\">  private setEtag(value: string | number): void {     try {       this.document.cookie = `${this.options.etagCookieName}=${value}; path=\/; domain=${this.options.domain}`;        this.request(         `${this.options.baseurl}${this.options.phpuri}${this.options.etagPath}?name=${this.options.name}&amp;cookie=${this.options.etagCookieName}`       )         .pipe(catchError(() => EMPTY))         .subscribe();     } catch (e) {       \/* empty *\/     }   }<\/code><\/pre>\n<p>\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 ETag \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044e \u043a\u0443\u043a\u0438. \u0420\u0430\u0437\u043d\u0438\u0446\u0430 \u0431\u0443\u0434\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438.<\/p>\n<pre><code class=\"typescript\">  private getEtag(): Observable&lt;number | undefined> {     return new Observable((observer) => {       const origvalue = getFromStr(this.options.etagCookieName, this.document.cookie);       this.document.cookie = `${this.options.etagCookieName}=; expires=${this.options.expiresPast}; path=\/; domain=${this.options.domain}`;        this.request(         `${this.options.baseurl}${this.options.phpuri}${this.options.etagPath}?name=${this.options.name}&amp;cookie=${this.options.etagCookieName}`       )         .pipe(           tap((response) => {             this.document.cookie = `${this.options.etagCookieName}=${origvalue}; expires=${this.options.expires}; path=\/; domain=${this.options.domain}`;              observer.next(response !== '' ? Number(response) : undefined);             observer.complete();           }),           catchError(() => {             observer.next(undefined);             observer.complete();              return EMPTY;           })         )         .subscribe();     });   }<\/code><\/pre>\n<p>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u0430 PHP:<\/p>\n<pre><code class=\"php\">&lt;?php \/* evercookie, by samy kamkar, 09\/20\/2010  *  http:\/\/samy.pl : code@samy.pl  *  * This is the server-side ETag software which tags a user by  * using the Etag HTTP header, as well as If-None-Match to check  * if the user has been tagged before.  *  * -samy kamkar  *\/  \/\/ we get cookie name from current file name so remember about it when rename of this file will be required include dirname(__FILE__) . DIRECTORY_SEPARATOR . '_cookie_name.php'; $cookie_name = evercookie_get_cookie_name(__FILE__);  \/\/ we don't have a cookie, so we're not setting it if (empty($_COOKIE[$cookie_name])) {     \/\/ read our etag and pass back     if (!function_exists('apache_request_headers')) {         function apache_request_headers() {             \/\/ Source: http:\/\/www.php.net\/manual\/en\/function.apache-request-headers.php#70810             $arh = array();             $rx_http = '\/\\AHTTP_\/';             foreach ($_SERVER as $key => $val) {                 if (preg_match($rx_http, $key)) {                     $arh_key = preg_replace($rx_http, '', $key);                     $rx_matches = array();                     \/\/ do some nasty string manipulations to restore the original letter case                     \/\/ this should work in most cases                     $rx_matches = explode('_', $arh_key);                     if (count($rx_matches) > 0 and strlen($arh_key) > 2) {                         foreach ($rx_matches as $ak_key => $ak_val) {                             $rx_matches[$ak_key] = ucfirst(strtolower($ak_val));                         }                         $arh_key = implode('-', $rx_matches);                     }                     $arh[$arh_key] = $val;                 }             }             return ($arh);         }     }      \/\/ Headers might have different letter case depending on the web server.     \/\/ So, change all headers to uppercase and compare it.     $headers = array_change_key_case(apache_request_headers(), CASE_UPPER);     if(isset($headers['IF-NONE-MATCH'])) {         \/\/ extracting value from ETag presented format (which may be prepended by Weak validator modifier)         $etag_value = preg_replace('|^(W\/)?\"(.+)\"$|', '$2', $headers['IF-NONE-MATCH']);         header('HTTP\/1.1 304 Not Modified');         header('ETag: \"' . $etag_value . '\"');         echo $etag_value;     }     exit; }  \/\/ set our etag header('ETag: \"' . $_COOKIE[$cookie_name] . '\"'); echo $_COOKIE[$cookie_name];<\/code><\/pre>\n<p>\u041a\u0430\u043a\u00a0\u0432\u0438\u0434\u043d\u043e \u0438\u0437\u00a0\u043f\u0440\u0438\u043c\u0435\u0440\u0430, \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043a\u0443\u043a\u0438. \u0415\u0441\u043b\u0438 \u043a\u0443\u043a\u0438 \u043d\u0435\u0442,\u0442\u043e \u0438\u0434\u0435\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430, \u0432\u00a0\u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u0442\u0430\u0432\u0438\u0442\u0441\u044f \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043a\u0443\u043a\u0430.<\/p>\n<h4>\u0412\u0435\u0431\u2011\u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0441\u0435\u0430\u043d\u0441\u043e\u0432 HTML5<\/h4>\n<p>\u0423\u0441\u0442\u0430\u0432\u043a\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432\u00a0sessionStorage:<\/p>\n<pre><code class=\"typescript\"> private setSessionStorage(value: string | number) {     try {       if (value !== undefined &amp;&amp; this.window?.sessionStorage) {         this.window?.sessionStorage.setItem(this.options.name, value.toString());       }     } catch (e) {       \/* empty *\/     }   } <\/code><\/pre>\n<p>\u041e\u0431\u0435\u0440\u0442\u043a\u0430 try\u2011catch \u0437\u0434\u0435\u0441\u044c \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u0430, \u0442\u0430\u043a \u043a\u0430\u043a\u00a0\u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u044b \u0432\u00a0\u0440\u0435\u0436\u0438\u043c\u0435 \u0438\u043d\u043a\u043e\u0433\u043d\u0438\u0442\u043e \u043c\u043e\u0433\u0443\u0442 \u043d\u0435\u00a0\u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a\u00a0\u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0443.<\/p>\n<p>\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437\u00a0sessionStorage:<\/p>\n<pre><code class=\"typescript\">  private getSessionStorage(): Observable&lt;number | undefined> {     return new Observable((observer) => {       try {         if (this.window?.sessionStorage) {           const value = this.window.sessionStorage.getItem(this.options.name);           observer.next(value ? Number(value) : undefined);         } else {           observer.next(undefined);         }       } catch (e) {         observer.next(undefined);       }        observer.complete();     });   }<\/code><\/pre>\n<h4>\u041b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u0435\u0431\u2011\u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 HTML5<\/h4>\n<p>\u0427\u0442\u0435\u043d\u0438\u0435 \u0438 \u0437\u0430\u043f\u0438\u0441\u044c \u0432 LocalStorage \u043d\u0438\u0447\u0435\u043c \u043d\u0435 \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u0437\u0430\u043f\u0438\u0441\u0438 \u0438 \u0447\u0442\u0435\u043d\u0438\u044f \u0432 SessionStorage.<\/p>\n<pre><code class=\"typescript\">  private setLocalStorage(value: string | number) {     try {       if (value !== undefined &amp;&amp; this.window?.localStorage) {         this.window.localStorage.setItem(this.options.name, value.toString());       }     } catch (e) {       \/* empty *\/     }   }    private getLocalStorage(): Observable&lt;number | undefined> {     return new Observable((observer) => {       try {         if (this.window?.localStorage) {           const value = this.window.localStorage.getItem(this.options.name);            observer.next(value ? Number(value) : undefined);         } else {           observer.next(undefined);         }       } catch (e) {         observer.next(undefined);       }        observer.complete();     });   } <\/code><\/pre>\n<h4>\u0411\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 HTML5\u00a0Web SQL \u0447\u0435\u0440\u0435\u0437 SQLite<\/h4>\n<p>\u0417\u0430\u043f\u0438\u0441\u044c \u0432  Web SQL:<\/p>\n<pre><code class=\"typescript\"> private setDatabaseStorage(value: string | number) {     try {       if (typeof this.window?.openDatabase === 'function') {         const database = this.window.openDatabase('sqlite_evercookie', '', 'evercookie', 1024 * 1024);          database.transaction((tx) => {           tx.executeSql(             'CREATE TABLE IF NOT EXISTS cache(' +               'id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, ' +               'name TEXT NOT NULL, ' +               'value TEXT NOT NULL, ' +               'UNIQUE (name)' +               ')',             []           );           tx.executeSql('INSERT OR REPLACE INTO cache(name, value) ' + 'VALUES(?, ?)', [this.options.name, value]);         });       }     } catch (e) {       \/* empty *\/     }   }<\/code><\/pre>\n<p>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u0430\u044f \u0431\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445\u00a0\u2014 sqlite_evercookie.<\/p>\n<p>\u0417\u0430\u0442\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f, \u0432\u00a0\u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0430 cache, \u0435\u0441\u043b\u0438 \u0435\u0435 \u043d\u0435\u00a0\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442. \u0412\u00a0\u043a\u043e\u043d\u0446\u0435 \u0438\u0434\u0435\u0442 \u0437\u0430\u043f\u0438\u0441\u044c \u0432\u00a0\u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f.<\/p>\n<p>\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437\u00a0Web SQL. \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439:<\/p>\n<ul>\n<li>\n<p>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445. <\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u0442\u0435\u043c \u0447\u0438\u0442\u0430\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438\u0437\u00a0\u0442\u0430\u0431\u043b\u0438\u0446\u044b. <\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"typescript\">  private getDatabaseStorage(): Observable&lt;number | undefined> {     return new Observable((observer) => {       try {         if (typeof this.window?.openDatabase === 'function') {           const database = this.window?.openDatabase('sqlite_evercookie', '', 'evercookie', 1024 * 1024);            database.transaction((tx) => {             tx.executeSql(               'SELECT value FROM cache WHERE name=?',               [this.options.name],               (tx1, result1) => {                 observer.next(result1.rows.length >= 1 ? result1.rows.item(0).value : undefined);                 observer.complete();               },               () => {                 observer.next(undefined);                 observer.complete();               }             );           });         } else {           observer.next(undefined);           observer.complete();         }       } catch (e) {         observer.next(undefined);         observer.complete();         \/* empty *\/       }     });   }<\/code><\/pre>\n<h4>HTML5\u00a0IndexedDB<\/h4>\n<p>\u0417\u0430\u043f\u0438\u0441\u044c \u0432\u00a0IndexedDB. <\/p>\n<ul>\n<li>\n<p>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0443\u0436\u043d\u0430\u044f \u0431\u0430\u0437\u0430. <\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u0442\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f \u043d\u0430\u00a0\u0447\u0442\u0435\u043d\u0438\u0435 \u0438 \u0437\u0430\u043f\u0438\u0441\u044c. <\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0438\u0434\u0435\u0442 \u0437\u0430\u043f\u0438\u0441\u044c \u0432\u00a0\u0442\u0430\u0431\u043b\u0438\u0446\u0443.<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"typescript\">  private setIndexedDb(value: string | number) {     try {       const indexedDB = this.window?.indexedDB || this.window?.mozIndexedDB || this.window?.webkitIndexedDB || this.window?.msIndexedDB;        if (indexedDB) {         const request = indexedDB.open('idb_evercookie', 1);          request.onupgradeneeded = (event) => {           const db = request.result || (event as any).target.result;            db.createObjectStore('evercookie', {             keyPath: 'name',           });         };          request.onsuccess = (event) => {           const idb = request.result || (event as any).target.result;            if (idb.objectStoreNames.contains('evercookie')) {             try {               const tx = idb.transaction(['evercookie'], 'readwrite');               const objst = tx.objectStore('evercookie');               objst.put({ name: this.options.name, value: value });             } catch (e) {               \/* empty *\/             }           }           idb.close();         };       }     } catch (e) {       \/* empty *\/     }   }<\/code><\/pre>\n<p>\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e:<\/p>\n<pre><code class=\"typescript\">  private getIndexedDb(): Observable&lt;number | undefined> {     return new Observable((observer) => {       try {         const indexedDB = this.window?.indexedDB || this.window?.mozIndexedDB || this.window?.webkitIndexedDB || this.window?.msIndexedDB;          if (indexedDB) {           const request = indexedDB.open('idb_evercookie', 1);            request.onupgradeneeded = (event) => {             const db = request.result || (event as any).target.result;              db.createObjectStore('evercookie', {               keyPath: 'name',             });           };            request.onsuccess = (event) => {             const idb = request.result || (event as any).target.result;              if (!idb.objectStoreNames.contains('evercookie')) {               observer.next(undefined);               observer.complete();             } else {               const tx = idb.transaction(['evercookie']);               const objst = tx.objectStore('evercookie');               const qr = objst.get(this.options.name);                qr.onsuccess = () => {                 observer.next(qr.result !== undefined ? qr.result.value : undefined);                 observer.complete();               };                qr.onerror = () => {                 observer.next(undefined);                 observer.complete();               };             }             idb.close();           };            request.onerror = () => {             observer.next(undefined);             observer.complete();           };         }       } catch (e) {         observer.next(undefined);         observer.complete();       }     });   }<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c, \u0435\u0441\u043b\u0438 \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0432\u0441\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0432 \u043c\u0435\u0441\u0442\u0435, \u0442\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430:<\/p>\n<pre><code class=\"typescript\">  set(eid: number | undefined): void {     if (eid) {       this.setEtag(eid);       this.setPng(eid);       this.setCache(eid);       this.setIndexedDb(eid);       this.setLocalStorage(eid);       this.setSessionStorage(eid);       this.setDatabaseStorage(eid);       this.setWindowName(eid);     }   }<\/code><\/pre>\n<p>\u041c\u0435\u0442\u043e\u0434 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0432\u0441\u0435\u0445 \u043a\u0443\u043a:<\/p>\n<pre><code class=\"typescript\">  get(): Observable&lt;EvercookieResponse> {     return combineLatest([       this.getEtag(),       this.getPng(),       this.getCache(),       this.getIndexedDb(),       this.getLocalStorage(),       this.getSessionStorage(),       this.getDatabaseStorage(),       this.getWindowName(),     ]).pipe(       take(1),       map((response) => {         const result: Record&lt;string, number> = {};          response.forEach((eid) => {           if (eid) {             if (result[eid] === undefined) {               result[eid] = 0;             }             result[eid]++;           }         });          let best: number | undefined = undefined;         let bestCount = 0;         const results = Object.entries(result);         for (const [key, value] of results) {           if (value > bestCount &amp;&amp; key !== 'undefined') {             bestCount = value;             best = Number(key);           }         }          return {           best: typeof best !== 'undefined' ? Number(best) : undefined,           all: {             etagData: typeof response[0] !== 'undefined' ? Number(response[0]) : undefined,             pngData: typeof response[1] !== 'undefined' ? Number(response[1]) : undefined,             cookieData: typeof response[2] !== 'undefined' ? Number(response[2]) : undefined,             idbData: typeof response[3] !== 'undefined' ? Number(response[3]) : undefined,             localData: typeof response[4] !== 'undefined' ? Number(response[4]) : undefined,             sessionData: typeof response[5] !== 'undefined' ? Number(response[5]) : undefined,             dbData: typeof response[6] !== 'undefined' ? Number(response[6]) : undefined,             windowData: typeof response[7] !== 'undefined' ? Number(response[7]) : undefined,           },         };       })     );   }<\/code><\/pre>\n<p>\u041f\u0440\u0438\u043d\u0446\u0438\u043f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439:<\/p>\n<ul>\n<li>\n<p>\u0418\u0434\u0435\u0442 \u0437\u0430\u043f\u0440\u043e\u0441 \u0432\u0441\u0435\u0445 \u043a\u0443\u043a<\/p>\n<\/li>\n<li>\n<p>\u041a\u043e\u0433\u0434\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u0430\u043d, \u0442\u043e combineLatest \u0438\u0441\u043f\u0443\u0441\u0442\u0438\u0442 \u043d\u043e\u0432\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435<\/p>\n<\/li>\n<li>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u043a\u0443\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0447\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f. <\/p>\n<\/li>\n<li>\n<p>\u0418 \u0432 \u043a\u043e\u043d\u0446\u0435 \u0432\u0435\u0440\u043d\u0443\u0442\u044c best \u0438 all \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b.<\/p>\n<\/li>\n<\/ul>\n<p>\u041c\u0435\u0442\u043e\u0434 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u0443\u043a \u043f\u0440\u0438 \u0441\u0442\u0430\u0440\u0442\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f:<\/p>\n<pre><code class=\"typescript\"> detect(): void {     if (this.isBrowser) {       this.get()         .pipe(           switchMap((result) => {             if (result !== undefined) {               this.set(result.best);             }              return this.httpClient.post&lt;{ id: number }>('\/api\/evercookie', result).pipe(               tap((response) => {                 if (response.id !== result.best) {                   this.set(response.id);                 }               })             );           }),           catchError(() => EMPTY),           takeUntilDestroyed(this.destroyRef)         )         .subscribe();     }   }<\/code><\/pre>\n<ul>\n<li>\n<p>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043a\u0443\u043a\u0438.<\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u043a\u0443\u043a\u0438 \u043d\u0435 \u043f\u0443\u0441\u0442\u044b, \u0442\u043e \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0432\u043e \u0432\u0441\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u043b\u0443\u0447\u0448\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435.<\/p>\n<\/li>\n<li>\n<p>\u041e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435. <\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u0441\u0435\u0440\u0432\u0435\u0440 \u0432\u0435\u0440\u043d\u0435\u0442 \u043d\u0430\u043c \u0434\u0440\u0443\u0433\u043e\u0439 UID, \u0442\u043e \u0437\u0430\u043c\u0435\u043d\u0438\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430\u0445 \u043d\u0430 \u043d\u043e\u0432\u043e\u0435.<\/p>\n<\/li>\n<\/ul>\n<p>\u0418\u0442\u043e\u0433\u043e\u0432\u044b\u0439 \u0441\u0435\u0440\u0432\u0438\u0441 \u0432 Angular:<\/p>\n<pre><code class=\"typescript\">import { DOCUMENT, isPlatformBrowser } from '@angular\/common'; import { HttpClient } from '@angular\/common\/http'; import { DestroyRef, Inject, Injectable, PLATFORM_ID } from '@angular\/core'; import { takeUntilDestroyed } from '@angular\/core\/rxjs-interop'; import { catchError, combineLatest, EMPTY, from, map, Observable, switchMap, take, tap } from 'rxjs';  import { EvercookieOptions, EvercookieResponse } from '.\/evercookie.interface';  declare global {   interface Window {     readonly mozIndexedDB?: IDBFactory;     readonly webkitIndexedDB?: IDBFactory;     readonly msIndexedDB?: IDBFactory;     readonly openDatabase?: (       name: string,       version: string,       displayName: string,       estimatedSize: number     ) => {       transaction(         callback: (arg: {           executeSql: (sql: string, params?: any[], cb?: (tx: any, cb: any) => void, eh?: (err: any) => void) => void;         }) => void       ): void;     };   } }  export function replace(str: string, key: string, value: string | number): string {   if (str.indexOf('&amp;' + key + '=') > -1 || str.indexOf(key + '=') === 0) {     \/\/ find start     let idx = str.indexOf('&amp;' + key + '=');     if (idx === -1) {       idx = str.indexOf(key + '=');     }      \/\/ find end     const end = str.indexOf('&amp;', idx + 1);      return end !== -1 ? `${str.substr(0, idx)}${str.substr(end + (idx ? 0 : 1))}&amp;${key}=${value}` : `${str.substr(0, idx)}&amp;${key}=${value}`;   }    return `${str}&amp;${key}=${value}`; }  export function getFromStr(name: string, text: unknown) {   if (typeof text !== 'string') {     return;   }    const nameEQ = name + '=';   const ca = text.split(\/[;&amp;]\/);   let c;    for (let i = 0; i &lt; ca.length; i++) {     c = ca[i];      while (c.charAt(0) === ' ') {       c = c.substring(1, c.length);     }      if (c.indexOf(nameEQ) === 0) {       return c.substring(nameEQ.length, c.length);     }   }    return; }  @Injectable({   providedIn: 'root', }) export class EvercookieService {   private options: EvercookieOptions = {     cacheCookieName: 'evercookie_cache',     pngCookieName: 'evercookie_png',     etagCookieName: 'evercookie_etag',     etagPath: '\/etag.php',     baseurl: 'http:\/\/localhost:8080\/evercookie',     domain: '.',     phpuri: '\/php',     pngPath: '\/png.php',     cachePath: '\/cache.php',     name: 'uid',     expiresPast: 'Thu, 01 Jun 2000 00:00:00 GMT',     expires: 'Sat, 01 Jun 2030 00:00:00 GMT',   };    readonly isBrowser!: boolean;    constructor(     private readonly destroyRef: DestroyRef,     private readonly httpClient: HttpClient,     @Inject(DOCUMENT) private readonly document: Document,     \/\/ eslint-disable-next-line @typescript-eslint\/ban-types     @Inject(PLATFORM_ID) private readonly platformId: Object   ) {     this.isBrowser = isPlatformBrowser(this.platformId);      if (this.isBrowser &amp;&amp; this.window) {       this.options.domain = `.${this.document.defaultView?.location.host.replace(\/:\\d+\/, '')}`;     }   }    get window() {     return this.document.defaultView;   }    detect(): void {     if (this.isBrowser) {       this.get()         .pipe(           switchMap((result) => {             if (result !== undefined) {               this.set(result.best);             }              return this.httpClient.post&lt;{ id: number }>('\/api\/evercookie', result).pipe(               tap((response) => {                 if (response.id !== result.best) {                   this.set(response.id);                 }               })             );           }),           catchError(() => EMPTY),           takeUntilDestroyed(this.destroyRef)         )         .subscribe();     }   }    set(eid: number | undefined): void {     if (eid) {       this.setEtag(eid);       this.setPng(eid);       this.setCache(eid);       this.setIndexedDb(eid);       this.setLocalStorage(eid);       this.setSessionStorage(eid);       this.setDatabaseStorage(eid);       this.setWindowName(eid);     }   }    get(): Observable&lt;EvercookieResponse> {     return combineLatest([       this.getEtag(),       this.getPng(),       this.getCache(),       this.getIndexedDb(),       this.getLocalStorage(),       this.getSessionStorage(),       this.getDatabaseStorage(),       this.getWindowName(),     ]).pipe(       take(1),       map((response) => {         const result: Record&lt;string, number> = {};          response.forEach((eid) => {           if (eid) {             if (result[eid] === undefined) {               result[eid] = 0;             }             result[eid]++;           }         });          let best: number | undefined = undefined;         let bestCount = 0;         const results = Object.entries(result);         for (const [key, value] of results) {           if (value > bestCount &amp;&amp; key !== 'undefined') {             bestCount = value;             best = Number(key);           }         }          return {           best: typeof best !== 'undefined' ? Number(best) : undefined,           all: {             etagData: typeof response[0] !== 'undefined' ? Number(response[0]) : undefined,             pngData: typeof response[1] !== 'undefined' ? Number(response[1]) : undefined,             cookieData: typeof response[2] !== 'undefined' ? Number(response[2]) : undefined,             idbData: typeof response[3] !== 'undefined' ? Number(response[3]) : undefined,             localData: typeof response[4] !== 'undefined' ? Number(response[4]) : undefined,             sessionData: typeof response[5] !== 'undefined' ? Number(response[5]) : undefined,             dbData: typeof response[6] !== 'undefined' ? Number(response[6]) : undefined,             windowData: typeof response[7] !== 'undefined' ? Number(response[7]) : undefined,           },         };       })     );   }    private request(url: string): Observable&lt;string> {     return from(       fetch(url, {         method: 'GET',         mode: 'no-cors',         headers: {           \/\/ eslint-disable-next-line @typescript-eslint\/naming-convention           Accept: 'text\/javascript, text\/html, application\/xml, text\/xml, *\/*',         },       })     ).pipe(       switchMap((response) => from(response.text())),       map((result) => result ?? undefined),       takeUntilDestroyed(this.destroyRef)     );   }    private getWindowName(): Observable&lt;number | undefined> {     return new Observable((observer) => {       try {         const eid = getFromStr(this.options.name, this.window?.name);         observer.next(typeof eid !== 'undefined' ? Number(eid) : undefined);       } catch (e) {         observer.next(undefined);       }        observer.complete();     });   }    private setWindowName(value: string | number): void {     try {       if (this.window) {         this.window.name = replace(this.window?.name, this.options.name, value);       }     } catch (e) {       \/* empty *\/     }   }    \/\/\/   private getCache(): Observable&lt;number | undefined> {     return new Observable((observer) => {       \/\/ interestingly enough, we want to erase our evercookie       \/\/ http cookie so the php will force a cached response       const origvalue = getFromStr(this.options.cacheCookieName, this.document.cookie);       \/\/ eslint-disable-next-line max-len       this.document.cookie = `${this.options.cacheCookieName}=; expires=${this.options.expiresPast}; path=\/; domain=${this.options.domain}`;        this.request(         \/\/ eslint-disable-next-line max-len         `${this.options.baseurl}${this.options.phpuri}${this.options.cachePath}?name=${this.options.name}&amp;cookie=${this.options.cacheCookieName}`       )         .pipe(           tap((response) => {             \/\/ eslint-disable-next-line max-len             this.document.cookie = `${this.options.cacheCookieName}=${origvalue}; expires=${this.options.expires}; path=\/; domain=${this.options.domain}`;              observer.next(response !== '' ? Number(response) : undefined);             observer.complete();           }),           catchError(() => {             observer.next(undefined);             observer.complete();              return EMPTY;           })         )         .subscribe();     });   }    private setCache(value: string | number): void {     \/\/ eslint-disable-next-line max-len     this.document.cookie = `${this.options.cacheCookieName}=${value}; expires=${this.options.expires}; path=\/; domain=${this.options.domain}`;      this.request(       \/\/ eslint-disable-next-line max-len       `${this.options.baseurl}${this.options.phpuri}${this.options.cachePath}?name=${this.options.name}&amp;cookie=${this.options.cacheCookieName}`     )       .pipe(catchError(() => EMPTY))       .subscribe();   }    private getEtag(): Observable&lt;number | undefined> {     return new Observable((observer) => {       const origvalue = getFromStr(this.options.etagCookieName, this.document.cookie);       this.document.cookie = `${this.options.etagCookieName}=; expires=${this.options.expiresPast}; path=\/; domain=${this.options.domain}`;        this.request(         \/\/ eslint-disable-next-line max-len         `${this.options.baseurl}${this.options.phpuri}${this.options.etagPath}?name=${this.options.name}&amp;cookie=${this.options.etagCookieName}`       )         .pipe(           tap((response) => {             \/\/ eslint-disable-next-line max-len             this.document.cookie = `${this.options.etagCookieName}=${origvalue}; expires=${this.options.expires}; path=\/; domain=${this.options.domain}`;              observer.next(response !== '' ? Number(response) : undefined);             observer.complete();           }),           catchError(() => {             observer.next(undefined);             observer.complete();              return EMPTY;           })         )         .subscribe();     });   }    private setEtag(value: string | number): void {     try {       this.document.cookie = `${this.options.etagCookieName}=${value}; path=\/; domain=${this.options.domain}`;        this.request(         \/\/ eslint-disable-next-line max-len         `${this.options.baseurl}${this.options.phpuri}${this.options.etagPath}?name=${this.options.name}&amp;cookie=${this.options.etagCookieName}`       )         .pipe(catchError(() => EMPTY))         .subscribe();     } catch (e) {       \/* empty *\/     }   }    private getPng(): Observable&lt;number | undefined> {     return new Observable((observer) => {       const canvas = this.document.createElement('canvas');       canvas.style.visibility = 'hidden';       canvas.style.position = 'absolute';       canvas.width = 200;       canvas.height = 1;        if (canvas &amp;&amp; canvas.getContext) {         \/\/ {{this.options.pngPath}} handles the hard part of generating the image         \/\/ based off of the http cookie and returning it cached         const img = new Image();         img.style.visibility = 'hidden';         img.style.position = 'absolute';          const ctx = canvas.getContext('2d');         const origvalue = getFromStr(this.options.pngCookieName, this.document.cookie);          \/\/ eslint-disable-next-line max-len         this.document.cookie = `${this.options.pngCookieName}=; expires=${this.options.expiresPast}; path=\/; domain=${this.options.domain}`;          img.onload = () => {           \/\/ eslint-disable-next-line max-len           this.document.cookie = `${this.options.pngCookieName}=${origvalue}; expires=${this.options.expires}; path=\/; domain=${this.options.domain}`;            let png = '';            if (ctx) {             ctx.drawImage(img, 0, 0);              \/\/ get CanvasPixelArray from  given coordinates and dimensions             const pix = ctx.getImageData(0, 0, 200, 1).data;              \/\/ loop over each pixel to get the \"RGB\" values (ignore alpha)             for (let i = 0, n = pix.length; i &lt; n; i += 4) {               if (pix[i] === 0) {                 break;               }               png += String.fromCharCode(pix[i]);               if (pix[i + 1] === 0) {                 break;               }               png += String.fromCharCode(pix[i + 1]);               if (pix[i + 2] === 0) {                 break;               }               png += String.fromCharCode(pix[i + 2]);             }           }            observer.next(png !== '' ? Number(png) : undefined);           observer.complete();         };          img.onerror = () => {           observer.next(undefined);           observer.complete();         };         \/\/ eslint-disable-next-line max-len         img.src = `${this.options.baseurl}${this.options.phpuri}${this.options.pngPath}?name=${this.options.name}&amp;cookie=${this.options.pngCookieName}`;         img.crossOrigin = 'Anonymous';       } else {         observer.next(undefined);         observer.complete();       }     });   }    private setPng(value: string | number): void {     try {       this.document.cookie = this.options.pngCookieName + '=' + value + '; path=\/; domain=' + this.options.domain;        const img = new Image();       img.style.visibility = 'hidden';       img.style.position = 'absolute';       \/\/ eslint-disable-next-line max-len       img.src = `${this.options.baseurl}${this.options.phpuri}${this.options.pngPath}?name=${this.options.name}&amp;cookie=${this.options.pngCookieName}`;       img.crossOrigin = 'Anonymous';     } catch (e) {       \/* empty *\/     }   }    private getLocalStorage(): Observable&lt;number | undefined> {     return new Observable((observer) => {       try {         if (this.window?.localStorage) {           const value = this.window?.localStorage.getItem(this.options.name);            observer.next(value ? Number(value) : undefined);         } else {           observer.next(undefined);         }       } catch (e) {         observer.next(undefined);       }        observer.complete();     });   }    private setLocalStorage(value: string | number) {     try {       if (value !== undefined &amp;&amp; this.window?.localStorage) {         this.window?.localStorage.setItem(this.options.name, value.toString());       }     } catch (e) {       \/* empty *\/     }   }    private getSessionStorage(): Observable&lt;number | undefined> {     return new Observable((observer) => {       try {         if (this.window?.sessionStorage) {           const value = this.window?.sessionStorage.getItem(this.options.name);           observer.next(value ? Number(value) : undefined);         } else {           observer.next(undefined);         }       } catch (e) {         observer.next(undefined);       }        observer.complete();     });   }    private setSessionStorage(value: string | number) {     try {       if (value !== undefined &amp;&amp; this.window?.sessionStorage) {         this.window?.sessionStorage.setItem(this.options.name, value.toString());       }     } catch (e) {       \/* empty *\/     }   }    private getIndexedDb(): Observable&lt;number | undefined> {     return new Observable((observer) => {       try {         const indexedDB = this.window?.indexedDB || this.window?.mozIndexedDB || this.window?.webkitIndexedDB || this.window?.msIndexedDB;          if (indexedDB) {           const request = indexedDB.open('idb_evercookie', 1);            request.onupgradeneeded = (event) => {             const db = request.result || (event as any).target.result;              db.createObjectStore('evercookie', {               keyPath: 'name',             });           };            request.onsuccess = (event) => {             const idb = request.result || (event as any).target.result;              if (!idb.objectStoreNames.contains('evercookie')) {               observer.next(undefined);               observer.complete();             } else {               const tx = idb.transaction(['evercookie']);               const objst = tx.objectStore('evercookie');               const qr = objst.get(this.options.name);                qr.onsuccess = () => {                 observer.next(qr.result !== undefined ? qr.result.value : undefined);                 observer.complete();               };                qr.onerror = () => {                 observer.next(undefined);                 observer.complete();               };             }             idb.close();           };            request.onerror = () => {             observer.next(undefined);             observer.complete();           };         }       } catch (e) {         observer.next(undefined);         observer.complete();       }     });   }    private setIndexedDb(value: string | number) {     try {       const indexedDB = this.window?.indexedDB || this.window?.mozIndexedDB || this.window?.webkitIndexedDB || this.window?.msIndexedDB;        if (indexedDB) {         const request = indexedDB.open('idb_evercookie', 1);          request.onupgradeneeded = (event) => {           const db = request.result || (event as any).target.result;            db.createObjectStore('evercookie', {             keyPath: 'name',           });         };          request.onsuccess = (event) => {           const idb = request.result || (event as any).target.result;            if (idb.objectStoreNames.contains('evercookie')) {             try {               const tx = idb.transaction(['evercookie'], 'readwrite');               const objst = tx.objectStore('evercookie');               objst.put({ name: this.options.name, value: value });             } catch (e) {               \/* empty *\/             }           }           idb.close();         };       }     } catch (e) {       \/* empty *\/     }   }    private getDatabaseStorage(): Observable&lt;number | undefined> {     return new Observable((observer) => {       try {         if (typeof this.window?.openDatabase === 'function') {           const database = this.window?.openDatabase('sqlite_evercookie', '', 'evercookie', 1024 * 1024);            database.transaction((tx) => {             tx.executeSql(               'SELECT value FROM cache WHERE name=?',               [this.options.name],               (tx1, result1) => {                 observer.next(result1.rows.length >= 1 ? result1.rows.item(0).value : undefined);                 observer.complete();               },               () => {                 observer.next(undefined);                 observer.complete();               }             );           });         } else {           observer.next(undefined);           observer.complete();         }       } catch (e) {         observer.next(undefined);         observer.complete();         \/* empty *\/       }     });   }    private setDatabaseStorage(value: string | number) {     try {       if (typeof this.window?.openDatabase === 'function') {         const database = this.window?.openDatabase('sqlite_evercookie', '', 'evercookie', 1024 * 1024);          database.transaction((tx) => {           tx.executeSql(             'CREATE TABLE IF NOT EXISTS cache(' +               'id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, ' +               'name TEXT NOT NULL, ' +               'value TEXT NOT NULL, ' +               'UNIQUE (name)' +               ')',             []           );           tx.executeSql('INSERT OR REPLACE INTO cache(name, value) ' + 'VALUES(?, ?)', [this.options.name, value]);         });       }     } catch (e) {       \/* empty *\/     }   } } <\/code><\/pre>\n<p>\u041f\u0430\u0440\u0443 \u0437\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u0439 \u043f\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438:<\/p>\n<ul>\n<li>\n<p>\u041c\u0435\u0442\u043e\u0434\u044b \u0434\u0443\u0431\u043b\u0438\u0440\u0443\u044e\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e\u0441\u0442\u0438<\/p>\n<\/li>\n<li>\n<p>\u041c\u0435\u0442\u043e\u0434\u044b \u0434\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043a\u0443\u043a \u0438 \u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0443\u0442\u0435\u0439 \u043a API \u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u0432 \u043d\u0435\u0438\u0437\u043c\u0435\u043d\u0435\u043d\u043d\u043e\u043c \u0432\u0438\u0434\u0435, \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u0442\u044c \u0431\u043b\u0438\u0436\u0435 \u043a \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438.<\/p>\n<\/li>\n<li>\n<p>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f HSTS \u0443\u0431\u0440\u0430\u043d\u0430 \u0432 \u044d\u0433\u043e\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0446\u0435\u043b\u044f\u0445.<\/p>\n<\/li>\n<li>\n<p>\u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u043e \u0432 \u0432\u0438\u0434\u0435 \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0438\u0441\u0430 Angular \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0438 \u0443\u0442\u0438\u043b\u0438\u0442 \u044f\u0434\u0440\u0430 Angular. <\/p>\n<\/li>\n<\/ul>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>\u0421\u0442\u0430\u0442\u044c\u044f \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u043e\u0432 \u0435\u0432\u0435\u0440\u043a\u0443\u043a\u0438. \u041a\u0440\u0430\u0442\u043a\u043e \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u0436\u0434\u0430\u044f \u0438\u0437 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0439 \u0438 \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u043e\u043d\u0430 \u0443\u0447\u0430\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. <\/p>\n<p>\u041f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u044b \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f:<\/p>\n<ol>\n<li>\n<p>\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 cookie\u2011\u0444\u0430\u0439\u043b\u044b HTTP<\/p>\n<\/li>\n<li>\n<p>HTTP Strict Transport Security (HSTS)<\/p>\n<\/li>\n<li>\n<p>\u041b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u043e\u0431\u0449\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b (Flash cookies)<\/p>\n<\/li>\n<li>\n<p>\u0418\u0437\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 Silverlight<\/p>\n<\/li>\n<li>\n<p>\u0425\u0440\u0430\u043d\u0435\u043d\u0438\u0435 cookie\u2011\u0444\u0430\u0439\u043b\u043e\u0432, \u0437\u0430\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0432\u00a0\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u0445 RGB \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445, \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 PNG \u0441\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0442\u0435\u0433\u0430 HTML5\u00a0Canvas \u0434\u043b\u044f\u00a0\u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0433\u043e \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 (\u0444\u0430\u0439\u043b\u043e\u0432 cookie).<\/p>\n<\/li>\n<li>\n<p>\u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 cookie\u2011\u0444\u0430\u0439\u043b\u043e\u0432 \u0432\u00a0\u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u043f\u043e\u0438\u0441\u043a\u0430<\/p>\n<\/li>\n<li>\n<p>\u0425\u0440\u0430\u043d\u0435\u043d\u0438\u0435 cookie\u2011\u0444\u0430\u0439\u043b\u043e\u0432 \u0432\u00a0HTTP ETag<\/p>\n<\/li>\n<li>\n<p>\u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 cookie\u2011\u0444\u0430\u0439\u043b\u043e\u0432 \u0432\u00a0\u0432\u0435\u0431\u2011\u043a\u044d\u0448\u0435 <\/p>\n<\/li>\n<li>\n<p>\u041a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 window.name<\/p>\n<\/li>\n<li>\n<p>\u0425\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 Internet Explorer<\/p>\n<\/li>\n<li>\n<p>\u0412\u0435\u0431\u2011\u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0441\u0435\u0430\u043d\u0441\u043e\u0432 HTML5 <\/p>\n<\/li>\n<li>\n<p>\u041b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u0435\u0431\u2011\u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 HTML5<\/p>\n<\/li>\n<li>\n<p>\u0413\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 HTML5<\/p>\n<\/li>\n<li>\n<p>\u0411\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 HTML5\u00a0Web SQL \u0447\u0435\u0440\u0435\u0437 SQLite<\/p>\n<\/li>\n<li>\n<p>HTML5\u00a0IndexedDB<\/p>\n<\/li>\n<li>\n<p>Java JNLP PersistenceService<\/p>\n<\/li>\n<li>\n<p>\u042d\u043a\u0441\u043f\u043b\u043e\u0439\u0442 Java CVE-2013\u20130422<\/p>\n<\/li>\n<\/ol>\n<p>\u0417\u0430\u0442\u0435\u043c \u0438\u0434\u0435\u0442 \u0430\u043a\u0442\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u043e\u0432 \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f \u0441\u0432\u043e\u0434\u043d\u0430\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0430, \u0433\u0434\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u043e, \u043a\u0430\u043a\u0438\u0435 \u0438\u0437 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u043e\u0432 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0432 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f. <\/p>\n<p>\u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0441\u043f\u0438\u0441\u043e\u043a \u0440\u0430\u0431\u043e\u0447\u0438\u0445 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b \u0441\u0435\u0439\u0447\u0430\u0441:<\/p>\n<ul>\n<li>\n<p>\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 cookie-\u0444\u0430\u0439\u043b\u044b HTTP\u00a0<\/p>\n<\/li>\n<li>\n<p>HSTS<\/p>\n<\/li>\n<li>\n<p>\u0425\u0440\u0430\u043d\u0435\u043d\u0438\u0435 cookie-\u0444\u0430\u0439\u043b\u043e\u0432, \u0437\u0430\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u0445 RGB \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445, \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445\u00a0<\/p>\n<\/li>\n<li>\n<p>\u0425\u0440\u0430\u043d\u0435\u043d\u0438\u0435 cookie-\u0444\u0430\u0439\u043b\u043e\u0432 \u0432 HTTP ETag<\/p>\n<\/li>\n<li>\n<p>\u041a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 window.name<\/p>\n<\/li>\n<li>\n<p>\u0412\u0435\u0431-\u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0441\u0435\u0430\u043d\u0441\u043e\u0432 HTML5<\/p>\n<\/li>\n<li>\n<p>\u041b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u0435\u0431-\u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 HTML5<\/p>\n<\/li>\n<li>\n<p>\u0411\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 HTML5 Web SQL \u0447\u0435\u0440\u0435\u0437 SQLite<\/p>\n<\/li>\n<li>\n<p>HTML5 IndexedDB<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u043e\u0441\u043b\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0447\u0438\u0445 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u043e\u0432, \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f evercookie \u0434\u043b\u044f Angular, \u0433\u0434\u0435 \u043f\u0440\u0438\u0432\u043e\u0434\u044f\u0442\u0441\u044f \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438, \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u044e\u0449\u0438\u0435 \u043f\u0440\u0438\u043d\u0446\u0438\u043f \u0440\u0430\u0431\u043e\u0442\u044b. \u0421\u0435\u0440\u0432\u0435\u0440\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c, \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u043d\u0430 PHP \u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0430 \u0432 \u043d\u0435\u0438\u0437\u043c\u0435\u043d\u0435\u043d\u043d\u043e\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0435.<\/p>\n<p>\u0421\u043f\u0430\u0441\u0438\u0431\u043e \u0437\u0430 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435!<\/p>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p> <!----> <!----><\/div>\n<p> <!----> <!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/750856\/\"> https:\/\/habr.com\/ru\/articles\/750856\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width\"><\/figure>\n<p><a href=\"https:\/\/ru.wikipedia.org\/wiki\/Evercookie\" rel=\"noopener noreferrer nofollow\">Evercookie<\/a> \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0443 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f, \u0435\u0441\u043b\u0438 \u0442\u043e\u0442 \u0443\u0434\u0430\u043b\u0438\u043b \u043a\u0443\u043a\u0438. \u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0446\u0435\u043b\u044c evercookie\u00a0\u2014 \u044d\u0442\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0432\u043e\u00a0\u0432\u0441\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440. \u0415\u0441\u043b\u0438 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0443\u0434\u0430\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u0437\u00a0\u043a\u0430\u043a\u043e\u0433\u043e\u00a0\u043b\u0438\u0431\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430, \u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0447\u0442\u0435\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438\u0437\u00a0\u0434\u0440\u0443\u0433\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430.<\/p>\n<p>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e evercookie \u043c\u043e\u0436\u043d\u043e \u0433\u043b\u044f\u043d\u0443\u0442\u044c \u0432\u00a0\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 \u043d\u0430\u00a0github\u00a0\u2014 <a href=\"https:\/\/github.com\/samyk\/evercookie\" rel=\"noopener noreferrer nofollow\"><u>https:\/\/github.com\/samyk\/evercookie<\/u><\/a>.<\/p>\n<p>\u041f\u0440\u0438\u043d\u0446\u0438\u043f \u0440\u0430\u0431\u043e\u0442\u044b evercookie \u043f\u043e \u0448\u0430\u0433\u0430\u043c:<\/p>\n<ol>\n<li>\n<p>\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430 (UID) \u0438\u0437\u00a0\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449.<\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u043f\u0440\u0438\u00a0\u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0438 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432\u00a0\u0431\u044b\u043b\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u044b \u0440\u0430\u0437\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f,\u0442\u043e \u0442\u043e\u0433\u0434\u0430 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u043b\u0443\u0447\u0448\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438\u0437\u00a0\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 (\u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c \u0438\u0437\u00a0\u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439).<\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 UID \u043d\u0435\u00a0\u043d\u0430\u0439\u0434\u0435\u043d, \u0442\u043e \u0442\u043e\u0433\u0434\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u0438\u0441\u0432\u043e\u0438\u0442\u044c \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440. \u0422\u0430\u043a \u043a\u0430\u043a\u00a0\u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u00a0\u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430\u0445 \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0442\u043e \u0434\u043b\u044f\u00a0\u043f\u043e\u043b\u043d\u043e\u0442\u044b \u0440\u0430\u0431\u043e\u0442\u044b\u00a0\u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0447\u0438\u0441\u043b\u043e\u0432\u043e\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u043e\u0449\u0435 \u0437\u0430\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u0442\u044c. <\/p>\n<\/li>\n<\/ol>\n<h2>\u041c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u044b \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445<\/h2>\n<p>\u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u043e \u043d\u0430\u00a0\u0441\u0435\u043c\u043d\u0430\u0434\u0446\u0430\u0442\u0438 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430\u0445 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f.<\/p>\n<ol>\n<li>\n<p>\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 cookie\u2011\u0444\u0430\u0439\u043b\u044b HTTP<\/p>\n<\/li>\n<li>\n<p>HTTP Strict Transport Security (HSTS)<\/p>\n<\/li>\n<li>\n<p>\u041b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u043e\u0431\u0449\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b (Flash cookies)<\/p>\n<\/li>\n<li>\n<p>\u0418\u0437\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 Silverlight<\/p>\n<\/li>\n<li>\n<p>\u0425\u0440\u0430\u043d\u0435\u043d\u0438\u0435 cookie\u2011\u0444\u0430\u0439\u043b\u043e\u0432, \u0437\u0430\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0432\u00a0\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u0445 RGB \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445, \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 PNG \u0441\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0442\u0435\u0433\u0430 HTML5\u00a0Canvas \u0434\u043b\u044f\u00a0\u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0433\u043e \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 (\u0444\u0430\u0439\u043b\u043e\u0432 cookie).<\/p>\n<\/li>\n<li>\n<p>\u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 cookie\u2011\u0444\u0430\u0439\u043b\u043e\u0432 \u0432\u00a0\u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u043f\u043e\u0438\u0441\u043a\u0430<\/p>\n<\/li>\n<li>\n<p>\u0425\u0440\u0430\u043d\u0435\u043d\u0438\u0435 cookie\u2011\u0444\u0430\u0439\u043b\u043e\u0432 \u0432\u00a0HTTP ETag<\/p>\n<\/li>\n<li>\n<p>\u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 cookie\u2011\u0444\u0430\u0439\u043b\u043e\u0432 \u0432\u00a0\u0432\u0435\u0431\u2011\u043a\u044d\u0448\u0435 <\/p>\n<\/li>\n<li>\n<p>\u041a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 window.name<\/p>\n<\/li>\n<li>\n<p>\u0425\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 Internet Explorer<\/p>\n<\/li>\n<li>\n<p>\u0412\u0435\u0431\u2011\u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0441\u0435\u0430\u043d\u0441\u043e\u0432 HTML5 <\/p>\n<\/li>\n<li>\n<p>\u041b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u0435\u0431\u2011\u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 HTML5<\/p>\n<\/li>\n<li>\n<p>\u0413\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 HTML5<\/p>\n<\/li>\n<li>\n<p>\u0411\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 HTML5\u00a0Web SQL \u0447\u0435\u0440\u0435\u0437 SQLite<\/p>\n<\/li>\n<li>\n<p>HTML5\u00a0IndexedDB<\/p>\n<\/li>\n<li>\n<p>Java JNLP PersistenceService<\/p>\n<\/li>\n<li>\n<p>\u042d\u043a\u0441\u043f\u043b\u043e\u0439\u0442 Java CVE-2013\u20130422<\/p>\n<\/li>\n<\/ol>\n<blockquote>\n<p>\u0421\u043f\u0438\u0441\u043e\u043a \u0432\u0437\u044f\u0442 \u0441 \u0412\u0438\u043a\u0438\u043f\u0435\u0434\u0438\u0438 \u0438 \u0441\u0440\u0430\u0432\u043d\u0435\u043d \u0441 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u043c\u0438 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430\u043c\u0438. <\/p>\n<p>\u041f\u043e\u0434 \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u043c \u043f\u0443\u043d\u043a\u0442 &#8212; \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 cookie\u2011\u0444\u0430\u0439\u043b\u043e\u0432 \u0432\u00a0\u0432\u0435\u0431\u2011\u043a\u044d\u0448\u0435. \u0415\u0441\u043b\u0438 \u0440\u0435\u0447\u044c \u0438\u0434\u0435\u0442 \u043f\u0440\u043e basic authorization, \u0442\u043e \u0442\u043e\u0433\u0434\u0430 \u0432\u0441\u0435 \u0445\u043e\u0440\u043e\u0448\u043e.<\/p>\n<\/blockquote>\n<p>\u041a\u0440\u0430\u0442\u043a\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u043e\u0432 \u0441 \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430 \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. <\/p>\n<h4>\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 cookie-\u0444\u0430\u0439\u043b\u044b HTTP<\/h4>\n<p><a href=\"https:\/\/developer.mozilla.org\/ru\/docs\/Web\/HTTP\/Cookies\" rel=\"noopener noreferrer nofollow\">HTTP-\u043a\u0443\u043a\u0438<\/a> \u2014 \u044d\u0442\u043e \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043a\u0443\u043a\u0438 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430. \u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0441\u0430\u0439\u0442\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u043a\u0443\u043a\u0438 \u0434\u043b\u044f\u00a0\u0441\u0435\u0441\u0441\u0438\u0439 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432. \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043f\u043e\u0441\u0435\u0449\u0430\u0435\u0442 \u0441\u0430\u0439\u0442 \u0438 \u0435\u043c\u0443 \u0441\u0435\u0440\u0432\u0435\u0440 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u0432\u00a0\u043a\u0443\u043a\u0438 UID, \u043f\u043e\u00a0\u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0432\u00a0\u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u0441\u0435\u0440\u0432\u0435\u0440 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u0447\u0442\u043e\u00a0\u0437\u0430\u00a0\u043a\u043b\u0438\u0435\u043d\u0442 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435.<\/p>\n<h4>HTTP Strict Transport Security (HSTS)<\/h4>\n<p><a href=\"https:\/\/developer.mozilla.org\/ru\/docs\/Web\/HTTP\/Headers\/Strict-Transport-Security\" rel=\"noopener noreferrer nofollow\">HTTP Strict Transport Security<\/a> \u2014 \u044d\u0442\u043e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0434\u043b\u044f\u00a0\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0437\u0430\u0449\u0438\u0449\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0432\u00a0\u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435 \u0438 \u0441\u0432\u044f\u0437\u0430\u043d \u0441\u00a0\u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u043c \u0434\u043e\u043c\u0435\u043d\u043e\u043c \u0438 \u043f\u043e\u0434\u0434\u043e\u043c\u0435\u043d\u0430\u043c\u0438. \u041c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043d\u0430\u0431\u043e\u0440 \u0434\u043e\u043c\u0435\u043d\u043e\u0432, \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u0445 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u043e\u0436\u0435\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u00ab\u0434\u0430\u00bb \u0438\u043b\u0438 \u00ab\u043d\u0435\u0442\u00bb. \u0424\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u043e\u0434\u0438\u043d \u0434\u043e\u043c\u0435\u043d \u044d\u0442\u043e \u043e\u0434\u0438\u043d \u0431\u0438\u0442, \u0435\u0441\u043b\u0438 \u0432\u0437\u044f\u0442\u044c 32\u00a0\u0434\u043e\u043c\u0435\u043d\u0430, \u0442\u043e \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u0442\u044c int. <\/p>\n<p>\u041d\u0430\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u043f\u0440\u0438\u0441\u0432\u043e\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0440\u0430\u0432\u043d\u043e\u0435 21, \u0442\u043e \u0432\u00a0\u0434\u0432\u043e\u0438\u0447\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442: 00\u00a0000\u00a0000\u00a0000\u00a0000\u00a0000\u00a0000\u00a0000\u00a0000\u00a0010\u00a0101. <\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u0434\u043e\u043c\u0435\u043d\u043e\u0432 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 0 \u0438\u043b\u0438 1, \u0433\u0434\u0435 \u0441\u0435\u0440\u0432\u0435\u0440 \u0441\u0435\u0431\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043b\u0438 <code>HSTS<\/code> \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0434\u043e\u043c\u0435\u043d\u0430. \u041f\u043e\u0441\u043b\u0435 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449, \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0438\u0442\u044c \u0443 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 \u0434\u043e\u043c\u0435\u043d\u043e\u0432 \u043d\u0443\u0436\u043d\u043e \u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>https<\/code>. \u0418 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0432 \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432 \u0447\u0438\u0441\u043b\u043e \u0438\u0437 \u0434\u0432\u043e\u0438\u0447\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u0442\u0435\u0440\u0442\u044b\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440.<\/p>\n<h4>\u041b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u043e\u0431\u0449\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b (Flash cookies)<\/h4>\n<p><a href=\"https:\/\/ru.wikipedia.org\/wiki\/Adobe_Flash\" rel=\"noopener noreferrer nofollow\">Adobe Flash<\/a> &#8212; \u043e\u0434\u043d\u0430 \u0438\u0437\u00a0\u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0439 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0439 \u0432\u00a0\u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435. \u0424\u043b\u0435\u0448 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043d\u0430\u00a0\u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u043c \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435, \u043d\u043e\u00a0\u0438\u0437\u2011\u0437\u0430 \u0441\u0432\u043e\u0435\u0439 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u044d\u0442\u043e\u0433\u043e \u0443\u0436\u0435 \u043d\u0438\u043a\u0442\u043e \u043d\u0435\u00a0\u0434\u0435\u043b\u0430\u0435\u0442. \u041c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u043a\u0435\u0448\u0430 flash. \u041d\u0430\u0432\u0435\u0440\u043d\u043e\u0435, \u044d\u0442\u043e \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435, \u0442\u0440\u0443\u0434\u043d\u043e \u0443\u0434\u0430\u043b\u044f\u0435\u043c\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0442\u0430\u043a \u043a\u0430\u043a\u00a0\u0435\u0433\u043e \u0441\u043b\u043e\u0436\u043d\u043e \u0441\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u0432\u00a0\u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435.<\/p>\n<p>\u0421\u0442\u043e\u0438\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u0440\u0435\u0448\u0435\u043d\u0438\u044f. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u044d\u0442\u043e\u0442 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0434\u043e\u00a0\u0441\u0438\u0445 \u043f\u043e\u0440.<\/p>\n<blockquote>\n<p>\u042f \u043e\u0442\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u043e\u0442 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u043e\u00a0\u0444\u043b\u0435\u0448\u0435, \u0442\u0430\u043a \u043a\u0430\u043a\u00a0\u0432\u0441\u0435 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u044b \u0431\u0443\u0434\u0443\u0442 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e. \u0410\u00a0\u043e\u0431\u0445\u043e\u0434\u043d\u044b\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0434\u043b\u044f\u00a0\u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u0441\u043e\u043c\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438.<\/p>\n<\/blockquote>\n<h4>\u0418\u0437\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 Silverlight  <\/h4>\n<p><a href=\"https:\/\/ru.wikipedia.org\/wiki\/Microsoft_Silverlight\" rel=\"noopener noreferrer nofollow\">Silverlight<\/a> \u2014 \u044d\u0442\u043e \u0430\u043d\u0430\u043b\u043e\u0433 flash \u043e\u0442\u00a0Microsoft. \u041c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u0435\u043d \u0444\u043b\u0435\u0448\u0443, \u0433\u0434\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u043a\u0435\u0448.<\/p>\n<blockquote>\n<p>\u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0434\u043e\u00a0\u0441\u0438\u0445 \u043f\u043e\u0440, \u043e\u0434\u043d\u0430\u043a\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0441\u00a0\u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u043c <code>silverlight<\/code> \u0441\u0442\u0440\u0435\u043c\u0438\u0442\u0441\u044f \u043a\u00a0\u043d\u0443\u043b\u044e. <\/p>\n<\/blockquote>\n<p><strong>\u0425\u0440\u0430\u043d\u0435\u043d\u0438\u0435 cookie\u2011\u0444\u0430\u0439\u043b\u043e\u0432, \u0437\u0430\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0432\u00a0\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u0445 RGB \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445, \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 PNG \u0441\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0442\u0435\u0433\u0430 HTML5\u00a0Canvas \u0434\u043b\u044f\u00a0\u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0433\u043e \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 (\u0444\u0430\u0439\u043b\u043e\u0432 cookie).<\/strong><\/p>\n<p>\u041c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d \u043d\u0430\u00a0\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0438 \u0435\u0433\u043e \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438. \u041f\u0440\u0438\u00a0\u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f, \u0438\u0434\u0435\u0442 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0435 \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0441\u0442\u0435\u0440\u0442\u044b\u0439 UID.<\/p>\n<h4>\u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 cookie-\u0444\u0430\u0439\u043b\u043e\u0432 \u0432 \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u043f\u043e\u0438\u0441\u043a\u0430<\/h4>\n<p>\u041c\u0435\u0442\u043e\u0434 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u043d\u0430\u00a0\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0438 \u043f\u043e\u0441\u0435\u0449\u0435\u043d\u043d\u044b\u0445 \u0441\u0430\u0439\u0442\u043e\u0432. \u0420\u0430\u043d\u044c\u0448\u0435 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u043b \u043f\u043e\u043d\u044f\u0442\u044c, \u043f\u043e\u0441\u0435\u0449\u0435\u043d\u00a0\u043b\u0438 \u0441\u0430\u0439\u0442 \u0440\u0430\u043d\u0435\u0435 \u0441\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u0441\u0435\u0432\u0434\u043e\u043a\u043b\u0430\u0441\u0441\u0430 <code>:visited<\/code> \u0432\u00a0CSS. \u0412\u00a0\u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442, Javascript \u043d\u0435\u00a0\u0438\u043c\u0435\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a\u00a0\u0434\u0430\u043d\u043d\u043e\u043c\u0443 \u043f\u0441\u0435\u0432\u0434\u043e\u043a\u043b\u0430\u0441\u0441\u0443 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0441\u0441\u044b\u043b\u043a\u0438. <\/p>\n<h4>\u0425\u0440\u0430\u043d\u0435\u043d\u0438\u0435 cookie-\u0444\u0430\u0439\u043b\u043e\u0432 \u0432 HTTP ETag<\/h4>\n<p><a href=\"https:\/\/developer.mozilla.org\/ru\/docs\/Web\/HTTP\/Headers\/ETag\" rel=\"noopener noreferrer nofollow\">Etag<\/a>\u00a0\u2014 \u044d\u0442\u043e \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0432\u0435\u0440\u0441\u0438\u044e \u0440\u0435\u0441\u0443\u0440\u0441\u0430. \u041c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432\u00a0\u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u043d\u0438\u0438 UID \u0432\u0435\u0440\u0441\u0438\u0438 etag.<\/p>\n<p><strong>\u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 cookie\u2011\u0444\u0430\u0439\u043b\u043e\u0432 \u0432\u00a0\u0432\u0435\u0431\u2011\u043a\u044d\u0448\u0435 (Basic Authentication cache)<\/strong><\/p>\n<p>\u0420\u0430\u043d\u044c\u0448\u0435 \u043f\u0440\u0438\u00a0\u0431\u0430\u0437\u043e\u0432\u043e\u0439 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u043c\u043e\u0436\u043d\u043e\u00a0\u0431\u044b\u043b\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043a\u0435\u0448. \u041c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0441\u0442\u0440\u043e\u0438\u043b\u0441\u044f \u043d\u0430\u00a0\u0437\u0430\u043f\u0438\u0441\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043d\u0430\u00a0\u0441\u0435\u0440\u0432\u0435\u0440. \u0414\u043b\u044f\u00a0\u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f\u00a0\u0431\u044b\u043b\u0430 \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0441\u00a0\u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u0433\u0434\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u0430\u0441\u044c \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f. <\/p>\n<blockquote>\n<p>\u042f \u043b\u0438\u0447\u043d\u043e \u0441\u0430\u043c \u043d\u0435 \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u043b\u0441\u044f \u0441 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u043c \u0438 \u0432 \u043f\u043e\u0437\u0434\u043d\u0438\u0445 \u043a\u043e\u043c\u043c\u0438\u0442\u0430\u0445 \u044d\u0442\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0432\u044b\u043a\u043b\u044e\u0447\u0438\u043b\u0438.\u00a0<\/p>\n<\/blockquote>\n<h4>\u041a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 window.name<\/h4>\n<p>\u0423\u00a0\u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 <a href=\"https:\/\/developer.mozilla.org\/ru\/docs\/Web\/API\/Window\" rel=\"noopener noreferrer nofollow\">Window<\/a> \u0435\u0441\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c\u043e\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e\u00a0\u2014 <code>name<\/code>, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0437\u0430\u0434\u0430\u0435\u0442 \u0438\u043c\u044f \u043e\u043a\u043d\u0430. \u041e\u0431\u044b\u0447\u043d\u043e \u0441\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e \u044d\u0442\u043e\u0433\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u043b\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u043c\u0435\u0436\u0434\u0443 \u043e\u043a\u043d\u0430\u043c\u0438. <\/p>\n<p>\u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 <code>window.name<\/code> &#8212; \u044d\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0434\u0430\u0436\u0435 \u043f\u0440\u0438\u00a0\u043e\u0447\u0438\u0441\u0442\u043a\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449. <\/p>\n<p>\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u0432\u00a0\u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u043f\u0430\u043d\u0435\u043b\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0438 \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u0432\u043e\u00a0\u0432\u043a\u043b\u0430\u0434\u043a\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0438\u0445 \u0438\u00a0\u043d\u0435\u00a0\u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443, \u0442\u043e \u0438\u043c\u044f \u043e\u043a\u043d\u0430 \u043d\u0435\u00a0\u0431\u0443\u0434\u0435\u0442 \u0441\u0431\u0440\u043e\u0448\u0435\u043d\u043e, \u0430\u00a0\u0437\u043d\u0430\u0447\u0438\u0442 evercookie \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0430 \u0438 \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u0441\u043d\u043e\u0432\u0430 \u0432\u0435\u0437\u0434\u0435.<\/p>\n<h4>\u0425\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 Internet Explorer<\/h4>\n<p>\u041c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0437\u0430\u043f\u0438\u0441\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u00a0IE. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0434\u043e\u00a0\u0441\u0438\u0445 \u043f\u043e\u0440, \u043d\u043e\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 IE \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u0442\u0441\u044f, \u0438 \u0441\u043a\u043e\u0440\u043e \u0441\u043e\u0432\u0441\u0435\u043c \u0438\u0441\u0447\u0435\u0437\u043d\u0435\u0442.<\/p>\n<p>\u041c\u0435\u0442\u043e\u0434 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d \u043d\u0430\u00a0\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 div \u0438 \u0437\u0430\u043f\u0438\u0441\u0438 UID. \u041f\u0440\u0438\u00a0\u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438\u0437\u00a0\u043a\u0435\u0448\u0430. <\/p>\n<blockquote>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 IE, \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u0434\u0435\u044f\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0432\u0441\u0435 \u0442\u0430\u043a \u0438 \u0435\u0441\u0442\u044c. \u042f \u043d\u0435 \u0443\u0433\u043b\u0443\u0431\u043b\u044f\u043b\u0441\u044f \u0432 \u0434\u0430\u043d\u043d\u0443\u044e \u0442\u0435\u0445\u043d\u0438\u043a\u0443.\u00a0<\/p>\n<\/blockquote>\n<h4>\u0412\u0435\u0431-\u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0441\u0435\u0430\u043d\u0441\u043e\u0432 HTML5<\/h4>\n<p><a href=\"https:\/\/developer.mozilla.org\/ru\/docs\/Web\/API\/Window\/sessionStorage\" rel=\"noopener noreferrer nofollow\">SessionStorage<\/a> \u2014 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0434\u043b\u044f\u00a0\u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0435\u0441\u0441\u0438\u0438. \u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0447\u0438\u0449\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0438 \u0441\u0435\u0441\u0441\u0438\u0438. <\/p>\n<p>\u041c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u00a0\u0437\u0430\u043f\u0438\u0441\u0438 \u043a\u043b\u044e\u0447\u0430 \u0432\u00a0\u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0438 \u0435\u0433\u043e \u0447\u0442\u0435\u043d\u0438\u0438.<\/p>\n<blockquote>\n<p>\u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043a\u0430\u043a \u0447\u0430\u0441\u044b.<\/p>\n<\/blockquote>\n<h4>\u041b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u0435\u0431-\u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 HTML5<\/h4>\n<p><a href=\"https:\/\/developer.mozilla.org\/ru\/docs\/Web\/API\/Window\/localStorage\" rel=\"noopener noreferrer nofollow\">LocalStorage<\/a>\u00a0\u2014 \u044d\u0442\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0434\u043b\u044f\u00a0\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445. \u0414\u0430\u043d\u043d\u044b\u0435 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u043f\u043e\u043a\u0430 \u043d\u0435\u00a0\u0431\u0443\u0434\u0443\u0442 \u043e\u0447\u0438\u0449\u0435\u043d\u044b \u0432\u0440\u0443\u0447\u043d\u0443\u044e. \u041c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d \u043d\u0430\u00a0\u0437\u0430\u043f\u0438\u0441\u0438 \u043a\u043b\u044e\u0447\u0430 \u0432\u00a0\u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0438 \u0435\u0433\u043e \u0447\u0442\u0435\u043d\u0438\u0438.<\/p>\n<h4>\u0413\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 HTML5<\/h4>\n<p>\u041a\u0440\u043e\u0441\u0441\u0434\u043e\u043c\u0435\u043d\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0440\u0430\u043d\u044c\u0448\u0435\u00a0\u0431\u044b\u043b\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u0434\u043b\u044f\u00a0\u0437\u0430\u043f\u0438\u0441\u0438 \u0438 \u0447\u0442\u0435\u043d\u0438\u044f. \u0412\u00a0\u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0435\u00a0\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e. <\/p>\n<p>\u041c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u0435\u043d <code>LocalStorage<\/code> \u0438 <code>SessionStorage<\/code>.<\/p>\n<h4>\u0411\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 HTML5 Web SQL \u0447\u0435\u0440\u0435\u0437 SQLite<\/h4>\n<p><a href=\"https:\/\/ru.wikipedia.org\/wiki\/Web_SQL\" rel=\"noopener noreferrer nofollow\">Web SQL<\/a> \u00a0\u2014 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0430\u044f \u0431\u0430\u0437\u0430 SQLite \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430\u044f \u0432\u00a0\u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435. <\/p>\n<p>\u041c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432\u00a0\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043d\u043e\u0432\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0438 \u0437\u0430\u043f\u0438\u0441\u0438 \u0442\u0443\u0434\u0430 UID. \u0422\u0430\u043a \u043a\u0430\u043a\u00a0\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435\u00a0\u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0435\u0442\u0441\u044f, \u0442\u043e \u0441\u043a\u043e\u0440\u043e \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u044b \u043f\u0440\u0435\u043a\u0440\u0430\u0442\u044f\u0442 \u0435\u0433\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443. <\/p>\n<h4>HTML5 IndexedDB<\/h4>\n<p><a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/IndexedDB_API\" rel=\"noopener noreferrer nofollow\">IndexedDB<\/a>\u00a0\u2014 \u044d\u0442\u043e \u0437\u0430\u043c\u0435\u043d\u0430 Web SQL. <\/p>\n<p>\u041c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u0442\u0430\u043a\u043e\u0439\u00a0\u0436\u0435 \u043a\u0430\u043a\u00a0\u0438 \u043f\u0440\u0438\u00a0Web SQL. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0430, \u0430\u00a0\u0437\u0430\u0442\u0435\u043c \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f UID.<\/p>\n<h4>Java JNLP PersistenceService<\/h4>\n<p><a href=\"https:\/\/docs.oracle.com\/javase%2F9%2Fdocs%2Fapi%2F%2F\/javax\/jnlp\/PersistenceService.html\" rel=\"noopener noreferrer nofollow\">PersistenceService<\/a>\u00a0\u2014 \u044d\u0442\u043e \u0441\u0435\u0440\u0432\u0438\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432\u00a0\u043a\u0435\u0448\u0435 \u0441\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e java.<\/p>\n<p>\u041c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044e Java Applet, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0443\u043c\u0435\u0440\u043b\u0430 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441\u00a0Flash \u0438 Silverlight. <\/p>\n<blockquote>\n<p>\u041e\u043d\u0430 \u0447\u0430\u0441\u0442\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432, \u0436\u0434\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u044b. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u00a0\u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u043c \u0432\u0435\u0431\u0435 \u0441\u043e\u043c\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e.<\/p>\n<\/blockquote>\n<h4>\u042d\u043a\u0441\u043f\u043b\u043e\u0439\u0442 Java CVE-2013-0422<\/h4>\n<p>\u042d\u043a\u0441\u043f\u043b\u043e\u0439\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043b\u044e\u0431\u043e\u0439 \u043a\u043e\u0434 \u0438\u0437\u2011\u0437\u0430 \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0439 \u043e\u0448\u0438\u0431\u043a\u0438. \u041f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e \u043a\u00a0\u0441\u0442\u0430\u0440\u044b\u043c \u0432\u0435\u0440\u0441\u0438\u044f\u043c Java. <\/p>\n<p>\u0412 \u0438\u0442\u043e\u0433\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u043d\u0430 2023 \u0433\u043e\u0434 \u0441\u043f\u0438\u0441\u043e\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0445 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u043e\u0432:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td data-colwidth=\"84\" width=\"84\">\n<p align=\"center\"><strong>+\/-<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"center\"><strong>\u041c\u0435\u0442\u043e\u0434<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"84\" width=\"84\">\n<p align=\"center\">+<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 cookie-\u0444\u0430\u0439\u043b\u044b HTTP\u00a0<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"84\" width=\"84\">\n<p align=\"center\">+<\/p>\n<\/td>\n<td>\n<p align=\"left\">HSTS<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"84\" width=\"84\">\n<p align=\"center\">&#8212;<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u043e\u0431\u0449\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b*<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"84\" width=\"84\">\n<p align=\"center\">&#8212;<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0418\u0437\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 Silverlight*<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"84\" width=\"84\">\n<p align=\"center\">+<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0425\u0440\u0430\u043d\u0435\u043d\u0438\u0435 cookie-\u0444\u0430\u0439\u043b\u043e\u0432, \u0437\u0430\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u0445 RGB \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445, \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445\u00a0<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"84\" width=\"84\">\n<p align=\"center\">&#8212;<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 cookie-\u0444\u0430\u0439\u043b\u043e\u0432 \u0432 \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u043f\u043e\u0438\u0441\u043a\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"84\" width=\"84\">\n<p align=\"center\">+<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0425\u0440\u0430\u043d\u0435\u043d\u0438\u0435 cookie-\u0444\u0430\u0439\u043b\u043e\u0432 \u0432 HTTP ETag<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"84\" width=\"84\">\n<p align=\"center\">&#8212;<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 cookie-\u0444\u0430\u0439\u043b\u043e\u0432 \u0432 \u0432\u0435\u0431-\u043a\u044d\u0448\u0435 (Basic Authentication cache)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"84\" width=\"84\">\n<p align=\"center\">+<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 window.name<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"84\" width=\"84\">\n<p align=\"center\">&#8212;<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0425\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 Internet Explorer*<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"84\" width=\"84\">\n<p align=\"center\">+<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0412\u0435\u0431-\u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0441\u0435\u0430\u043d\u0441\u043e\u0432 HTML5<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"84\" width=\"84\">\n<p align=\"center\">+<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u0435\u0431-\u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 HTML5<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"84\" width=\"84\">\n<p align=\"center\">&#8212;<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0413\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 HTML5<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"84\" width=\"84\">\n<p align=\"center\">+<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0411\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 HTML5 Web SQL \u0447\u0435\u0440\u0435\u0437 SQLite<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"84\" width=\"84\">\n<p align=\"center\">+<\/p>\n<\/td>\n<td>\n<p align=\"left\">HTML5 IndexedDB<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"84\" width=\"84\">\n<p align=\"center\">&#8212;<\/p>\n<\/td>\n<td>\n<p align=\"left\">Java JNLP PersistenceService*<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"84\" width=\"84\">\n<p align=\"center\">&#8212;<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u042d\u043a\u0441\u043f\u043b\u043e\u0439\u0442 Java CVE-2013-0422*<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0412\u0441\u0435 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u044b \u043f\u043e\u043c\u0435\u0447\u0435\u043d\u043d\u044b\u0435 \u0437\u0432\u0435\u0437\u0434\u043e\u0447\u043a\u043e\u0439 \u0441\u043a\u043e\u0440\u0435\u0435 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442, \u0447\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442.\u00a0<\/p>\n<blockquote>\n<p>\u041e\u0431\u044b\u0447\u043d\u043e \u044d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u0441\u0442\u0430\u0440\u044b\u0435 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u044b, \u043f\u0440\u0438\u0447\u0435\u043c \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043d\u044b\u0435.<\/p>\n<\/blockquote>\n<p>\u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u043f\u043e\u0434 \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u043c HSTS. \u041f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e, \u0432\u0441\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c, \u043d\u043e \u0441\u0442\u043e\u0438\u0442 \u044d\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c.\u00a0<\/p>\n<h2>\u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043b\u0438 \u044d\u0442\u043e \u0432\u0441\u0435 \u0432 2023 \u0433\u043e\u0434\u0443<\/h2>\n<p>\u0415\u0441\u043b\u0438 \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u0445, \u0442\u043e \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0441\u0442\u0430\u0440\u044b\u0445 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0431\u044b\u043b\u0430 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0430 \u0432 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430\u0445. <\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u043e\u0432\u0443\u044e \u0441\u0435\u0441\u0441\u0438\u044e, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u043d\u043e\u0432\u0443\u044e \u0432\u043a\u043b\u0430\u0434\u043a\u0443 \u0432 \u0438\u043d\u043a\u043e\u0433\u043d\u0438\u0442\u043e. \u0422\u0435\u043a\u0443\u0449\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f evercookie \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u0442 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435.<\/p>\n<p><strong>\u0414\u043b\u044f \u0447\u0435\u0433\u043e \u0442\u043e\u0433\u0434\u0430 \u0441\u0442\u043e\u0438\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c evercookie?<\/strong><\/p>\n<p>Evercookie \u0445\u043e\u0440\u043e\u0448\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0434\u043b\u044f \u043e\u0431\u044b\u0447\u043d\u044b\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u0447\u0438\u0441\u0442\u044f\u0442 \u0438\u0441\u0442\u043e\u0440\u0438\u044e, \u043d\u0435 \u0443\u0434\u0430\u043b\u044f\u044e\u0442 \u043a\u0443\u043a\u0438. \u042d\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0447\u0442\u043e\u0431\u044b \u0441\u0432\u044f\u0437\u0430\u0442\u044c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0441 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c. \u0414\u043b\u044f \u044d\u0442\u0438\u0445 \u0446\u0435\u043b\u0435\u0439 \u044d\u0432\u0435\u0440\u043a\u0443\u043a\u0430 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e.<\/p>\n<p><strong>\u0414\u0440\u0443\u0433\u0438\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438 \u044d\u0442\u043e \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043a\u0430\u043a \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0432\u0435\u0447\u043d\u044b\u0445 \u043a\u0443\u043a?<\/strong><\/p>\n<p>\u0415\u0441\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b, \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 &#8212; \u0444\u0438\u043d\u0433\u0435\u0440\u043f\u0440\u0438\u043d\u0442\u0438\u043d\u0433. \u041e\u0434\u043d\u0430 \u0438\u0437 \u0442\u0435\u0445\u043d\u0438\u043a \u044d\u0442\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u0448\u0440\u0438\u0444\u0442\u043e\u0432 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435. <\/p>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e, \u0441\u0442\u043e\u0438\u0442 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c, \u0447\u0442\u043e \u0432\u0441\u0435 \u0444\u0438\u043d\u0433\u0435\u0440\u043f\u0440\u0438\u043d\u0442\u044b \u043d\u0435 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b. \u0415\u0441\u043b\u0438 \u0432\u0437\u044f\u0442\u044c \u0434\u0432\u0430 \u043d\u043e\u0432\u044b\u0445 iphone, \u043e\u0434\u043d\u043e\u0439 \u0441\u0435\u0440\u0438\u0438 \u0438 \u043c\u043e\u0434\u0435\u043b\u0438 \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043d\u0430 \u043d\u0438\u0445 \u0444\u0438\u043d\u0433\u0435\u0440\u043f\u0440\u0438\u043d\u0442\u044b, \u0442\u043e \u043e\u043d\u0438 \u0441\u043e\u0432\u043f\u0430\u0434\u0443\u0442 \u0441 99.99% \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c\u044e.<\/p>\n<h2>\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u0441\u043f\u043e\u0441\u043e\u0431\u044b<\/h2>\n<p>\u0423 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044f \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u044f\u0432\u0438\u0442\u044c\u0441\u044f \u0432\u043e\u043f\u0440\u043e\u0441, \u0430 \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u043b\u0438 \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u043d\u043e\u0432\u044b\u0435 \u0441\u043f\u043e\u0441\u043e\u0431\u044b \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f?<\/p>\n<p>\u0418\u0437 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 &#8212; \u044d\u0442\u043e supercookie \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u0430\u044f \u043d\u0430 \u0444\u0430\u0432\u0438\u043a\u043e\u043d\u0430\u0445. \u041f\u0440\u043e\u0435\u043a\u0442 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0442\u0443\u0442 &#8212; <a href=\"https:\/\/github.com\/jonasstrehle\/supercookie\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/jonasstrehle\/supercookie<\/a>.<\/p>\n<blockquote>\n<p>\u0423\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 chrome 111. <\/p>\n<\/blockquote>\n<p>\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 <a class=\"mention\" href=\"\/company\/itsumma\">ITSumma<\/a> &#8212; <a href=\"https:\/\/habr.com\/ru\/companies\/itsumma\/articles\/542734\/\" rel=\"noopener noreferrer nofollow\">\u042d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0444\u0438\u043d\u0433\u0435\u0440\u043f\u0440\u0438\u043d\u0442\u0438\u043d\u0433 \u0447\u0435\u0440\u0435\u0437 \u043a\u044d\u0448 \u0444\u0430\u0432\u0438\u043a\u043e\u043d\u043e\u0432 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435<\/a>.  <\/p>\n<p>\u0422\u0430\u043a\u0436\u0435 \u0435\u0441\u0442\u044c issue \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u044d\u0432\u0435\u0440\u043a\u0443\u043a\u0438 <a href=\"https:\/\/github.com\/samyk\/evercookie\/issues\/136\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/samyk\/evercookie\/issues\/136<\/a>, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u0435\u0442\u0441\u044f \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u044d\u0448 TLS \u0441\u0435\u0441\u0441\u0438\u0438. <\/p>\n<blockquote>\n<p>\u041c\u043d\u0435 \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u044d\u0442\u043e \u0438\u043b\u0438 \u043d\u0435\u0442. \u041d\u0443\u0436\u043d\u043e \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c.<\/p>\n<\/blockquote>\n<h2>\u0417\u0430\u0447\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Evercookie<\/h2>\n<p>\u041a\u0430\u043a\u00a0\u0433\u043e\u0432\u043e\u0440\u0438\u043b\u043e\u0441\u044c<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-350899","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/350899","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=350899"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/350899\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=350899"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=350899"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=350899"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}