ما هو Touch Fingerprinting؟ كيف يكشف دعم اللمس عن جهازك
المتصفح والجهاز

ما هو Touch Fingerprinting؟ كيف يكشف دعم اللمس عن جهازك

تعرّف على كيفية استخدام maxTouchPoints وTouchEvent API لتمييز أجهزة اللمس وبناء بصمة متصفح دون كوكيز.

7 دقائق قراءة·

Touch Fingerprinting (بصمة اللمس) أسلوب تتبع في المتصفح يقرأ navigator.maxTouchPoints وواجهات برمجية لأحداث اللمس لتحديد ما إذا كنت على هاتف ذكي أو جهاز لوحي أو لابتوب يدعم اللمس أو حاسوب مكتبي تقليدي — بصمت، بدون كوكيز، وفي سطر واحد من JavaScript. يمكنك مشاهدة ما يكشفه جهازك الآن على whatsmy.fyi.

ملخص سريع

تستخدم بصمة اللمس navigator.maxTouchPoints ومُنشئ TouchEvent واستعلام CSS للوسائط pointer لتصنيف نوع جهازك. سطح المكتب بدون شاشة لمس يُعيد maxTouchPoints = 0؛ iPhone يُعيد 5؛ Surface Pro يُعيد 10. مقترنةً بأبعاد الشاشة ونسبة البكسل، تُميّز هذه الإشارة بشكل موثوق حركة المرور على الهاتف عن سطح المكتب وتُضيف إنتروبيا قابلة للقياس إلى بصمة متصفح كاملة.

ما هو Touch Fingerprinting؟

بصمة اللمس مجموعة فرعية من بصمة المتصفح تستهدف أجهزة اللمس في جهازك. يكشف كل متصفح عن مجموعة من واجهات JavaScript البرمجية التي تصف ما إذا كان الجهاز يملك شاشة لمس وإذا كان كذلك كم عدد نقاط اللمس المتزامنة التي يدعمها. صُمّمت هذه الواجهات لمساعدة المطوّرين على بناء واجهات متكيّفة — لكنها تعمل أيضاً كإشارة تصنيف نوع الجهاز لا تحتاج إلى موافقة أو تخزين أو تفاعل مستخدم.

الخاصية الأساسية المعنية هي navigator.maxTouchPoints، عدد صحيح للقراءة فقط أُدخل في مواصفة W3C Pointer Events. يُعيد الحد الأقصى لعدد نقاط الاتصال اللمسية التي يمكن للجهاز تتبعها في آنٍ واحد. صفر يعني لا شاشة لمس. خمسة أو عشرة يُشير إلى هاتف ذكي أو جهاز لوحي. اللابتوبات المزوّدة بلمس والأجهزة القابلة للتحويل 2-in-1 عادةً تُبلّغ عن 10. لأن هذه القيمة تعكس الأجهزة المادية، فهي ثابتة عبر الجلسات ومقاومة لمسح بيانات التصفح ومتطابقة في وضع التصفح الخاص.

لا تُعرّفك بصمة اللمس بشكل فريد من تلقاء نفسها — إنها إشارة تصنيف، وليست معرّفاً فريداً. قيمتها للمتتبعين تكمن في دمجها مع دقة الشاشة ونسبة بكسل الجهاز وعامل المستخدم وحالة البطارية لبناء ملف جهاز أكثر اكتمالاً.

كيف تعمل بصمة اللمس؟

يقرأ سكريبت البصمة ثلاث إشارات تكميلية لبناء صورة نوع جهازه. يمكن قراءة كل منها في أقل من ميلي ثانية بدون إذن مستخدم مطلوب.

الإشارة 1 — navigator.maxTouchPoints

هذه الإشارة الأكثر مباشرةً. وفقاً لمواصفة W3C Pointer Events، يجب أن تعكس القيمة الحدّ الأقصى للأجهزة — لا يمكن ضبطها بالبرامج أو تغييرها بمسح بيانات التصفح. جهاز به محرّك تعدد اللمس بـ 10 نقاط يُعيد دائماً 10. هذا الارتباط بالأجهزة هو ما يجعل الإشارة مفيدة للبصمة: إنها متسقة وعابرة للجلسات وغير متأثرة بأدوات الخصوصية التي تستهدف الكوكيز أو التخزين.

الإشارة 2 — فحص مُنشئ TouchEvent

