ساخت :بازدید خصوصی تر

کایرا سیورز
Kyra Seevers

تاریخ انتشار: 2 آوریل 2025

وقتی روی یک لینک کلیک می کنید چه اتفاقی می افتد؟ بنفش می شود!

از روزهای اولیه اینترنت، سایت‌ها برای اعمال سبک‌های سفارشی بر روی لینک‌هایی که کاربران قبلاً روی آنها کلیک کرده‌اند، به انتخابگر CSS :visited تکیه کرده‌اند. با استفاده از انتخابگر :visited ، سایت ها می توانند تجربه کاربری خود را بهبود بخشند و به کاربران خود در جهت یابی وب کمک کنند. با این حال، همانطور که قابلیت سفارشی سازی پیوندهای بازدید شده در طول زمان افزایش یافته است، تعداد حملات کشف شده توسط محققان امنیتی نیز افزایش یافته است.

این حملات می توانند لینک هایی را که کاربر بازدید کرده است نشان دهند و جزئیات مربوط به فعالیت وبگردی وی را فاش کنند. این مشکل امنیتی بیش از 20 سال است که وب را درگیر کرده است و مرورگرها برای کاهش این حملات تشخیص تاریخ، از توقف های مختلفی استفاده کرده اند. در حالی که حملات با این کاهش سرعت کاهش می یابند، از بین نمی روند.

از Chrome 136، کروم اولین مرورگر بزرگی است که این حملات را منسوخ می کند. این کار با پارتیشن بندی :visited link history انجام می شود.

برای نمایش پیوندهایی که قبلاً بازدید کرده‌اید، مرورگر باید صفحاتی را که در طول زمان بازدید کرده‌اید پیگیری کند - به این تاریخچه :visited شما می‌گویند. با استفاده از انتخابگر CSS :visited می‌توانید به پیوندهای بازدید شده متفاوت از پیوندهای بازدید نشده استایل دهید.

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

از لحاظ تاریخی، :visited history unpartitioned بود. این بدان معناست که هیچ محدودیتی در مورد مکان نمایش تاریخ :visited با استفاده از انتخابگر :visited وجود ندارد. اگر روی یک پیوند کلیک کنید، در هر سایتی که آن پیوند را نمایش می دهد به صورت :visited نشان داده می شود. این نقص اصلی طراحی بود که حملات را قادر می ساخت اطلاعات مربوط به تاریخچه مرور کاربر را آشکار کنند.

مثال زیر را در نظر بگیرید. شما در حال مرور سایت A هستید و برای رفتن به سایت B روی پیوندی کلیک کنید. در این سناریو، سایت B به تاریخچه :visited شما اضافه می شود. بعداً، ممکن است از Site Evil دیدن کنید، که پیوندی به سایت B نیز ایجاد می کند. بدون پارتیشن بندی، Site Evil پیوند به Site B را به صورت :visited نمایش می دهد - حتی اگر روی پیوند در Site Evil کلیک نکرده باشید. سپس، Site Evil می‌تواند از یک سوء استفاده امنیتی استفاده کند تا بفهمد که آیا سبک پیوند به صورت :visited است یا نه، بنابراین یاد می‌گیرد که در گذشته از سایت B بازدید کرده‌اید — اطلاعاتی در مورد سابقه مرور شما فاش می‌شود.

قبل از پارتیشن بندی، وقتی روی یک پیوند کلیک کردید:

کاربر را در صفحه site-a.com نشان می دهد که پیوندی به site-b.com نمایش می دهد.

در هر سایتی که آن پیوند را نمایش می دهد به صورت :visited نشان داده می شود!

همان site-a.com را در کنار site-evil.com نشان می‌دهد که هر دو صفحه پیوند یکسانی به site-b.com نشان می‌دهند و به صورت بازدید شده استایل داده می‌شود.

پارتیشن بندی از تاریخچه مرور شما محافظت می کند تنها با نشان دادن یک پیوند به عنوان بازدید شده در صورتی که قبلاً روی آن پیوند از این سایت کلیک کرده باشید. اگر قبلاً با این سایت تعاملی نداشته‌اید، پیوندهای آن به‌صورت :visited استایل داده نمی‌شوند.

