Discourse Fingerprint - Plugin de Fingerprinting de Navegador

Discourse Fingerprint :paw_prints:

Discourse Fingerprint é uma ferramenta para gestores de comunidades no combate a trolls da internet. :troll: Ele funciona calculando um identificador único (uma impressão digital) para cada usuário registrado, considerando mais de 20 características do navegador, como user agent, resolução da tela, fuso horário, memória do dispositivo, etc.

Quando cada uma dessas características do navegador é considerada separadamente, elas não são suficientes para determinar se dois usuários são a mesma pessoa. Existe um número relativamente pequeno de user agents, resoluções de tela, etc. No entanto, ao levar em conta todos esses 20 fatores, há uma chance muito pequena de que dois usuários tenham a mesma chave.

:bar_chart: Hora da matemática: Supondo que existam apenas 20 características do navegador e apenas 4 valores possíveis para cada uma delas (nota: existem mais de 20 características de navegador com muito mais de 4 valores), isso significa que há 4\u003csup\u003e20\u003c/sup\u003e combinações (impressões digitais). Isso dá 1.099.511.627.776 combinações… e há apenas 7.640.175.882 pessoas na Terra. Bem, algumas características do navegador podem ser inúteis (por exemplo, o fuso horário será o mesmo para todos os usuários de um fórum de comunidade local)… mas é provável que os fóruns também não tenham 7,6 bilhões de usuários. :frowning:

Como funciona?

Quando um usuário navega em um fórum, ele é identificado digitalmente e o resultado é armazenado junto com as últimas impressões digitais (por padrão, as 10 mais recentes). Em seguida, os administradores podem usar uma interface simples para verificar as correspondências de impressões digitais mais recentes (conflitos) e verificar se um usuário está em conflito com outra pessoa.

O plugin não tem absolutamente nenhum impacto nos usuários e gera a impressão digital do usuário 3 segundos após o carregamento inicial da página.

Como é a aparência?

Vamos considerar um pequeno cenário de teste:

  • Os usuários Dan, Oliver e Jack usaram algum dispositivo (sessões anônimas e regulares).
  • Os usuários Harry, Jacob e William usaram um dispositivo diferente (também sessões anônimas e regulares).
  • Em algum momento, o usuário William fez login usando exatamente a mesma máquina e navegador que Oliver.

O painel mostrará que há dois conflitos. Um é entre Dan, Oliver, Jack e William, e o outro envolve Harry, Jacob e William. Note que a relação de conflito não é transitiva (ou seja, Dan está em conflito com William, Harry também está em conflito com William, mas Dan não está em conflito com Harry).

Uma visão detalhada de Dan nos dirá quais são suas impressões digitais, quando foram vistas pela primeira e última vez e com quem ele está em conflito por aquela assinatura.

Uma visão detalhada de William nos dará informações semelhantes, mas desta vez mostrando duas impressões digitais.

Um administrador pode optar por agir sobre isso ou clicar no botão “ignorar” para ocultar esse conflito. Note que, mesmo que você ignore um conflito, ele ainda aparecerá em “Conflitos mais recentes” até que novos conflitos surjam.

Como instalá-lo?

Siga Instalar um Plugin, usando git clone https://github.com/discourse/discourse-fingerprint.git como comando do plugin.

Basicamente, edite seu arquivo app.yml para incluir o comando especificado anteriormente.

48 curtidas

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 curtidas

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

6 curtidas

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 curtida

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 curtidas

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 curtidas

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 curtida

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

5 curtidas

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

7 curtidas

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 curtidas

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 curtida

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 curtidas

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 curtida