Технический аудит · 08.09.2026

postimees.ee

Крупнейший новостной портал Эстонии

Крупнейший новостной портал Эстонии — один замер главной страницы, 4262 запроса, 66 узлов. Раскрытие здесь образцовое: платформа согласия Didomi по стандарту IAB TCF и поимённый список партнёров примерно на 950 тысяч знаков — названы Google, Adform, Criteo, RTB House, Cxense, Chartbeat и сотни других. Но решение пользователя это раскрытие не защищает. Пользователь отказал: строка согласия TCF кодирует ноль целей и ноль легитимного интереса. Несмотря на отказ, сразу после него запускается полный рекламный аукцион — свыше двухсот обращений к Google Ad Manager, Setupad, Criteo, RTB House, Adform, DoubleClick, — и каждое несёт партнёрам ту же строку «согласия нет». А ещё до выбора, в первые секунды, платформа аудиторных данных Cxense уже профилирует посетителя по сохранённому идентификатору, Chartbeat шлёт pageview с токеном, а рекламный сервер Google грузится раньше самого баннера. GA4 идёт вовсе без сигнала согласия.

Хронология обращений

+190 мс · рекламный сервер раньше CMP
pagead2.googlesyndication.com/tag/js/gpt.js — Google Publisher Tag загружается прямо из разметки, на +190 мс, раньше SDK платформы согласия Didomi (+212 мс). Параллельно грузятся Setupad (stpd.cloud), Chartbeat (static.chartbeat.com), Confiant (npttech.com) и Weborama (static.wwcloud.eu, +247 мс).
+652…+1167 мс · платформа аудиторных данных Cxense
cdn.cxense.com/cx.cce.js и cx.js, затем api.cxense.com/segment/lookup на +1167 мс — запрос рекламных сегментов с устойчивым идентификатором persisted=af85f1f8…. Профилирование для таргетинга, опирающееся на чтение сохранённого идентификатора, до какого-либо выбора.
+1350…+1609 мс · аналитика и измерение
www.googletagmanager.com (+1350 мс); pong.chartbeat.net/ping с токеном пользователя (+1437 мс); tag.aticdn.net/piano-analytics.js (+1478 мс); xqnzlnc.pa-cd.com/event с idclient=OPT-OUT (+1609 мс — без идентификатора).
~+57 мин · рекламный аукцион ПОСЛЕ отказа
Сразу за фиксацией отказа запускается программатик: заголовочные ставки Setupad (+3443870 мс), Criteo (static.criteo.net, gum.criteo.com), RTB House (creativecdn), Google DoubleClick (+3444559 мс), safeframe и tpc.googlesyndication, euddn (le303 +3597127 мс), Adform (+3697796 мс), узел Kanal2. Свыше двухсот рекламных обращений, каждое несёт строку gdpr_consent=CQqOSAA… — «согласия нет».
~+60 мин · GA4 и Universal Analytics
region1.analytics.google.com/g/collect — page_view GA4 (G-380QQP0TRP) со статусом gcs=-, и обращение к www.google-analytics.com. Аналитика идёт без сигнала согласия.

Декларация против факта

✓ Контролёр — Postimees Grupp; условия защиты данных с упором на законный интерес (õigustatud huvi — 33 упоминания) — заявлен
✓ Управление согласием — платформа Didomi по стандарту IAB TCF (CMP ID 7); баннер с выбором «Olen nõus» / «Halda valikuid» — заявлен
✓ Необходимые категории заявлены на основании законного интереса, включая измерение потребления журналистского контента — заявлен
✓ Список партнёров раскрыт поимённо и исчерпывающе (вендорский перечень IAB TCF ~950 тыс. знаков): Google, Adform, Criteo, RTB House, Weborama, Piano, Cxense, Setupad, Xandr, Chartbeat и сотни других — заявлен
✓ Надзорный орган — Andmekaitse Inspektsioon — заявлен
+ Рекламный аукцион запускается при зафиксированном отказе (строка согласия кодирует ноль целей), передавая партнёрам сигнал «согласия нет» — не заявлен
+ Платформа аудиторных данных Cxense профилирует по устойчивому идентификатору до выбора — не заявлен
+ Рекламный сервер Google Publisher Tag, Chartbeat и Weborama срабатывают до выбора — не заявлен
+ GA4 идёт без сигнала согласия (gcs=-) — не заявлен

