Карта сторонних запросов

Открыть одну страницу обычно значит пообщаться с десятком компаний, о которых вы никогда не слышали. Эта карта называет каждую, говорит, что это за сервис, и отмечает её серверы на карте мира.

Или попробуйте bbc.com, nytimes.com

Страница собирается со множества серверов

Адрес в строке браузера называет один сайт, но пришедший HTML на деле это список поручений. Возьми этот шрифт у Google, этот скрипт у менеджера тегов, этот видеоплеер у YouTube. Браузер послушно открывает соединение с каждым из этих хостов. Любой хост, который не принадлежит посещаемому сайту, это третья сторона.

Ни одно из этих соединений не анонимно. Каждое несёт IP-адрес посетителя, браузер и систему в заголовке User-Agent и обычно заголовок Referer с названием сайта или точной страницы, которую читают. Если третья сторона раньше сохранила cookie в этом браузере, на любом сайте, cookie тоже отправляется. Так компания, присутствующая на многих сайтах, может узнать одного человека, переходящего между ними. Часто владелец сайта ничего из этого не выбирал: запрос добавила тема или плагин.

Как строится карта

Наш сервер скачивает страницу и читает её исходный код. Он собирает хосты, названные в скриптах, таблицах стилей, изображениях и списках srcset, медиа, iframe, подсказках preconnect и preload, адресах отправки форм, значениях CSS url() и пикселях отслеживания внутри <noscript>. Если страница загружает Google Tag Manager, мы скачиваем и файл контейнера (не больше двух контейнеров) и ищем в нём сервисы, которые он может подгрузить.

Каждый хост сравнивается со списком примерно из 120 известных сервисов, который даёт название, владельца, страну штаб-квартиры владельца и категорию. Хосты, которые ни с чем не совпали, группируются по домену и показываются как неопознанные. Адрес, просто записанный внутри встроенного скрипта, сохраняется, только если он принадлежит известному сервису: скрипты упоминают множество адресов, к которым никогда не обращаются.

Затем определяется местоположение до 40 хостов. DNS-запрос возвращает IP-адрес, а сервис IP-to-ASN от Team Cymru возвращает сеть, которая анонсирует этот адрес, и страну, где зарегистрирован блок. Таблица отсортирована от самой навязчивой категории к наименее навязчивой: реклама, аналитика, соцсети, маркетинг, чат, видео, карты, формы, оплата, шрифты, защита от ботов, инструменты согласия, библиотеки, хостинг. Счётчик «Отслеживание» складывает первые четыре.

Три значения слова «где»

Где зарегистрирован блок IP-адресов
Именно это показывает карта. Это административный факт, записанный региональными интернет-регистратурами.
Где стоит машина, которая отвечает
Крупные сети анонсируют один и тот же адрес из дата-центров на всех континентах и направляют каждого посетителя к ближайшему. Блоку, зарегистрированному в США, посетителю из Германии может отвечать Франкфурт, а данные потом могут скопировать куда-то ещё.
Где находится компания
В таблице показано как «Штаб-квартира». От этого зависит, какие суды и ведомства могут требовать у компании данные, где бы ни стояли её машины.

Законы о международной передаче данных смотрят в основном на третье значение и на действующий договор. По главе V GDPR персональные данные могут покинуть Европейскую экономическую зону только в страну, на которую распространяется решение о достаточности защиты, или с гарантиями вроде стандартных договорных условий.

Как сократить список

  • Уберите то, чем никто не пользуется. Пиксели закончившихся кампаний и виджеты удалённых плагинов продолжают отчитываться годами.
  • Раздавайте статические файлы сами. Шрифты, наборы иконок и библиотеки скриптов можно скопировать на свой домен. С HTTP/2 это обычно быстрее публичного CDN, ведь браузеры больше не делят кэшированные файлы между сайтами.
  • Загружайте встраивания по запросу. Показывайте картинку на месте видео или карты и загружайте настоящий элемент по клику. Инструмент встраивание с загрузкой по клику пишет этот код.
  • Сообщайте меньше тем, кто остался. Referrer-Policy: strict-origin-when-cross-origin отправляет третьим сторонам ваш домен вместо полного адреса страницы.
  • Не давайте списку снова разрастись. Заголовок Content-Security-Policy работает как белый список. К хосту, которого в нём нет, обратиться нельзя, что бы ни добавил плагин.

Скрипты не выполняются. Сервис, который позже загружает другой скрипт или который появляется только после того, как посетитель принял cookie, может отсутствовать, а хост, названный в исходном коде, не всегда вызывается для каждого посетителя. Сервисы с пометкой «отправка формы» получают данные, только когда кто-то отправляет форму. Чтобы увидеть, какие трекеры запускаются до согласия, запустите проверку cookie.

Частые вопросы

Что такое сторонний запрос?

Запрос, который браузер при загрузке страницы делает к домену, отличному от посещаемого. Шрифт с fonts.googleapis.com на вашем сайте это сторонний запрос. Изображение с вашего собственного поддомена нет.

IP-адрес это персональные данные?

По GDPR, как правило, да. Суд ЕС в деле Breyer (2016) постановил, что даже динамический IP-адрес является персональными данными, если у того, кто им владеет, есть законные средства установить человека. Законы ряда штатов США тоже относят IP-адреса к персональной информации.

Почему американская компания показана в другой стране?

Карта показывает, где зарегистрирован каждый блок IP-адресов, а у глобальных компаний есть блоки, зарегистрированные во многих странах. Страна компании это отдельный факт, его вы найдёте в строке «Штаб-квартира» в таблице.

Загрузка скриптов с CDN это проблема для приватности?

Оператор CDN видит IP-адрес каждого посетителя и сайт, с которого тот пришёл. Вы также зависите от него в вопросах безопасности: кто управляет этим файлом, тот управляет вашей страницей. Размещение файла у себя снимает обе проблемы. Если оставляете CDN, добавьте атрибут integrity, чтобы изменённый файл отклонялся.

Как увидеть сторонние запросы в своём браузере?

Откройте инструменты разработчика, выберите вкладку Network и перезагрузите страницу. Столбец Domain показывает все хосты, к которым было обращение. В Chrome и Edge есть фильтр «3rd-party requests». В этом представлении видно и то, что загружают скрипты, чего наша карта видеть не может.

Почему на карте нет сервиса, которым я пользуюсь?

Вероятно, его добавляет JavaScript после загрузки страницы или ваш баннер согласия придерживает его, пока посетитель не согласится. Здесь появляются только хосты, записанные в исходном HTML или в контейнере Tag Manager.