تتحقق كود البصمة القديم من وجود مُنشئ TouchEvent في النطاق العالمي. على الأجهزة غير اللمسية لا يوجد هذا المُنشئ، مُنتجاً undefined. على iOS وAndroid فهو موجود. هذه الطريقة سابقة لـ Pointer Events API وأقل موثوقية الآن — متصفحات Chromium تكشف المُنشئ حتى على أجهزة سطح المكتب غير اللمسية — لكنها لا تزال مدرجة في كثير من مكتبات البصمة القديمة.

الإشارة 3 — استعلام CSS Pointer Media عبر JavaScript

ميزة CSS الإعلامية pointer، القابلة للقراءة من JavaScript عبر window.matchMedia، تُميّز بين المؤشرات الخشنة (الأصابع على شاشة لمس) والمؤشرات الدقيقة (ماوس أو قلم) ولا مؤشر على الإطلاق. على عكس maxTouchPoints، يعكس هذا الاستعلام جهاز الإدخال الأساسي بدلاً من وجود أجهزة اللمس، لذا Surface Pro المُستخدَم مع ماوس لوحة مفاتيح يُبلّغ عن fine حتى لو كان maxTouchPoints الخاص به 10. قراءة كلتا القيمتين معاً يمنح ملف إدخال أكثر اكتمالاً.

// Touch fingerprinting: reading all three signals
function getTouchFingerprint() {
  // Signal 1: maximum simultaneous touch points (hardware constant)
  const maxTouchPoints = navigator.maxTouchPoints ?? 0;

  // Signal 2: legacy TouchEvent constructor presence check
  const hasTouchEvents = 'TouchEvent' in window;

  // Signal 3: CSS pointer media query via matchMedia
  const pointerType = window.matchMedia('(pointer: coarse)').matches
    ? 'coarse'        // finger / touchscreen
    : window.matchMedia('(pointer: fine)').matches
    ? 'fine'          // mouse / stylus
    : 'none';         // no pointer device

  // Device classification based on combined signals
  const isTouch = maxTouchPoints > 0;
  const isMobile = isTouch && window.screen.width <= 768;
  const isTablet = isTouch && window.screen.width > 768 && window.screen.width <= 1366;

  return {
    maxTouchPoints,   // 0 = desktop, 5 = smartphone, 10 = tablet / 2-in-1
    hasTouchEvents,
    pointerType,
    isTouch,
    isMobile,
    isTablet,
  };
}

// Example outputs:
// MacBook Pro (no touchscreen) → { maxTouchPoints: 0, pointerType: "fine", isTouch: false }
// iPhone 15 Pro → { maxTouchPoints: 5, pointerType: "coarse", isMobile: true }
// Surface Pro 11 → { maxTouchPoints: 10, pointerType: "fine", isTablet: true }
// iPad Air → { maxTouchPoints: 5, pointerType: "coarse", isTablet: true }

قيم maxTouchPoints عبر أنواع الأجهزة

يوضح الجدول أدناه القيم التي تُعيدها الأجهزة الشائعة لـ navigator.maxTouchPoints، جانباً نتائج أحداث اللمس واستعلام المؤشر. هذه القيم تعكس ثوابت الأجهزة ولا تتغير عبر إصدارات المتصفح أو تحديثات نظام التشغيل.

نوع الجهازmaxTouchPointsاستعلام CSS pointerTouchEvent في window
حاسوب مكتبي / Mac (بدون شاشة لمس)0finefalse (Gecko) / true (Chromium)
iPhone (جميع الموديلات الحديثة)5coarsetrue
هاتف Android5 أو 10coarsetrue
iPad / جهاز Android لوحي5 أو 10coarsetrue
Microsoft Surface / لابتوب لمس10fine (عند استخدام الماوس)true (Chromium)
Chromebook (بدون لمس)0finefalse
سطح مكتب Linux (أي متصفح)0finefalse (Firefox) / true (Chrome)

التناقض في عمود TouchEvent in window مهم للخصوصية: المتصفحات القائمة على Chromium تكشف مُنشئ TouchEvent على جميع المنصات، بما فيها أجهزة سطح المكتب غير اللمسية، لتجنب كسر افتراضات توافق الويب. Firefox يكشفه فقط على أجهزة اللمس الفعلية. هذا عدم التماثل نفسه معرّف محرّك متصفح — إشارة بصمة منفصلة مشتقة من محاولة قراءة إشارة أخرى.

من يستخدم بصمة اللمس في الواقع؟

شبكات الإعلانات والتحليلات