Тайминги передачи

+190 мс pagead2.googlesyndication.com

Google Publisher Tag (gpt.js) из разметки, раньше SDK Didomi.

+1167 мс api.cxense.com

segment/lookup с устойчивым идентификатором persisted=af85f1f8…. Рекламные аудиторные сегменты.

+1437 мс pong.chartbeat.net

pageview /ping с токеном пользователя.

+3443371 мс sdk.privacy-center.org (Didomi)

consent.given по клику; строка TCF CQqOSAA… = ноль целей, ноль легитимного интереса.

+3443507 мс pagead2.googlesyndication.com

gdpr_consent=CQqOSAA… (нулевая строка) уходит в Google Ad Manager; аукцион запускается после отказа.

+3444193 мс gum.criteo.com

Criteo получает нулевую строку согласия.

+3444559 мс ad.doubleclick.net

DoubleClick получает нулевую строку согласия.

+3614812 мс region1.analytics.google.com

GA4 page_view, G-380QQP0TRP, режим согласия не настроен.

Зафиксированные трекеры

Показать получателей (22)
  • Didomi (sdk.privacy-center.org — 2829 обр., api.privacy-center.org) — платформа управления согласием IAB TCF (CMP ID 7); баннер «Olen nõus» / «Halda valikuid». Зафиксированный выбор пользователя — отказ (строка согласия кодирует ноль целей и ноль легитимного интереса)
  • Cxense / Piano DMP (cdn.cxense.com, api.cxense.com, comcluster.cxense.com) — платформа аудиторных данных; api.cxense.com/segment/lookup несёт устойчивый идентификатор persisted и запрашивает рекламные сегменты на +1167 мс — до выбора
  • Chartbeat (pong.chartbeat.net — 231 обр., static.chartbeat.com, mab.chartbeat.com) — издательская аналитика; pong/ping с токеном пользователя на +1437 мс — до выбора
  • Google Publisher Tag / Ad Manager (pagead2.googlesyndication.com — 237 обр.) — рекламный сервер; gpt.js на +190 мс (раньше самого CMP), /pagead/ping на +2526 мс — до выбора; полный аукцион — после, при зафиксированном отказе
  • Weborama (static.wwcloud.eu — 12 обр.) — платформа аудиторных данных; загружается на +247 мс — до выбора
  • Confiant (www.npttech.com) — контроль качества и безопасности рекламы; +213 мс — до выбора
  • Piano Analytics / AT Internet (tag.aticdn.net, xqnzlnc.pa-cd.com — 26 обр., api-esp.piano.io) — измерение потребления контента; pa-cd.com/event до выбора несёт idclient=OPT-OUT (без идентификатора)
  • Google Tag Manager (www.googletagmanager.com — 20 обр.) — контейнер тегов; +1350 мс — до выбора
  • Google Analytics 4 (region1.analytics.google.com, G-380QQP0TRP) — идёт со статусом gcs=- (режим согласия не настроен); Universal Analytics (www.google-analytics.com) — устаревший счётчик
  • Setupad (node.setupad.com — 28 обр., wb.setupad.com, stpd.cloud) — платформа заголовочных ставок; аукцион запускается ПОСЛЕ отказа
  • Google DoubleClick (ad.doubleclick.net, stats.g.doubleclick.net, s0.2mdn.net, tpc.googlesyndication.com, *.safeframe.googlesyndication.com) — рекламная отдача и показ; ПОСЛЕ отказа, несёт нулевую строку согласия
  • Google Ad Traffic Quality (ep1.adtrafficquality.google, ep2.adtrafficquality.google) — контроль качества рекламного трафика; ПОСЛЕ отказа
  • Criteo (static.criteo.net, gum.criteo.com) — рекламная сеть / ретаргетинг (RTB); ПОСЛЕ отказа, получает нулевую строку согласия
  • RTB House (invstatic101.creativecdn.com) — рекламная сеть (RTB); ПОСЛЕ отказа
  • Adform (track.adform.net) — рекламная сеть (RTB); ПОСЛЕ отказа
  • euddn.net (le303.euddn.net — 29 обр., router.euddn.net, ode601.euddn.net, ode602.euddn.net) — рекламная инфраструктура доставки (RTB); ПОСЛЕ отказа
  • Adobe (animate.adobe.com) — библиотека анимации рекламного креатива; ПОСЛЕ отказа
  • Kanal2 (tigu.kanal2.ee) — узел эстонского телеканала (медиагруппа); ПОСЛЕ отказа
  • city24 (static.img-city24.ee) — узел родственной площадки медиагруппы; ПОСЛЕ отказа
  • Библиотеки и шрифты (cdnjs.cloudflare.com, cdn.jsdelivr.net, code.jquery.com, cdn.ampproject.org, fonts.googleapis.com, fonts.gstatic.com, www.gstatic.com, www.google.com, www.google.ee) — функциональная отдача
  • Первая сторона (www.postimees.ee, v.postimees.ee, vx.postimees.ee, services.postimees.ee, auth.postimees.ee, c2/infographics/ams/andy/cdn.postimees.ee, f.pmo.ee и f7–f12/f302.pmo.ee, sisuturundus.pmo.ee) — инфраструктура Postimees Grupp
  • Список партнёров — вендорский перечень IAB TCF ~950 тыс. знаков; названы поимённо Google, Adform, Criteo, RTB House, Weborama, Piano, Cxense, Setupad, Xandr, Chartbeat и сотни других

