# Discourse 指纹 - 浏览器指纹识别插件

**URL:** <https://meta.discourse.org/t/discourse-fingerprint-browser-fingerprinting-plugin/114890>\
**Category:** Plugin\
**Tags:** experimental\
**Created:** [2019年五月7日 09:45 UTC](https://meta.discourse.org/t/discourse-fingerprint-browser-fingerprinting-plugin/114890 "2019-05-07T09:45:03Z")\
**Posts on this page:** 1\
**Showing post:** 1

<div class="post-metadata">

**Author:** ![dan](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/dan/32/101549_2.png) [@dan](https://meta.discourse.org/u/dan)\
**Post date:** [2019年五月7日 09:45 UTC](https://meta.discourse.org/t/discourse-fingerprint-browser-fingerprinting-plugin/114890/1 "2019-05-07T09:45:03Z")

</div>

# [Discourse 指纹识别](https://github.com/udan11/discourse-fingerprint) 🐾

**Discourse 指纹识别** 是社区管理者对抗网络喷子的利器。:troll: 它通过计算每个注册用户的唯一标识符（即“指纹”）来工作，该标识符综合考虑了 20 多种浏览器特征，例如用户代理、屏幕分辨率、时区、设备内存等。

当单独考虑这些浏览器特征中的每一项时，它们不足以判断两个用户是否为同一人。用户代理、屏幕分辨率等的数量相对有限。然而，当综合考虑这 20 个因素时，两个用户拥有相同密钥的概率极低。

> [@](#):
>
> ⚠ 由于手机配置的多样性较低，以及苹果和其他浏览器厂商的积极努力，此方法无法保证高准确率。

📊 **数学时间：** 假设只有 20 种浏览器特征，且每种特征只有 4 种可能的取值（注意：实际上有超过 20 种浏览器特征，且每种特征的取值远多于 4 种），这意味着共有 4\u003csup\u003e20\u003c/sup\u003e 种组合（指纹）。即 1,099,511,627,776 种组合……而地球上只有 7,640,175,882 人。好吧，有些浏览器特征可能毫无用处（例如，本地社区论坛的所有用户时区可能相同）……但大多数论坛也不会有 76 亿用户。☹

## 它是如何工作的？

当用户在论坛上浏览时，系统会为其生成指纹，并将结果与最近生成的几个指纹一起存储（默认情况下为最近 10 个指纹）。随后，管理员可以使用一个简单的界面来检查最新的指纹匹配（冲突），并查看某个用户是否与他人存在冲突。

该插件对用户完全没有影响，它会在页面首次加载 3 秒后生成用户指纹。

## 它长什么样？

让我们考虑一个简单的测试场景：

- 用户 Dan、Oliver 和 Jack 使用了某种设备（包括无痕模式和常规会话）。
- 用户 Harry、Jacob 和 William 使用了另一种设备（同样包括无痕模式和常规会话）。
- 在某时刻，用户 William 使用与 Oliver 完全相同的机器和浏览器登录。

仪表板将显示存在两个冲突。一个冲突涉及 Dan、Oliver、Jack 和 William，另一个冲突涉及 Harry、Jacob 和 William。请注意，冲突关系不具备传递性（即 Dan 与 William 存在冲突，Harry 也与 William 存在冲突，但 Dan 与 Harry 之间不存在冲突）。

 ![localhost_3000_admin_plugins_fingerprint](https://global.discourse-cdn.com/meta/original/3X/b/5/b5d4497767b928b664af8df54659232ccf8abdf6.png)

查看 Dan 的详细信息可以告诉我们他的指纹是什么，这些指纹首次和最后出现的时间，以及根据该签名他与谁存在冲突。

 ![localhost_3000_admin_plugins_fingerprint%20(1)](https://global.discourse-cdn.com/meta/original/3X/5/3/532b873c63dc7b73a3d48092e6ba2646ba0e400b.png)

查看 William 的详细信息会提供类似的信息，但这次会显示两个指纹。

 ![localhost_3000_admin_plugins_fingerprint%20(2)](https://global.discourse-cdn.com/meta/original/3X/e/a/ead2a33bca1bcef7950448fc0547b2643342dd75.png)

管理员可以选择对此采取行动，或者点击“忽略”按钮来隐藏此冲突。请注意，即使您忽略了某个冲突，它仍会显示在“最新冲突”列表中，直到出现新的冲突。

## 我该如何安装它？

请按照 [安装插件](https://meta.discourse.org/t/install-plugins-in-discourse/19157) 的说明操作，使用 `git clone https://github.com/discourse/discourse-fingerprint.git` 作为插件命令。

基本上，您需要编辑 `app.yml` 文件以包含上述指定的命令。

---

_[View the full topic](https://meta.discourse.org/t/discourse-fingerprint-browser-fingerprinting-plugin/114890)._