تقرأ منصات ad-tech maxTouchPoints لتقسيم الجماهير حسب نوع الجهاز لتسعير العروض واختيار التصميم الإعلاني. مخزون الهاتف المحمول والأجهزة اللوحية يُوجَّه بمعدلات CPM مختلفة عن سطح المكتب. لأن هذه الإشارة لا تحتاج إلى كوكيز أو تفاعل مستخدم، فهي تُغذّي مباشرةً بُعد نوع الجهاز في ملف جمهور قائم على البصمة.

كشف الاحتيال والتخفيف من البوتات

تستخدم منصات الأمان مثل Fingerprint.com وDataDome إشارات اللمس كفحص اتساق. بوت يدّعي أنه متصفح هاتف محمول في user agent الخاص به بينما يُبلّغ عن maxTouchPoints = 0 تناقض يكشف الأتمتة. Headless Chrome وPuppeteer وSelenium عادةً تُعيد قيم غير لمسية حتى عندما يُزوَّر user agent لهاتف ذكي.

تطبيق الجدار المدفوع وقيود الموقع الجغرافي

بعض الناشرين يقدمون إصدارات محتوى مختلفة للمستخدمين على الهاتف مقابل سطح المكتب. مستخدم يمسح الكوكيز ويعيد التحميل قد يفقد جلسته، لكن قيمة maxTouchPoints لجهازه تبقى دون تغيير. مقترنةً بدقة الشاشة والمنطقة الزمنية، تساعد بيانات اللمس على إعادة تعريف الزوار العائدين الذين حذفوا الكوكيز.

A/B Testing ومحركات التخصيص

تستخدم منصات التجريب نوع الجهاز — المشتق جزئياً من إشارات اللمس — لتقسيم متغيّرات التجربة. تشغيل اختبار على "مستخدمي الهاتف المحمول فقط" بدون كوكيز يستلزم إشارة نوع جهاز موثوقة. maxTouchPoints يوفر قيمة مرتبطة بالأجهزة لا يمكن مسحها، مما يجعلها أكثر ثباتاً من تحليل سلسلة user agent عبر الجلسة.

هل بصمة اللمس خطر خصوصية؟

بصمة اللمس أقل خطورة مباشرةً على الخصوصية من بصمة Canvas أو بصمة الصوت لأنها تُنتج بيانات تصنيف منخفضة الإنتروبيا، وليست معرّفاً فريداً. قيمة 5 لـ maxTouchPoints مشتركة بين كل iPhone. تتحقق المخاطر عند دمج بيانات اللمس مع إشارات أخرى: دقة الشاشة ونسبة بكسل الجهاز وتزامن الأجهزة والمنطقة الزمنية ومعلومات محرّد WebGL. في البصمة المركّبة الكاملة، تساعد بيانات اللمس على تضييق مجموعة إخفاء الهوية.

كيف تحمي نفسك من بصمة اللمس

تتراوح خيارات الحماية من التخفيض السلبي إلى التزوير النشط. الدفاعات الأكثر فاعلية تستهدف سطح البصمة الكامل بدلاً من إشارات اللمس في عزل.

  • متصفح Brave (موصى به للاستخدام اليومي): تُعشوش ميزة Farbling في Brave نطاقاً من إشارات البصمة لكل جلسة ولكل موقع. بينما لا يُعشوش Brave maxTouchPoints مباشرةً حالياً، فإن تعشيش البصمة الأوسع يجعل البصمة المركّبة أقل ثباتاً وأقل فائدة للتتبع عبر المواقع.
  • Firefox مع privacy.resistFingerprinting: عند تفعيل هذا العَلَم، يُبلّغ Firefox عن maxTouchPoints = 0 ويُعطّل واجهات أحداث اللمس بغض النظر عن أجهزتك. هذا يجعل متصفحك يُبلّغ عن كونه جهاز سطح مكتب غير لمسي بشكل عالمي، مما يلغي بصمة اللمس على حساب كسر المواقع التي تعتمد على اللمس عند استخدامها على جهاز لمس فعلي.
  • متصفح Tor (أقوى حماية): يرث Tor Browser privacy.resistFingerprinting من Firefox ويُطبّع سطح البصمة الكامل، بما فيه بيانات اللمس. جميع مستخدمي Tor Browser يبدون بملفات لمس متطابقة. المقايضة هي تصفح أبطأ بشكل ملحوظ بسبب توجيه شبكة Tor.
  • استخدام جهاز بأجهزة شائعة: مجموعة إخفاء الهوية لـ maxTouchPoints تُحدَّد بعدد الأجهزة الأخرى التي تشارك قيمتك الدقيقة. إذا كنت تستخدم iPhone، فأنت تشارك قيمة مع مئات الملايين من أجهزة iPhone. الأجهزة غير المعتادة تُنتج قيماً نادرة. الأجهزة القياسية الشعبية تُقلل الإنتروبيا المتعلقة باللمس.
  • VPN لا يفيد هنا: يُوجّه VPN حركتك عبر عنوان IP مختلف لكنه لا يُعدّل استجابات واجهة برمجية للمتصفح. قيمة navigator.maxTouchPoints الخاصة بك متطابقة سواء كان VPN نشطاً أم لا. تحقق مما تكشفه بصمة متصفحك الكاملة — بما فيها معلومات شبكتك — على whatsmy.fyi.