Признаки несоответствия GDPR

Контекст

postimees.ee — крупнейший новостной портал Эстонии; ответственный обработчик — Postimees Grupp. Управление согласием реализовано платформой Didomi по стандарту IAB TCF. Замер — одна запись главной страницы: 4262 запроса, 66 узлов, длинный сеанс, в ходе которого пользователь изучал настройки согласия и в итоге отказал.

Этот разбор стоит особняком дважды. Во-первых, раскрытие получателей здесь сделано на образцовом уровне: список партнёров развёрнут поимённо и полностью — вендорский перечень IAB TCF примерно на 950 тысяч знаков, где названы Google, Adform, Criteo, RTB House, Cxense, Chartbeat, Setupad и сотни других. Во-вторых, именно эта полнота делает наглядным главное расхождение: раскрыть всех — не то же самое, что соблюсти решение пользователя.

Кому уходят данные напрямую

До выбора — Cxense / Piano (аудиторные данные, профилирование), Chartbeat (аналитика), Google Publisher Tag (рекламный сервер), Weborama (аудиторные данные), Confiant (контроль рекламы), Google Tag Manager. После зафиксированного отказа — полный рекламный аукцион: Setupad, Criteo, RTB House, Adform, euddn, Google DoubleClick, плюс GA4 и Universal Analytics. Измерение Piano Analytics до выбора уходит без идентификатора (OPT-OUT).

Заявленное против фактического

Расхождение здесь не в составе получателей, а в отношении к решению пользователя — и это принципиально.

Первое — раскрытие образцовое. Платформа согласия Didomi по стандарту IAB TCF, баннер с выбором «Olen nõus» / «Halda valikuid», и поимённый список партнёров на ~950 тысяч знаков. По части того, кого назвали, к сайту претензий нет: назвали фактически всех.

