جعل ملف :visited أكثر خصوصية

Kyra Seevers
Kyra Seevers

تاريخ النشر: 2 نيسان (أبريل) 2025

ماذا يحدث عند النقر على رابط؟ يتحول إلى اللون البنفسجي.

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

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

منذ الإصدار 136 من Chrome، أصبح Chrome أول متصفّح رئيسي يجعل هذه الهجمات قديمة. ويتم ذلك من خلال تقسيم سجلّ الروابط في :visited.

لعرض الروابط التي زرتها سابقًا، يجب أن يتتبّع المتصفّح الصفحات التي زرتها بمرور الوقت، ويُعرف ذلك باسم سجلّ :visited. يمكنك تنسيق الروابط التي تمت زيارتها بشكل مختلف عن الروابط التي لم تتم زيارتها باستخدام أداة اختيار :visited CSS:

:visited {
  color: purple;
  background-color: yellow;
  }

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

راجِع المثال التالي. أنت تتصفّح الموقع الإلكتروني "أ" وتنقر على رابط للانتقال إلى الموقع الإلكتروني "ب". في هذا السيناريو، ستتم إضافة الموقع "ب" إلى سجلّ :visited. في وقت لاحق، قد تزور الموقع الإلكتروني "شرير" الذي ينشئ رابطًا يؤدي إلى الموقع الإلكتروني "ب" أيضًا. في حال عدم التقسيم، سيعرض الموقع الإلكتروني "شرير" هذا الرابط إلى الموقع الإلكتروني "ب" على النحو التالي: :visited، حتى إذا لم تنقر على الرابط في الموقع الإلكتروني "شرير". بعد ذلك، يمكن أن يستخدم الموقع الإلكتروني "شرير" إحدى ثغرات الأمان لمعرفة ما إذا كان الرابط مصمّمًا على أنّه :visited، وبالتالي معرفة أنّك زرت الموقع الإلكتروني "ب" في السابق، ما يؤدي إلى تسرُّب معلومات عن سجلّ التصفّح.

قبل التقسيم، عند النقر على رابط:

يعرض المستخدِم على الصفحة site-a.com التي تعرض رابطًا إلى site-b.com.

وسيظهر الرابط على أنّه :visited على كل موقع إلكتروني يعرض هذا الرابط.

تعرِض هذه الحالة الموقع الإلكتروني site-a.com نفسه إلى جانب site-evil.com، وتعرض كلتا الصفحتَين الرابط نفسه إلى site-b.com ويتم وضع علامة عليه بأنّه تمت زيارته.

تحمي ميزة "التقسيم" سجلّ التصفّح من خلال عرض الرابط على أنّه تمت زيارته فقط إذا سبق لك النقر على هذا الرابط من هذا الموقع الإلكتروني. إذا لم يسبق لك التفاعل مع هذا الموقع الإلكتروني، لن يتم وضع علامة :visited على روابطه.

فكِّر في المثال السابق، ولكن مع تفعيل التقسيم. أثناء تصفّحك لمحتوى الموقع الإلكتروني "أ"، تنقر على رابط للانتقال إلى الموقع الإلكتروني "ب"، ويتم تخزين العنوانين "الموقع الإلكتروني "أ" + الموقع الإلكتروني "ب" في سجلّ المواقع الإلكترونية التي زرتها. بهذه الطريقة، عندما تزور الموقع الإلكتروني "الموقع الإلكتروني الشرير"، لن يظهر رابطه المؤدي إلى "الموقع الإلكتروني ب" على أنّه :visited لأنّه لا يتطابق مع كلا الجزأين من إدخال "الموقع الإلكتروني أ + الموقع الإلكتروني ب" (السياق الذي نقرت فيه في الأصل على الرابط). وبما أنّه لا يتم عرض سجلّ التصفّح على Site Evil، لا يمكنه الاستفادة من أي ثغرات. وبالتالي، فإنّ سجلّ المتصفّح آمن.

بعد التقسيم، عند النقر على رابط:

