بصمة الخطاب - مكون إضافي لبصمة المتصفح

بصمة ديسكورس :paw_prints:

تأتي بصمة ديسكورس كأداة لمديري المجتمعات في معركتهم ضد المتصيدون على الإنترنت. :troll: تعمل من خلال حساب معرف فريد (بصمة) لكل مستخدم مسجل، مع الأخذ في الاعتبار أكثر من 20 سمة للمتصفح مثل وكيل المستخدم، ودقة الشاشة، ومنطقة الزمان، وذاكرة الجهاز، وما إلى ذلك.

عند النظر إلى كل من هذه السمات بشكل منفصل، لا تكفي لتحديد ما إذا كان مستخدمان هما نفس الشخص. فهناك عدد نسبيًا صغير من وكلاء المستخدم ودقّات الشاشة، إلخ. ومع ذلك، عند أخذ جميع هذه العوامل الـ 20 في الاعتبار، تكون هناك فرصة ضئيلة جدًا لأن يكون لدى مستخدمين نفس المفتاح.

:bar_chart: وقت الرياضيات: بافتراض وجود 20 سمة للمتصفح فقط و4 قيم محتملة فقط لكل منها (ملاحظة: هناك أكثر من 20 سمة للمتصفح مع أكثر بكثير من 4 قيم)، فهذا يعني أن هناك 420 من التوليفات (البصمات). أي 1,099,511,627,776 توليفة… بينما عدد سكان الأرض لا يتجاوز 7,640,175,882 نسمة. حسنًا، قد تكون بعض سمات المتصفح غير مفيدة (على سبيل المثال، ستكون منطقة الزمان نفسها لجميع مستخدمي منتدى مجتمع محلي)… ولكن على الأرجح لا تحتوي المنتديات على 7.6 مليار مستخدم أيضًا. :frowning:

كيف تعمل؟

عندما يتصفح المستخدم منتدى ما، يتم تحديد بصمته ويتم تخزين النتيجة مع آخر بضعة بصمات (بشكل افتراضي، آخر 10 بصمات). ثم يمكن للمسؤولين استخدام واجهة بسيطة للتحقق من تطابقات البصمات الأخيرة (التعارضات) والتحقق مما إذا كان المستخدم في تعارض مع شخص آخر.

لا يؤثر هذا الإضافة على الإطلاق على المستخدمين، حيث يتم تحديد بصمات المستخدم بعد 3 ثوانٍ من تحميل الصفحة لأول مرة.

كيف تبدو؟

لنفترض سيناريو اختبار صغير:

  • استخدم المستخدمون دان وأوليفر وجاك جهازًا معينًا (جلسات عادية وجلسات التصفح المتخفي).
  • استخدم المستخدمون هاري وجاكوب وويليام جهازًا مختلفًا (أيضًا جلسات عادية وجلسات التصفح المتخفي).
  • في مرحلة ما، سجل المستخدم ويليام الدخول باستخدام نفس الجهاز والمتصفح تمامًا مثل أوليفر.

ستُظهر لوحة التحكم وجود تعارضين. أحدهما بين دان وأوليفر وجاك وويليام، والآخر يتضمن هاري وجاكوب وويليام. يرجى ملاحظة أن علاقة التعارض ليست متعدية (أي أن دان في تعارض مع ويليام، وهاري أيضًا في تعارض مع ويليام، لكن دان ليس في تعارض مع هاري).

ستخبرنا العرض التفصيلي لـ دان ما هي بصماته، ومتى شوهدت لأول مرة وآخر مرة، ومع من هو في تعارض وفقًا لتلك التوقيع.

سيعطينا العرض التفصيلي لـ ويليام معلومات مماثلة، لكن هذه المرة سيظهر لنا بصمتين.

قد يختار المسؤول التصرف بناءً على ذلك أو قد ينقر على زر “تجاهل” لإخفاء هذا التعارض. يرجى ملاحظة أنه حتى إذا قمت بتجاهل تعارض، فسيظل يظهر في “أحدث التعارضات” حتى تظهر تعارضات جديدة.

كيف أقوم بتثبيته؟

اتبع تثبيت إضافة، باستخدام الأمر git clone https://github.com/discourse/discourse-fingerprint.git كأمر للإضافة.

بشكل أساسي، قم بتحرير ملف app.yml الخاص بك لتشمل الأمر المحدد سابقًا.

48 إعجابًا

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 إعجابات

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

6 إعجابات

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)

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 إعجابات

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 إعجابات

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)

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

5 إعجابات

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

7 إعجابات

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 إعجابات

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)

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 إعجابات

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)