Второе — но отказ проигнорирован. Пользователь сделал выбор, и Didomi записал строку согласия TCF CQqOSAA…. Эта строка декодируется однозначно: согласие на все двадцать четыре цели обработки — ноль, легитимный интерес — ноль. То есть зафиксирован полный отказ. Несмотря на это, ровно после фиксации отказа запускается полный программатик-аукцион: свыше двухсот обращений к рекламному серверу Google Ad Manager, заголовочные ставки Setupad, Criteo, RTB House, Adform, инфраструктура euddn, Google DoubleClick. И обращения несут партнёрам ту же нулевую строку — проверено, gdpr_consent=CQqOSAA… уходит в Google, Criteo и DoubleClick. Механика такова: аукцион привязан к самому факту решения, а не к его содержанию. Он срабатывает одинаково и при согласии, и при отказе — в последнем случае лишь честно передавая партнёрам сигнал «согласия нет». Но отказ должен останавливать обработку, а не сопровождать её.

Третье — и до выбора уже профилируют. Ещё в первые секунды, задолго до решения, платформа аудиторных данных Cxense запрашивает рекламные сегменты посетителя (api.cxense.com/segment/lookup, +1167 мс), неся устойчивый идентификатор persisted=af85f1f8…. Это чтение сохранённого идентификатора устройства и профилирование для рекламы — не измерение, которое баннер относит к законному интересу. Рядом Chartbeat отправляет pageview с токеном пользователя (+1437 мс), рекламный сервер Google Publisher Tag грузится на +190 мс — раньше самого CMP, — и подгружается Weborama (+247 мс).

Четвёртое — аналитика без сигнала согласия. GA4 (G-380QQP0TRP) отправляет события со статусом gcs=- — режим согласия Google не сконфигурирован.

Согласие: что доказано и что нет

Доказано: пользователь нажал «Keeldun kõigist» (отклонить всё). В панели Didomi «Nõusolekuhaldus» выбрана кнопка отказа ото всех категорий, включая рекламные (Reklaamküpsised). Didomi фиксирует решение на +3443371 мс событием consent.given (тип события означает «решение принято», а не «согласие дано»), а записанная строка TCF CQqOSAA… декодируется в ноль согласий по всем двадцати четырём целям и ноль легитимного интереса — то есть машинно подтверждённый отказ.

Доказано: рекламный аукцион запускается после отказа. Сразу за фиксацией решения (+3443383 мс и далее) уходит свыше двухсот рекламных обращений — Google Ad Manager, Setupad, Criteo, RTB House, Adform, euddn, DoubleClick.

Доказано: партнёрам уходит нулевая строка. gdpr_consent=CQqOSAA… присутствует в обращениях к Google Ad Manager, Criteo и DoubleClick — то есть сигнал «согласия нет» передаётся, но обращения всё равно происходят.

Доказано: до выбора работают трекеры. Cxense segment/lookup с сохранённым идентификатором — на +1167 мс; Chartbeat pong/ping с токеном — на +1437 мс; Google Publisher Tag — на +190 мс; Weborama — на +247 мс.

Доказано: часть стека отказ уважает. Коллектор Piano Analytics отправляет idclient=OPT-OUT, без идентификатора; на этом фоне рекламный аукцион, запускающийся при отказе, выделяется особенно наглядно.

Не доказано и не приводится: содержимое сегментов и полный идентификатор. Какие именно рекламные сегменты вернул Cxense и каков полный сохранённый идентификатор, в разборе не приводится; вывод опирается на факт запроса с сохранённым идентификатором и на факт рекламных обращений после отказа.

Границы наблюдения