يعرض المستخدِم على الصفحة site-a.com التي تعرض رابطًا إلى site-b.com.

ولا يظهر إلا على شكل :visited في الأماكن التي نقرت فيها عليه من قبل.

تعرِض الصفحتان site-a.com وsite-evil.com الرابط نفسه المؤدي إلى site-b.com، ولكن تم وضع علامة "مُزور" على الرابط في site-a.com فقط.

بعبارة موجزة، يشير التقسيم إلى تخزين روابطك مع معلومات إضافية عن مواضع النقر عليها. في Chrome، تكون هذه السمات هي: عنوان URL للرابط، الموقع الإلكتروني من المستوى الأعلى، و مصدر الإطار. عند تفعيل ميزة التقسيم، لن يعود سجلّ :visited قائمة عالمية يمكن لأي موقع إلكتروني طلب البحث فيها. بدلاً من ذلك، يتم "تقسيم" سجلّ :visited أو فصله استنادًا إلى السياق الذي زرت الرابط منه في المقام الأول.

تعرِض هذه السمة تدفق المعلومات من خلال عنوان URL للرابط والموقع الإلكتروني من المستوى الأعلى ومصدر الإطار.

عند تصفّح الإنترنت، قد تنتهي بالنقر على العديد من الروابط التي تؤدي بدورها إلى صفحات فرعية مختلفة على الموقع الإلكتروني نفسه. على سبيل المثال، عند البحث عن أنواع مختلفة من المعادن، قد تنتقل إلى صفحات Site.Wiki الخاصة بمواد "الكروم" و "النحاس الأصفر".

في حال تنفيذ التقسيم بشكل صارم، لن تظهر للمستخدمين في صفحة Site.Wiki لمنتجات الذهب روابط لصفحات الكروم والنحاس كما هو موضّح في :visited. ويرجع ذلك إلى أنّ المستخدم نقر على كلّ من هذه الصفحات من موقع إلكتروني من المستوى الأعلى لا يتطابق مع صفحة Site.Wiki للذهب.

على الرغم من أنّ المستخدِم قد زار مجموعة من الروابط على site.wiki من metals.com، لن يتمّ وضع تنسيق "زارها" عليها لأنّ النقرة كانت من metals.com.

لتحسين تجربة المستخدم في هذا السيناريو مع مواصلة توفير إجراءات حماية الخصوصية والأمان في عملية التقسيم، طرحنا استثناءً ل الروابط الذاتية. بعبارة أخرى، يمكن لموقع إلكتروني عرض صفحاته الفرعية على أنّها :visited، حتى إذا لم يتم النقر على هذه الروابط في هذا السياق من قبل. بما أنّ المواقع الإلكترونية تتضمّن طُرقًا أخرى لتتبُّع ما إذا كان المستخدِم قد زار صفحاتها الفرعية، لا يتم تقديم معلومات جديدة لهذه المواقع الإلكترونية عند استخدام الروابط الذاتية. لا تزال عملية التقسيم توفّر الحماية من التتبّع على جميع المواقع الإلكترونية وتفرض سياسة المصدر نفسه. من المهمّ الإشارة إلى أنّ ذلك لا ينطبق إلا على الروابط التي تؤدي إلى صفحات فرعية في الموقع الإلكتروني. إنّ الروابط التي تؤدي إلى مواقع إلكترونية تابعة لجهات خارجية أو الروابط في إطارات iframe التابعة لجهات خارجية غير مؤهّلة لهذا الاستثناء.

بعد استبعاد "الروابط الذاتية":

يتم الآن وضع علامة "مُزور" على الروابط الذاتية عندما تكون صفحات فرعية للموقع الإلكتروني نفسه.

حالة التنفيذ

تتوفّر هذه التحسينات على أمان :visited وخصوصيته اعتبارًا من الإصدار 136 من Chrome. ويعدّ Chrome أول متصفّح يطبّق هذه الحماية للمستخدمين.

التفاعل مع الملاحظات ومشاركتها