Discourse Fingerprint - Browser Fingerprinting Plugin

Discourse Fingerprint :paw_prints:

Discourse Fingerprint ist ein Werkzeug für Community-Manager im Kampf gegen Internet-Trolle. :troll: Es funktioniert, indem es eine eindeutige Kennung (einen „Fingerabdruck") für jeden registrierten Benutzer berechnet, indem es über 20 Browsermerkmale berücksichtigt, wie z. B. User-Agent, Bildschirmauflösung, Zeitzone, Gerätespeicher usw.

Wenn diese Browsermerkmale einzeln betrachtet werden, reichen sie nicht aus, um festzustellen, ob zwei Benutzer identisch sind. Es gibt eine relativ kleine Anzahl von User-Agents, Bildschirmauflösungen usw. Berücksichtigt man jedoch alle diese 20 Faktoren zusammen, ist die Wahrscheinlichkeit sehr gering, dass zwei Benutzer denselben Schlüssel haben.

:bar_chart: Mathe-Zeit: Angenommen, es gäbe nur 20 Browsermerkmale und für jedes davon nur 4 mögliche Werte (Hinweis: Es gibt mehr als 20 Browsermerkmale mit weit mehr als 4 Werten), so bedeutet das, dass es 4\u003csup\u003e20\u003c/sup\u003e Kombinationen (Fingerabdrücke) gibt. Das sind 1.099.511.627.776 Kombinationen … und auf der Erde gibt es nur 7.640.175.882 Menschen. Nun ja, einige Browsermerkmale mögen nutzlos sein (z. B. ist die Zeitzone für alle Benutzer eines lokalen Community-Forums gleich) … aber die meisten Foren haben ohnehin keine 7,6 Milliarden Benutzer. :frowning:

Wie funktioniert es?

Wenn ein Benutzer auf einem Forum navigiert, wird ein Fingerabdruck erstellt und das Ergebnis zusammen mit den letzten wenigen Fingerabdrücken gespeichert (standardmäßig die 10 neuesten). Anschließend können Administratoren über eine einfache Schnittstelle die neuesten Übereinstimmungen (Konflikte) prüfen und feststellen, ob ein Benutzer mit jemand anderem in Konflikt steht.

Das Plugin hat absolut keine Auswirkungen auf die Benutzer und erstellt den Fingerabdruck des Benutzers 3 Sekunden nach dem ersten Laden einer Seite.

Wie sieht es aus?

Betrachten wir ein kleines Testszenario:

  • Die Benutzer Dan, Oliver und Jack haben ein Gerät verwendet (sowohl im Inkognito-Modus als auch in regulären Sitzungen).
  • Die Benutzer Harry, Jacob und William haben ein anderes Gerät verwendet (ebenfalls im Inkognito-Modus und in regulären Sitzungen).
  • Irgendwann hat sich der Benutzer William genau mit derselben Maschine und demselben Browser wie Oliver angemeldet.

Das Dashboard zeigt zwei Konflikte an. Der eine besteht zwischen Dan, Oliver, Jack und William, der andere zwischen Harry, Jacob und William. Beachten Sie bitte, dass die Konfliktbeziehung nicht transitiv ist (d. h. Dan steht in Konflikt mit William, Harry steht ebenfalls in Konflikt mit William, aber Dan steht nicht in Konflikt mit Harry).

Eine detaillierte Ansicht von Dan zeigt uns, welche Fingerabdrücke er hat, wann sie erstmals und zuletzt gesehen wurden und mit wem er aufgrund dieser Signatur in Konflikt steht.

Eine detaillierte Ansicht von William liefert ähnliche Informationen, zeigt diesmal jedoch zwei Fingerabdrücke.

Ein Administrator kann entscheiden, darauf zu reagieren, oder auf die Schaltfläche „Ignorieren" klicken, um diesen Konflikt auszublenden. Beachten Sie bitte, dass ein ignorbierter Konflikt weiterhin in der Liste „Neueste Konflikte" angezeigt wird, bis neue Konflikte auftreten.

Wie installiere ich es?

Befolgen Sie Install a Plugin und verwenden Sie git clone https://github.com/discourse/discourse-fingerprint.git als Plugin-Befehl.

Grundsätzlich bearbeiten Sie Ihre app.yml-Datei, um den angegebenen Befehl hinzuzufügen.

48 „Gefällt mir“

Thanks for the plugin!

Don’t you mean:

i.e. Dan is in conflict with William, Harry is also in conflict with William, but Dan is not in conflict with Harry

5 „Gefällt mir“

That is correct. Thank you, I have fixed the post.

6 „Gefällt mir“

Is there a case study for this showing how well it has worked in the real world?

Thanks for the plugin!
This is a wonderful thing. It would be great to see him on: transifex

We are very interested in this, but should we be worried about the GDPR? Based on the plugin description it doesn’t seem to collect anything that GAnalytics already does.

How is the data stored? Is it automatically purged at some point of time or can it be purged manually?

1 „Gefällt mir“

Related/Unrelated note: Some browsers are actively working on avoiding fingerprinting. For example Firefox will soon ship with the ability to block this and will be blocked by default soon too.

7 „Gefällt mir“

Unfortunately I am not aware of any big communities that run this plugin. However, in the real world it seems to work pretty well. See https://panopticlick.eff.org/

It depends on how you see it. Every piece of information that is stored cannot be tied to a single individual, which is GDPR compliant. Combining them, you might be able to track individuals.

The plugin uses PluginStore to store at most max_fingerprints fingerprints (default value: 10), purging the oldest to make room for new ones.

I am not sure how their new protection works. In the past, browser extensions were relying on filenames or hashes to do it. Those methods are fragile and minor changes in the fingerprinting script can make them go undetectable.

8 „Gefällt mir“

Big is relative, but I am going to try this in production (tappara.co) when we have our next service break. Could be as soon as next week or one after that.

So it stores 10 most recent prints. Is there a way to purge the prints manually? Are they purged if the user is deleted?

1 „Gefällt mir“

I had high hopes from this plugin but unfortunately ios browsers mess up the whole plugin.

5 „Gefällt mir“

The latest Firefox version already have this protection, opt-in for now. You can test it from Preferences - Privacy - Content blocking.

7 „Gefällt mir“

There is no way from the UI, but technically, you could do it from the Rails console. Deleting the user does not purge old Fingerprints, but that is a bug I will have to fix. :slight_smile:

user = User.find_by_username("dan")
DiscourseFingerprint::Fingerprint.get_fingerprints(user.id).each do |fp|
  DiscourseFingerprint::Fingerprint.remove(user.id, fp)
end

Yes, I believe so. I remember a community had the same problem with mobile devices, especially iPhones due to their build similarity.

I will try and have a look. The news I read said they were using Disconnect’s list which could have been tricked with some little effort.

5 „Gefällt mir“

Our trial in production is now live.

Should we expect a performance penalty due to this? Our traffic has extreme spikes, based on real time events. Summer time is off-season, so things will be quiet, but during the hockey season we are likely to meet the limits of our server.

One additional idea for fingerprinting the user – what about tagging the users with a unique cookie? That would provide additional information that Harry’s browser has Dan’s cookie? This would obviously happen on shared devices, but might potentially expose trolls that lack technical expertise.

Many thanks for the development efforts and we are most interested in seeing the results.

I would really like a feature to ban a fingerprint.

Missing translation

1 „Gefällt mir“

How do I delete this plugin? Did a rebuild after removing the line from my app.yml but the plugin is still there.

Edit: no one can help deleting this?

How to ban a fingerprint?
I really need this feature.

It’s now enabled by default.

5 „Gefällt mir“

Great plugin idea.

It’s missing a couple of translations
[en_US.dates.medium.x_years]
[en_US.admin.flags.ignore_flag]

And I can’t click on the ignore flag - important because as the administrator of the site, I need an ‘alternative ego’ to post as a regular user, not as the admin.

Where do I find finger print matcher?

I see it in plugins. But not the Matcher.

(SOLVED)
Forgot to refresh page. My Bad.

1 „Gefällt mir“