Замер охватывает главную страницу и длинный сеанс, в ходе которого пользователь изучил настройки и отказал; фиксируется поведение браузера, не внутренняя кухня сервисов. Строка согласия TCF декодирована из параметра gdpr_consent, который сайт передаёт партнёрам; тип решения (consent.given) прочитан из событий Didomi. Отнесение обращений к получателям опирается на домены и схему адресов. Устойчивый идентификатор Cxense в разборе приведён усечённо. Как каждый рекламный партнёр распоряжается полученной нулевой строкой на своей стороне — уважает ли отказ server-side — браузерным замером не проверяется; существенно то, что сами обращения к ним после отказа состоялись.

Отдельно о прочтении согласия: платформа Didomi на любой выбор — и на приём, и на отказ — отправляет событие типа consent.given («решение зафиксировано»). Поэтому автоматическая проверка, ориентирующаяся на имя события, может ошибочно показать «согласие дано»; действительное состояние читается не по имени события, а по строке TCF, которая здесь кодирует полный отказ.

Файл опубликован очищенным от личных данных: удалены значения куки в запросах, сохранённые идентификаторы в телах-уликах усечены. Заголовки ответов, статусы, порядок загрузки, инициаторы, момент фиксации решения и строка согласия TCF сохранены и проверяются по опубликованному файлу напрямую.

Правовую оценку выносит компетентный орган — Andmekaitse Inspektsioon.

Вывод

Крупнейший новостной портал страны подошёл к раскрытию образцово: платформа согласия Didomi по стандарту IAB TCF и поимённый список партнёров почти на миллион знаков, где названы фактически все получатели. На вопрос «кто обрабатывает данные» сайт отвечает полнее большинства. Но решение пользователя это раскрытие не защищает.

Пользователь отказал — строка согласия TCF кодирует ноль целей и ноль легитимного интереса. Несмотря на отказ, сразу после него запускается полный рекламный аукцион: свыше двухсот обращений к Google Ad Manager, Setupad, Criteo, RTB House, Adform, DoubleClick, — и каждое несёт партнёрам ту же строку «согласия нет». Механизм привязан к факту решения, а не к его содержанию: он срабатывает и при отказе. А ещё до выбора, в первые секунды, платформа аудиторных данных Cxense профилирует посетителя по сохранённому идентификатору, Chartbeat отправляет pageview с токеном, рекламный сервер Google грузится раньше баннера, а GA4 идёт вовсе без сигнала согласия.

Показательно, что часть стека ведёт себя корректно: коллектор Piano Analytics до выбора отправляет OPT-OUT, без идентификатора. Это делает расхождение особенно наглядным — там, где измерение обходится без идентификатора, рекламный аукцион запускается прямо поверх отказа. Исчерпывающее раскрытие получателей — необходимое, но не достаточное: оно не заменяет ни удержания обработки до выбора, ни соблюдения отказа после него.

Устранение: остановить рекламный аукцион при отказе — обусловить запуск заголовочных ставок и обращений к Google Ad Manager, Criteo, RTB House, Adform, euddn и DoubleClick фактическим содержанием решения, а не самим фактом его фиксации; обусловить согласием сегментный запрос Cxense и любое чтение сохранённых идентификаторов до выбора; обусловить согласием загрузку и пинги Google Publisher Tag, Chartbeat и Weborama; настроить режим согласия Google, чтобы GA4 передавал сигнал согласия (сейчас gcs=-); пересмотреть отнесение рекламного аудиторного профилирования к законному интересу."

Доказательство

Как проверить: скачайте файл и посчитайте его контрольную сумму — sha256sum файл.har (Linux, macOS) или certutil -hashfile файл.har SHA256 (Windows); она должна совпасть с указанной. Вывод разбора относится к объёму этого замера — см. ограничения методики.

Оригинал (разбор)
HAR-файл: ee/postimees-ee-2026-09-08.har
SHA-256: 9b5dedce72b3411d8de72aabdd9d4fbec18b8af3f7b5c03c16fd74ccefc0b404
Контрольный снимок
Ждём изменений
HAR-файлы хранятся в EU-инфраструктуре (Proton Drive). SHA-256 публикуется для проверки целостности.