الأسئلة الشائعة

ما الذي تُعيده navigator.maxTouchPoints على سطح المكتب؟

على حاسوب مكتبي أو لابتوب قياسي بدون شاشة لمس، تُعيد navigator.maxTouchPoints 0. هذه القيمة ثابت أجهزة — تعكس غياب محرّك تعدد اللمس في الجهاز. مسح تاريخ المتصفح أو استخدام وضع التصفح الخاص أو تبديل الشبكات لا يغيّر هذه القيمة.

هل تعمل maxTouchPoints بنفس الطريقة في جميع المتصفحات؟

الخاصية نفسها تتصرف باتساق — تُعيد عدداً صحيحاً مشتقاً من الأجهزة في جميع المتصفحات الحديثة. لكن توفر مُنشئ TouchEvent يختلف: المتصفحات القائمة على Chromium تكشفه على أجهزة سطح المكتب غير اللمسية لأسباب توافق الويب، بينما Firefox يكشفه فقط على أجهزة اللمس الفعلية. هذا الاختلاف نفسه إشارة بصمة يمكنها تعريف محرّك المتصفح بشكل مستقل عن سلسلة user agent.

هل يمكن لبصمة اللمس تعريفي بشكل فردي؟

ليس من تلقاء نفسها. maxTouchPoints إشارة تصنيفية — معظم الأجهزة تقع في إحدى مجموعة قيم صغيرة (0 أو 5 أو 10). ملايين الأجهزة تشارك كل قيمة. تصبح بصمة اللمس خطر خصوصية عند دمجها مع إشارات أخرى مثل دقة الشاشة ونسبة بكسل الجهاز و بيانات محرّد WebGL و بصمة الصوت.

هل يخفي وضع التصفح الخاص بصمة اللمس؟

لا. يمنع وضع التصفح الخاص حفظ تاريخ التصفح والكوكيز وبيانات النماذج على القرص. لا يُعدّل القيم التي تُعيدها واجهات برمجية موجهة للأجهزة. قيمة navigator.maxTouchPoints وأبعاد الشاشة ونوع المؤشر متطابقة في نافذة التصفح الخاص وفي جلسة تصفح عادية.

لماذا يُبلّغ لابتوب اللمس الخاص بي عن قيمة مختلفة عن هاتفي؟

عادةً ما تملك اللابتوبات المزوّدة بلمس والأجهزة القابلة للتحويل 2-in-1 محرّد بـ 10 نقاط، لذا تُبلّغ عن maxTouchPoints = 10. معظم الهواتف الذكية تُبلّغ عن 5، مما يعكس محرّد بـ 5 نقاط. iPads تُبلّغ أيضاً عن 5. القيمة الدقيقة تعتمد على المواصفة الخاصة بأجهزة وحدة تحكم اللمس، وليس نظام التشغيل.

كيف تختلف بصمة اللمس عن كشف user agent؟

يسهل تزوير سلاسل user agent — يمكن لأي سكريبت أو إضافة أو أداة مطوّر ضبط user agent تعسفي. navigator.maxTouchPoints يقرأ سجلاً للأجهزة لا يمكن تغييره عبر تجاوزات user agent. بوت يدّعي أنه iPhone في user agent الخاص به لكن يُعيد maxTouchPoints = 0 يمكن الكشف عنه كمزوّر بالتالي.

مقالات ذات صلة

تحقق من عنوان IP وموقعك ودرجة الخصوصية — فوراً.

صفر سجلات. صفر تتبع. صفر APIs خارجية.

ابدأ الفحص الآن →

مقالات ذات صلة

ما هو Touch Fingerprinting؟ كيف يكشف دعم اللمس عن جهازك | whatsmy.fyi