يستخدم WebGL fingerprinting الـ API ثلاثي الأبعاد في متصفحك لقراءة الشركة المصنعة لـ GPU الخاص بك ونموذجه ومخرجات التصيير على مستوى برنامج التشغيل — منتجاً معرّف جهاز يظل ثابتاً عبر جميع المتصفحات على نفس الجهاز وغير متأثر تماماً بمسح الكوكيز أو تغيير الشبكة. يمكنك التحقق مما يكشفه متصفحك الآن على whatsmy.fyi.
ملخص سريع
يستغل WebGL fingerprinting الـ WebGL API — نفس الذي يُصيّر الألعاب ثلاثية الأبعاد وخرائط المتصفح — لاستخراج سلسلة الشركة المصنعة لـ GPU واسم نموذجه ومخرجات التصيير على مستوى البكسل. ينتج كل نموذج GPU نتائج مختلفة بدقة لأوامر تصيير متطابقة بسبب الاختلافات في تقريب الفاصلة العائمة وسلوك برنامج التشغيل وبنية الأجهزة. مجتمعاً مع إشارات أخرى، يمكن لبيانات WebGL التعرف بشكل فريد على 99.24% من متصفحات سطح المكتب. لا تخزين على جهازك، لا شيء للحذف، ولا يمكن لـ VPN إيقافه.
ما هو WebGL Fingerprinting؟
WebGL fingerprinting هو أسلوب تتبع للمتصفح يسيء استخدام WebGL API — واجهة JavaScript لتصيير الرسومات ثنائية وثلاثية الأبعاد المُعجّلة بالأجهزة — لقراءة خصائص GPU الخاصة بالجهاز. على خلاف تتبع الكوكيز، لا يتطلب تخزيناً وغير متأثر بوضع التصفح الخاص أو مسح بيانات متصفحك.
تحتوي التقنية على مكوّنَين متكاملَين. الأول يقرأ البيانات الوصفية الثابتة للأجهزة مباشرةً من واجهات برمجة تطبيقات المتصفح: اسم الشركة المصنعة لـ GPU والنموذج والقائمة الكاملة لامتدادات WebGL التي يدعمها برنامج التشغيل. المكوّن الثاني يُصيّر مشهداً ثلاثي الأبعاد مخفياً ويقرأ بيانات البكسل مجدداً — عملية تنتج نتائج مختلفة بدقة على كل تركيبة أجهزة وبرنامج تشغيل.
WebGL fingerprinting مرتبط ارتباطاً وثيقاً بـ canvas fingerprinting، لكنه يستهدف طبقة مختلفة — وأكثر تعريفاً — من نظامك. يلتقط canvas fingerprinting اختلافات تصيير الخطوط ثنائية الأبعاد؛ يصل WebGL fingerprinting مباشرةً إلى أجهزة GPU. معاً، هما اثنان من أعلى الإشارات إنتروبياً في مجموعة أدوات البصمة.
كيف يعمل WebGL Fingerprinting؟
تُجمَّع بصمة WebGL في ثلاث مراحل، تستغرق كل منها بضعة ملّيثوانٍ فقط وغير مرئية تماماً للمستخدم.
المرحلة الأولى — قراءة معاملات الأجهزة
يستدعي النص gl.getParameter() مع عشرات الثوابت لاستخراج قدرات الأجهزة. معظم القيم حميدة من تلقاء ذاتها — الحد الأقصى لحجم القوام (texture)، أبعاد منفذ العرض (viewport) القصوى، دقة GLSL shader المدعومة. لكن امتداد WebGL واحداً يُغيّر كل شيء.
يكشف امتداد WEBGL_debug_renderer_info عن ثابتَين مصمَّمَين لأغراض تصحيح الأخطاء: UNMASKED_VENDOR_WEBGL وUNMASKED_RENDERER_WEBGL. عند الاستعلام عنهما، يُعيدان سلسلة الشركة المصنعة لـ GPU غير المقنّعة — مثلاً "NVIDIA Corporation" — وسلسلة محرك تصيير GPU الكاملة — مثلاً "NVIDIA GeForce RTX 4080/PCIe/SSE2". هذه السلاسل وحدها يمكنها تضييق عدد الزوار إلى أقل من 100 شخص.
المرحلة الثانية — تصيير مشهد ثلاثي الأبعاد
يُنشئ النص canvas مخفي لـ WebGL ويُصيّر مشهداً معقداً: تدرجات وحسابات إضاءة وهندسة شفافة بإحداثيات قوام (texture) محددة. نظراً لأن الحسابات الحسابية للأعداد العشرية (floating-point) تتعامل معها وحدات shader لكل GPU بشكل مختلف — تُطبّق NVIDIA وAMD وIntel وApple Silicon سلوكيات تقريب مختلفة قليلاً — تختلف البكسلات الناتجة على مستوى الثنائي عبر الأجهزة، حتى لكود GLSL shader متطابق.
المرحلة الثالثة — تجزئة البكسل عبر readPixels()
يستدعي النص gl.readPixels() لاستخراج مخزن بكسل RGBA الخام من المشهد المُصيَّر ويُجزّئه — عادةً بـ MurmurHash — إلى قيمة بصمة مضغوطة. هذه التجزئة مستقرة عبر جلسات المتصفح ووضع التصفح المتخفي وإعادة التشغيل. تتغير فقط عند تحديث برنامج تشغيل GPU أو استبدال الأجهزة الفعلية.
// المرحلة الأولى — قراءة سلاسل GPU غير المقنّعة عبر امتداد التصحيح
const canvas = document.createElement('canvas');
const gl = canvas.getContext('webgl');
const ext = gl.getExtension('WEBGL_debug_renderer_info');
if (ext) {
const vendor = gl.getParameter(ext.UNMASKED_VENDOR_WEBGL);
const renderer = gl.getParameter(ext.UNMASKED_RENDERER_WEBGL);
// مثلاً: "NVIDIA Corporation"، "NVIDIA GeForce RTX 4080/PCIe/SSE2"
}
// المرحلة الثانية — جمع معاملات قدرة الأجهزة
const params = {
maxTextureSize: gl.getParameter(gl.MAX_TEXTURE_SIZE),
maxViewportDims: gl.getParameter(gl.MAX_VIEWPORT_DIMS),
supportedExts: gl.getSupportedExtensions(),
highFloatPrecision: gl.getShaderPrecisionFormat(
gl.FRAGMENT_SHADER, gl.HIGH_FLOAT
).precision,
};
// المرحلة الثالثة — تصيير مشهد واستخراج البكسل
const pixels = new Uint8Array(4 * canvas.width * canvas.height);
gl.readPixels(
0, 0, canvas.width, canvas.height,
gl.RGBA, gl.UNSIGNED_BYTE, pixels
);
// تجزئة 'pixels' → بصمة GPU مستقرةما مدى تفرّد بصمة WebGL؟
WebGL هي واحدة من أعلى الإشارات الفردية إنتروبياً في بصمة المتصفح. طبقة معاملات GPU وحدها تُنتج 10–15 بت من الإنتروبيا — كافية لتحديد طراز أجهزتك وموديلها ضمن مجموعة صغيرة. تُضيف تجزئة التصيير تمييزاً إضافياً بين الأجهزة ذات نماذج GPU متطابقة لكن إصدارات برامج تشغيل مختلفة.
| النتيجة | القيمة | المصدر |
|---|---|---|
| الإنتروبيا من سلاسل الشركة المصنعة ومحرك التصيير لـ GPU | 10–15 بت | Cao et al., NDSS 2017 |
| الإنتروبيا من مخرجات تصيير WebGL وحدها | ~5.7 بت | أبحاث Fingerprint.com |
| مستخدمو سطح المكتب المُعرَّفون بشكل فريد (إشارات مجمّعة) | 99.24% | أبحاث Fingerprint.com |
| مستخدمو الأجهزة المحمولة المُعرَّفون بشكل فريد (إشارات مجمّعة) | 94.5% | أبحاث Fingerprint.com |
| عدد الزوار المُضيَّق بسلسلة محرك تصيير GPU وحدها | أقل من 0.01% من الزوار | أبحاث Inria / KU Leuven |
| دعم متصفح WebGL 2.0 (Chrome، Edge، Safari) | 95–99% | BrowserLeaks WebGL Test |
من يستخدم WebGL Fingerprinting في العالم الواقعي؟
شبكات الإعلانات
تستخدم شركات التكنولوجيا الإعلانية WebGL fingerprinting لتتبع المستخدمين عبر المواقع للاستهداف السلوكي وتحديد الحد الأقصى للتكرار. مع حجب Safari لكوكيز الطرف الثالث افتراضياً وتوجه Chrome نحو إيقاف دعمها، أصبحت البصمة على مستوى الأجهزة بديلاً جذاباً للكوكيز لأنها لا تتطلب تخزيناً ولا تفاعلاً من المستخدم.
كشف الاحتيال والحد من عمل البوتات
تستخدم منصات الأمن بيانات WebGL كإشارة لكشف البوتات. غالباً ما تُعيد المتصفحات الآلية التي تعمل بـ Chrome Headless أو Puppeteer سلاسل محرك تصيير GPU غير متسقة مع عامل المستخدم (user-agent) المُدّعى. التناقضات بين ادعاءات أجهزة GPU والامتدادات المتاحة لـ WebGL هي مؤشرات قوية على بيئات الأتمتة أو الأجهزة الافتراضية.
التتبع عبر المتصفحات
نظراً لأن سلسلة محرك تصيير WebGL وتجزئة البكسل مشتقتان من الأجهزة الفعلية وليس من حالة المتصفح، تظلان متسقتَين عبر المتصفحات المختلفة المثبتة على نفس الجهاز. سيُنتج مستخدم يتناوب بين Chrome وFirefox وEdge للتهرب من التتبع نفس سلسلة محرك تصيير GPU في كل متصفح — مما يتيح ربطاً عبر المتصفحات لا تستطيع أنظمة الكوكيز تحقيقه.
كيف تحمي نفسك من WebGL Fingerprinting؟
تتطلب الحماية الفعالة إما حجب WebGL API أو تعشيش (randomising) مخرجاته أو توحيدها عبر مجموعة مستخدمين كبيرة. الخيارات مرتبة من الأقوى إلى الأكثر عملية للاستخدام اليومي.
- متصفح Tor (أقوى حماية): يُعطّل Tor Browser وظيفة
gl.readPixels()كلياً ويقيّد WebGL لوضع قدرات أدنى عبرwebgl.min_capability_mode، مما يجعل البصمة القائمة على التصيير مستحيلة. يُحجب امتدادWEBGL_debug_renderer_infoلذا لا يمكن قراءة سلاسل GPU غير المقنّعة. المقايضة هي التصفح الأبطأ عبر شبكة Tor. - متصفح Brave (موصى به للاستخدام اليومي): يطبق Brave تقنية Farbling على WebGL: يُحقن ضوضاء لكل جلسة ولكل موقع في مخرجات canvas وWebGL، مما يجعل تجزئة التصيير مختلفة في كل زيارة موقع. تُحجب أيضاً واجهات برمجة WebGL من السياقات من الطرف الثالث افتراضياً.
- Firefox مع
privacy.resistFingerprinting: ضبط هذا الإعداد علىtrueفيabout:configيُعطّل امتدادWEBGL_debug_renderer_infoكلياً، مُعيداً قيماً عامة بدلاً من بيانات GPU الحقيقية. هذا هو الأقرب لمستوى حماية Tor المتاح في متصفح رئيسي دون عقوبة السرعة. - Safari على أجهزة Apple: يُعيد Safari سلسلة عامة
"Apple GPU"بدلاً من نماذج الشرائح المحددة (M1، M2، M3) ويُعشّش (randomise) مخرجات canvas. هذا يخفي جيل الأجهزة عن النصوص البرمجية لكنه لا يحمي من تجزئات البكسل القائمة على التصيير. - uBlock Origin (المستخدمون المتقدمون): استخدام uBlock Origin في الوضع المتوسط أو الصعب يحجب معظم نصوص البصمة من الطرف الثالث قبل تنفيذها. لا يحمي من بصمة الطرف الأول لكنه يُلغي الغالبية العظمى من حالات الاستخدام لتتبع التكنولوجيا الإعلانية.
- ما لا يستطيع VPN فعله: يمرّر VPN حركة مرورك عبر نفق مشفر ويخفي عنوان IP الخاص بك، لكنه لا يؤثر على مخرجات WebGL. تُولَّد سلسلة الشركة المصنعة والمحرك وتجزئة البكسل داخل متصفحك وتُرسَل إلى خوادم التتبع كبيانات JavaScript. تحقق من عمل VPN على مستوى IP على whatsmy.fyi، مع العلم أنه لا يعالج البصمة.
الأسئلة الشائعة
ما الذي يكشفه WebGL fingerprinting فعلاً عن أجهزتي؟
كحد أدنى: الشركة المصنعة لـ GPU الخاص بك (NVIDIA، AMD، Intel، Apple، Qualcomm)، اسم نموذج GPU، وأحياناً إصدار برنامج التشغيل — كلها مكشوفة كنص عادي عبر امتدادWEBGL_debug_renderer_info. علاوة على ذلك، تُرمّز تجزئة التصيير سلوك الفاصلة العائمة لـ GPU، وهو خاص بجيل الأجهزة وتوليفة إصدار برنامج التشغيل. يمكن لهذه الإشارات مجتمعةً تضييقك إلى عدد أقل من 0.01% من الزوار النموذجيين للموقع.
هل يعمل WebGL fingerprinting في وضع التصفح المتخفي؟
نعم. يمنع التصفح الخاص متصفحك من حفظ الكوكيز والسجل وبيانات النموذج على القرص — لكنه لا يغير أجهزة GPU أو برنامج التشغيل. يُعيد امتداد WEBGL_debug_renderer_infoنفس السلاسل في نافذة خاصة وفي نافذة عادية. فقط المتصفحات التي تحمي بصمتها بشكل نشط — Brave وFirefox مع privacy.resistFingerprinting أو Tor Browser — تتصرف بشكل مختلف.
هل WebGL fingerprinting أقوى من canvas fingerprinting؟
يستهدفان أبعاداً تكميلية من تفرد الجهاز. يلتقط canvas fingerprinting اختلافات تصيير الخطوط ثنائية الأبعاد بين محركات النص في نظم التشغيل (ClearType وCore Text وFreeType). يكشف WebGL fingerprinting مباشرةً عن البيانات الوصفية للشركة المصنعة ونموذج GPU، ويلتقط الاختلافات في مستوى عوامة نقطة (floating-point) على مستوى shader ثلاثي الأبعاد. عادةً ما تنشر منصات البصمة التجارية كليهما في آنٍ واحد. اقرأ دليل canvas fingerprinting للمقارنة المفصّلة.
هل يمكن لـ WebGL fingerprinting تتبعي عبر متصفحات مختلفة على نفس الحاسوب؟
نعم — هذه إحدى أبرز قدراته. نظراً لأن سلاسل الشركة المصنعة والمحرك لـ GPU مشتقة من الأجهزة، فهي متطابقة سواء استخدمت Chrome أو Firefox أو Edge أو أي متصفح آخر على نفس الجهاز. أثبت بحث نُشر في NDSS 2017 تحديداً إمكانية البصمة عبر المتصفحات باستخدام ميزات WebGL على مستوى GPU، ربطاً لجلسات التصفح عبر المتصفحات دون أي كوكيز أو تخزين مشترك.
هل هناك بحث أكاديمي حول إيقاف WebGL fingerprinting؟
نعم. ورقة بحثية نُشرت في USENIX Security 2019، "Rendered Private: Making GLSL Execution Uniform to Prevent WebGL-based Browser Fingerprinting" بقلم Wu وLi وCao وWang، اقترحت UNIGL — نظام يُعيد كتابة برامج GLSL shader بحيث تكون مخرجات التصيير موحّدة عبر أجهزة GPU المختلفة مع الحفاظ على الجودة البصرية. يمنع هذا النهج تجزئة البكسل القائمة على التصيير دون حجب WebGL كلياً.
مقالات ذات صلة
- ما هي بصمة المتصفح؟ كيف تتتبعك المواقع بدون كوكيز — الدليل الشامل لجميع إشارات البصمة المجمّعة
- ما هو Canvas Fingerprinting؟ كيف تتتبعك المواقع بدون كوكيز — كيف يلتقط الـ Canvas API ثنائي الأبعاد اختلافات خطوط GPU
- ما هو Audio Fingerprinting؟ كيف يتتبعك AudioContext — كيف ينتج جهاز الصوت في جهازك معرّفاً فريداً



