تاريخ النشر: 2 نيسان (أبريل) 2025
ماذا يحدث عند النقر على رابط؟ يتحول إلى اللون البنفسجي.
منذ أوائل أيام الإنترنت، كانت
المواقع الإلكترونية تعتمد على أداة اختيار :visited
CSS
لتطبيق
أنماط مخصّصة على الروابط التي نقر عليها المستخدمون من قبل. باستخدام أداة الاختيار :visited
، يمكن للمواقع الإلكترونية تحسين تجربة المستخدمين ومساعدتهم في التنقّل
على الويب. ومع ذلك، مع زيادة إمكانية تخصيص الروابط التي تتم زيارتها بمرور الزمن، زاد أيضًا عدد الهجمات المتزايدة التي اكتشفها باحثو الأمان.
يمكن أن تكشف هذه الهجمات الروابط التي زارها المستخدم وتسرِّب تفاصيل عن نشاطه في تصفّح الويب. لقد كانت مشكلة الأمان هذه تؤرق الويب لأكثر من 20 عامًا، وقد نشرت المتصفّحات إجراءات احترازية مختلفة للحد من هذه الهجمات التي ترصد السجلّ. على الرغم من أنّ هذه الإجراءات الوقائية تبطئ الهجمات، إلا أنّها لا تقضي عليها.
منذ الإصدار 136 من Chrome، أصبح Chrome أول متصفّح رئيسي يجعل هذه الهجمات
قديمة. ويتم ذلك من خلال تقسيم سجلّ الروابط في :visited
.
ما المقصود بتقسيم :visited
الروابط؟
لعرض الروابط التي زرتها سابقًا، يجب أن يتتبّع المتصفّح
الصفحات التي زرتها بمرور الوقت، ويُعرف ذلك باسم سجلّ :visited
. يمكنك
تنسيق الروابط التي تمت زيارتها بشكل مختلف عن الروابط التي لم تتم زيارتها باستخدام أداة اختيار :visited
CSS:
:visited {
color: purple;
background-color: yellow;
}
في السابق، كان سجلّ :visited
غير مقسّم. وهذا يعني أنّه لم تكن هناك
قيود على أماكن عرض سجلّ :visited
باستخدام أداة اختيار:visited
. إذا نقرت على رابط، سيظهر على أنّه :visited على كل موقع إلكتروني
يعرض هذا الرابط. كان هذا هو الخلل الأساسي في التصميم الذي سمح للهجمات بكشف معلومات عن سجلّ تصفّح المستخدم.
راجِع المثال التالي. أنت تتصفّح الموقع الإلكتروني "أ" وتنقر على رابط
للانتقال إلى الموقع الإلكتروني "ب". في هذا السيناريو، ستتم إضافة الموقع "ب" إلى سجلّ :visited
. في وقت لاحق، قد تزور الموقع الإلكتروني "شرير" الذي ينشئ رابطًا يؤدي إلى الموقع الإلكتروني "ب" أيضًا. في حال عدم التقسيم، سيعرض الموقع الإلكتروني "شرير" هذا الرابط إلى الموقع الإلكتروني "ب" على النحو التالي:
:visited
، حتى إذا لم تنقر على الرابط في الموقع الإلكتروني "شرير". بعد ذلك، يمكن أن يستخدم الموقع الإلكتروني "شرير" إحدى ثغرات الأمان لمعرفة ما إذا كان الرابط مصمّمًا على أنّه :visited
، وبالتالي معرفة أنّك زرت الموقع الإلكتروني "ب" في السابق، ما يؤدي إلى تسرُّب معلومات عن سجلّ التصفّح.
قبل التقسيم، عند النقر على رابط:
وسيظهر الرابط على أنّه :visited على كل موقع إلكتروني يعرض هذا الرابط.
تحمي ميزة "التقسيم" سجلّ التصفّح من خلال عرض الرابط على أنّه تمت زيارته فقط إذا
سبق لك النقر على هذا الرابط من هذا الموقع الإلكتروني. إذا لم يسبق لك التفاعل
مع هذا الموقع الإلكتروني، لن يتم وضع علامة :visited
على روابطه.
فكِّر في المثال السابق، ولكن مع تفعيل التقسيم. أثناء تصفّحك لمحتوى
الموقع الإلكتروني "أ"، تنقر على رابط للانتقال إلى الموقع الإلكتروني "ب"، ويتم تخزين العنوانين "الموقع الإلكتروني "أ" + الموقع الإلكتروني "ب"
في سجلّ المواقع الإلكترونية التي زرتها. بهذه الطريقة، عندما تزور الموقع الإلكتروني "الموقع الإلكتروني الشرير"، لن يظهر رابطه المؤدي إلى "الموقع الإلكتروني ب" على أنّه :visited
لأنّه لا يتطابق مع كلا الجزأين من إدخال "الموقع الإلكتروني أ + الموقع الإلكتروني ب" (السياق الذي نقرت فيه في الأصل على الرابط). وبما أنّه لا يتم عرض سجلّ التصفّح على Site Evil، لا يمكنه الاستفادة من أي ثغرات. وبالتالي، فإنّ سجلّ المتصفّح آمن.
بعد التقسيم، عند النقر على رابط:
ولا يظهر إلا على شكل :visited
في الأماكن التي نقرت فيها عليه من قبل.
بعبارة موجزة، يشير التقسيم إلى تخزين روابطك مع معلومات إضافية
عن مواضع النقر عليها. في Chrome، تكون هذه السمات هي: عنوان URL للرابط،
الموقع الإلكتروني من المستوى الأعلى،
و
مصدر الإطار. عند تفعيل ميزة
التقسيم، لن يعود سجلّ :visited
قائمة عالمية يمكن لأي
موقع إلكتروني طلب البحث فيها. بدلاً من ذلك، يتم "تقسيم" سجلّ :visited
أو فصله استنادًا إلى
السياق الذي زرت الرابط منه في المقام الأول.
ماذا عن الروابط المؤدية إلى صفحات أخرى على الموقع الإلكتروني نفسه؟
عند تصفّح الإنترنت، قد تنتهي بالنقر على العديد من الروابط التي تؤدي بدورها إلى صفحات فرعية مختلفة على الموقع الإلكتروني نفسه. على سبيل المثال، عند
البحث عن أنواع مختلفة من المعادن، قد تنتقل إلى صفحات Site.Wiki
الخاصة بمواد
"الكروم" و "النحاس الأصفر".
في حال تنفيذ التقسيم بشكل صارم، لن تظهر للمستخدمين في صفحة Site.Wiki
لمنتجات
الذهب روابط لصفحات الكروم والنحاس كما هو موضّح في
:visited
. ويرجع ذلك إلى أنّ المستخدم نقر على كلّ من هذه الصفحات من
موقع إلكتروني من المستوى الأعلى لا يتطابق مع صفحة Site.Wiki
للذهب.
لتحسين تجربة المستخدم في هذا السيناريو مع مواصلة توفير إجراءات حماية الخصوصية
والأمان في عملية التقسيم، طرحنا استثناءً ل
الروابط الذاتية. بعبارة أخرى، يمكن لموقع إلكتروني عرض صفحاته الفرعية على أنّها :visited
، حتى
إذا لم يتم النقر على هذه الروابط في هذا السياق من قبل. بما أنّ المواقع الإلكترونية تتضمّن
طُرقًا أخرى لتتبُّع ما إذا كان المستخدِم قد زار صفحاتها الفرعية، لا يتم تقديم
معلومات جديدة لهذه المواقع الإلكترونية عند استخدام الروابط الذاتية.
لا تزال عملية التقسيم توفّر الحماية من التتبّع على جميع المواقع الإلكترونية وتفرض
سياسة المصدر نفسه. من المهمّ الإشارة إلى أنّ ذلك لا ينطبق إلا على الروابط التي تؤدي إلى صفحات فرعية في الموقع الإلكتروني. إنّ الروابط التي تؤدي إلى مواقع إلكترونية تابعة لجهات خارجية أو الروابط في إطارات iframe التابعة لجهات خارجية
غير مؤهّلة لهذا الاستثناء.
بعد استبعاد "الروابط الذاتية":
حالة التنفيذ
تتوفّر هذه التحسينات على أمان :visited
وخصوصيته اعتبارًا من
الإصدار 136 من Chrome. ويعدّ Chrome أول متصفّح يطبّق هذه الحماية
للمستخدمين.
التفاعل مع الملاحظات ومشاركتها
- الاقتراح الأصلي:
- طرح الأسئلة والمشاركة في المناقشات
- أرسِل تقريرًا عن خلل في أداة تتبُّع Chromium إذا كنت تعتقد أنّ هناك مشكلة لا تعمل على النحو المتوقّع.