我需要在我的服务中注册用户设备。但我真的不知道如何开始。我的意思是,我知道关键字是"设备指纹识别",但我发现这是一个问题,而不是解决方案。
我想在 Office 365 或某些银行网站中实现一些目标。 用户可以注册他的设备(第一次设备注册将自动(,也可以阻止/删除他的设备。那么,是否有任何可靠的算法或现成的解决方案来实现这一目标?
我知道我可以用屏幕分辨率获取用户的浏览器指纹,但这不是我要问的。我希望能够完全统一地识别用户的机器(考虑到用户可能在他的机器中进行的一些更改(。
"记住我"或"信任此设备"的最简单直接(但不是最安全的方法(是安装带有随机数的cookie - 加密的唯一用户和设备哈希代码标识符。这允许服务唯一标识该设备上的用户设备和浏览器,除非使用专用会话或清除浏览器缓存。它还应该允许你的服务为用户提供受信任的设备/浏览器列表,以阻止无法识别或被盗的设备/浏览器,因为它将存储在后端数据库中以进行身份验证。
正如这里所讨论的,它并不完全安全,因为 cookie 可能会被盗。
Scott Arciszewski在这里的回答描述了一种更安全的方法,该方法使用cookie,其中可以包括您已经知道的指纹识别。
Cookie 可能会在指定的时间段内过期,而不会连接到您的服务。
一种选择可能是使用Evercookie。使用您自己的算法为设备创建唯一标识符,并将其存储在 Evercookie 中。
Evercookie 是一个 Javascript API,可在浏览器中生成极其持久的 cookie。它的目标是识别客户端,即使他们删除了标准 cookie、Flash cookie(本地共享对象或 LSO(等。
这是通过将 Cookie 数据存储在尽可能多的浏览器存储机制上来实现的。如果从任何存储机制中删除 cookie 数据,只要一个机制仍然完好无损,evercookie 就会积极地在每个机制中重新创建它。
如果Flash LSO,Silverlight或Java机制可用,Evercookie甚至可以在同一客户端计算机上的不同浏览器之间传播cookie!
客户端浏览器必须支持以下尽可能多的存储机制 可能使Evercookie有效。
- 标准 HTTP 饼干
- 闪存本地共享对象
- 银光独立存储
- CSS历史敲门
- 将 cookie 存储在 HTTP ETag 中(需要后端服务器(
- 将 Cookie 存储在 Web 缓存中(需要后端服务器(
- HTTP 严格传输安全 (HSTS( 固定(在隐身模式下工作(
- window.name 缓存
- IE用户数据存储
- HTML5 会话存储
- HTML5 本地存储
- HTML5 全局存储
- HTML5 数据库存储通过 SQLite
- HTML5 画布 - 存储在自动生成、强制缓存的 PNG 图像的 RGB 数据中的 Cookie 值(需要后端服务器(
- HTML5 索引数据库
- Java JNLP PersistenceService
- Java 漏洞 CVE-2013-0422 - 尝试转义小程序沙箱并将 cookie 数据直接写入用户的硬盘驱动器。
用法:
<script type="text/javascript" src="evercookie.js"></script>
<script>
var ec = new evercookie();
// set a cookie "id" to "12345"
// usage: ec.set(key, value)
ec.set("id", "12345");
// retrieve a cookie called "id" (simply)
ec.get("id", function(value) { alert("Cookie value is " + value) });
// or use a more advanced callback function for getting our cookie
// the cookie value is the first param
// an object containing the different storage methods
// and returned cookie values is the second parameter
function getCookie(best_candidate, all_candidates)
{
alert("The retrieved cookie is: " + best_candidate + "n" +
"You can see what each storage mechanism returned " +
"by looping through the all_candidates object.");
for (var item in all_candidates)
document.write("Storage mechanism " + item +
" returned: " + all_candidates[item] + "<br>");
}
ec.get("id", getCookie);
// we look for "candidates" based off the number of "cookies" that
// come back matching since it's possible for mismatching cookies.
// the best candidate is most likely the correct one
</script>
阅读这篇文章以了解其工作原理。