مثال قبل را در نظر بگیرید، اما با پارتیشن بندی فعال است. شما در حال مرور سایت A هستید و برای رفتن به سایت B روی یک پیوند کلیک کنید، ترکیب "سایت A + سایت B" در تاریخچه بازدید شده شما ذخیره می شود. به این ترتیب، وقتی از Site Evil بازدید می‌کنید، پیوند آن به Site B به‌عنوان :visited نشان داده نمی‌شود زیرا با هر دو بخش ورودی "سایت A + سایت B" ما مطابقت ندارد (زمینه‌ای که در ابتدا روی پیوند کلیک کرده‌اید). از آنجایی که هیچ سابقه مروری در Site Evil نمایش داده نمی شود، نمی تواند از هیچ سوء استفاده ای استفاده کند. بنابراین، تاریخچه مرورگر شما امن است!

پس از پارتیشن بندی، وقتی روی یک پیوند کلیک می کنید:

کاربر را در صفحه site-a.com نشان می دهد که پیوندی به site-b.com نمایش می دهد.

فقط به صورت :visited در جایی که قبلا روی آن کلیک کرده اید نمایش داده می شود!

همان site-a.com را در کنار site-evil.com نشان می دهد که هر دو صفحه پیوند یکسانی به site-b.com نشان می دهند و فقط لینک سایت-a.com به صورت بازدید شده استایل بندی می شود.

به طور خلاصه، پارتیشن بندی به ذخیره پیوندهای شما با اطلاعات اضافی درباره محل کلیک روی آنها اشاره دارد. در Chrome، این عبارت است: URL پیوند، سایت سطح بالا و مبدا فریم . با فعال بودن پارتیشن بندی، تاریخچه :visited شما دیگر یک لیست جهانی نیست که هر سایتی بتواند آن را جستجو کند. درعوض، تاریخچه :visited شما با زمینه‌ای که در ابتدا از آن پیوند بازدید کرده‌اید، «پارتیشن بندی» یا جدا شده است.

جریان اطلاعات را از طریق URL پیوند، سایت سطح بالا و مبدا فریم نشان می دهد.

هنگامی که در حال مرور اینترنت هستید، ممکن است در نهایت بر روی بسیاری از پیوندها کلیک کنید که همگی به صفحات فرعی مختلف در همان سایت اشاره می کنند. برای مثال، هنگام تحقیق در مورد انواع فلزات، ممکن است از صفحات Site.Wiki برای "کروم" و "برنج" دیدن کنید.

تحت اجرای سفت و سخت پارتیشن بندی، کاربران در صفحه Site.Wiki برای طلا، پیوندهای صفحات کروم و برنج را به صورت :visited نمایش داده نمی شوند. این به این دلیل است که کاربر روی هر یک از این صفحات از یک سایت سطح بالا کلیک کرده است که با صفحه Site.Wiki برای طلا مطابقت ندارد.

حتی اگر کاربر مجموعه‌ای از پیوندها را در site.wiki از metals.com بازدید کرده است، آنها به این شکل که بازدید شده است، طراحی نشده‌اند، زیرا کلیک از metals.com بوده است.

برای بهبود تجربه کاربر در این سناریو و در عین حال حفظ حریم خصوصی و امنیتی پارتیشن بندی، ما یک برش برای خود پیوندها معرفی کردیم. به طور خلاصه، یک سایت می تواند صفحات فرعی خود را به صورت :visited نمایش دهد، حتی اگر این پیوندها قبلاً در این زمینه کلیک نشده باشند. از آنجایی که سایت ها روش های دیگری برای ردیابی اینکه آیا کاربر از صفحات فرعی آن بازدید کرده است یا خیر، با معرفی خود لینک ها اطلاعات جدیدی به این سایت ها داده نمی شود. پارتیشن بندی همچنان در برابر ردیابی بین سایتی محافظت می کند و خط مشی همان مبدأ را اعمال می کند. اما توجه به این نکته مهم است که این فقط برای پیوندهایی به صفحات فرعی خود سایت اعمال می شود. پیوندها به سایت های شخص ثالث یا در iframe های شخص ثالث برای این استثنا واجد شرایط نیستند.

پس از حکاکی "self-link":

پیوندهای خود اکنون هنگامی که صفحات فرعی همان سایت هستند به عنوان بازدید شده علامت گذاری می شوند.

وضعیت پیاده سازی

این پیشرفت‌ها برای امنیت و حریم خصوصی :visited در نسخه 136 Chrome در دسترس هستند. Chrome اولین مرورگری است که این محافظت‌ها را برای کاربران پیاده‌سازی می‌کند.

مشارکت کنید و بازخورد را به اشتراک بگذارید