Discourse Fingerprint comes as a tool to community managers in their combat with internet trolls. It works by computing a unique identifier (a fingerprint) of each registered user, by taking into consideration over 20 browser characteristics such as user agent, screen resolution, timezone, device memory, etc.
When each of these browser characteristics are considered separately, they are not enough to assess whether two users are the same. There is a relatively small number of user agents, screen resolutions, etc. However when you take into all of these 20 factors, there is a very small chance that two users will have same key.
Math time: Supposing there are only 20 browser characteristics and only 4 possible values for each of them (note: there are more than 20 browsers characteristics with way more than 4 value), it means that there are 420 combinations (fingerprints). That is 1,099,511,627,776 combinations… and there are only 7,640,175,882 people on earth. Oh well, some browser characteristics may be useless (e.g. timezone will be the same for all users of a local community forum)… but most likely forums do not have 7.6 billion users either.
How does it work?
When a user navigates on a forum, he or she is fingerprinted and the result is stored along with the latest few fingerprints (by default, the 10 latest fingerprints). Then administrators can use a simple interface to check for the latest fingerprint matches (conflicts) and to check whether a user is in conflict with someone else.
The plugin has absolutely no impact on users and it fingerprints the user 3 seconds after a page has first loaded.
How does it look?
Let’s consider a small test scenario:
- Users Dan, Oliver and Jack have been using some device (incognito and regular sessions).
- Users Harry, Jacob and William have been using a different device (also incognito and regular sessions).
- At some point user William logged in using exactly the same machine and browser as Oliver.
The dashboard will show that there are two conflicts. One is between Dan, Oliver, Jack and William and the other one involves Harry, Jacob and William. Please note that the conflict relationship is not transitive (i.e. Dan is in conflict with William, Harry is also in conflict with William, but Dan is not in conflict with Harry).
A detailed view of Dan will tell us what his fingerprints are, when they were first and last seen and who he is in conflict with per that signature.
A detailed view of William will give us similar information, but this time showing us two fingerprints.
An administrator may choose to act on this or may click the “ignore” button to hide this conflict. Please note that even if you ignore a conflict, it will still show up in the “Latest conflicts” until new conflicts come up.
How do I install it?
Follow Install a Plugin, using
git clone https://github.com/discourse/discourse-fingerprint.git as the plugin command.
Basically, edit your
app.yml file to include the command specified before.