Fingerprint Discourse - Plugin di Browser Fingerprinting

Discourse Fingerprint :paw_prints:

Discourse Fingerprint è uno strumento a disposizione dei gestori di comunità per combattere i troll di internet. :troll: Funziona calcolando un identificativo univoco (un’impronta digitale) per ogni utente registrato, tenendo conto di oltre 20 caratteristiche del browser, come user agent, risoluzione dello schermo, fuso orario, memoria del dispositivo, ecc.

Quando ciascuna di queste caratteristiche del browser viene considerata singolarmente, non è sufficiente per determinare se due utenti sono la stessa persona. Esiste un numero relativamente limitato di user agent, risoluzioni dello schermo, ecc. Tuttavia, quando si considerano tutti questi 20 fattori insieme, la probabilità che due utenti abbiano la stessa chiave è estremamente bassa.

:bar_chart: Tempo di matematica: Supponiamo che esistano solo 20 caratteristiche del browser e solo 4 valori possibili per ciascuna di esse (nota: esistono più di 20 caratteristiche del browser con molti più di 4 valori). Ciò significa che ci sono 420 combinazioni (impronte digitali). Sono 1.099.511.627.776 combinazioni… e sulla Terra ci sono solo 7.640.175.882 persone. Beh, alcune caratteristiche del browser potrebbero essere inutili (ad esempio, il fuso orario sarà lo stesso per tutti gli utenti di un forum comunitario locale)… ma è probabile che i forum non abbiano nemmeno 7,6 miliardi di utenti. :frowning:

Come funziona?

Quando un utente naviga su un forum, viene generata la sua impronta digitale e il risultato viene archiviato insieme alle ultime poche impronte (di default, le ultime 10). Gli amministratori possono quindi utilizzare un’interfaccia semplice per verificare le corrispondenze delle ultime impronte digitali (conflitti) e controllare se un utente è in conflitto con qualcun altro.

Il plugin non ha assolutamente alcun impatto sugli utenti e genera l’impronta digitale dell’utente 3 secondi dopo il primo caricamento della pagina.

Come appare?

Consideriamo un piccolo scenario di test:

  • Gli utenti Dan, Oliver e Jack hanno utilizzato un dispositivo (sessioni in incognito e regolari).
  • Gli utenti Harry, Jacob e William hanno utilizzato un dispositivo diverso (anche in incognito e sessioni regolari).
  • In un certo momento, l’utente William si è connesso utilizzando esattamente la stessa macchina e lo stesso browser di Oliver.

La dashboard mostrerà che ci sono due conflitti. Uno è tra Dan, Oliver, Jack e William, mentre l’altro coinvolge Harry, Jacob e William. Si noti che la relazione di conflitto non è transitiva (cioè, Dan è in conflitto con William, Harry è anch’esso in conflitto con William, ma Dan non è in conflitto con Harry).

Una visualizzazione dettagliata di Dan ci dirà quali sono le sue impronte digitali, quando sono state viste per la prima volta e l’ultima volta, e con chi è in conflitto per quella firma.

Una visualizzazione dettagliata di William ci fornirĂ  informazioni simili, ma questa volta mostrerĂ  due impronte digitali.

Un amministratore può scegliere di agire in base a ciò o può fare clic sul pulsante “ignora” per nascondere questo conflitto. Si noti che anche se si ignora un conflitto, questo continuerà a essere visualizzato in “Ultimi conflitti” fino a quando non emergeranno nuovi conflitti.

Come lo installo?

Segui Installa un plugin, utilizzando git clone https://github.com/discourse/discourse-fingerprint.git come comando per il plugin.

In sostanza, modifica il tuo file app.yml per includere il comando specificato prima.

48 Mi Piace

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 Mi Piace

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

6 Mi Piace

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 Mi Piace

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 Mi Piace

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 Mi Piace

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 Mi Piace

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

5 Mi Piace

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

7 Mi Piace

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 Mi Piace

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 Mi Piace

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 Mi Piace

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 Mi Piace