Карта сторонних запросов
Открыть одну страницу обычно значит пообщаться с десятком компаний, о которых вы никогда не слышали. Эта карта называет каждую, говорит, что это за сервис, и отмечает её серверы на карте мира.
Страница собирается со множества серверов
Адрес в строке браузера называет один сайт, но пришедший 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.