Как интерпретировать ответ DFP

Советы, как интерпретировать значения полей из ответа DFP и использовать их в вашей бизнес-логике.

Суть

DFP не присылает готовую рекомендацию: заблокировать запрос, пропустить пользователя или отправить его на дополнительную проверку. Его задача другая — дать больше информации о клиентском окружении, из которого пришёл запрос.

DFP передаёт вам несколько важных сигналов:

  • DFP для сайта

  • DFP для мобильного приложения

  • user_id — идентификатор клиентского окружения (ID связки устройство+браузер).

  • bot_score — пришёл запрос от бота или человека.

  • proxy_score — вероятность, что при отправке запроса использовался VPN или прокси.

  • proxy_signs — признаки, на основании которых DFP рассчитал proxy_score.

  • engine — какой браузерный движок используется: например, Blink, WebKit, Gecko или другой.

  • hosting — относится ли IP-адрес к хостинговой подсети.

  • bot_hosting — относится ли IP-адрес к хостинговой подсети, откуда мы зафиксировали активность ботов или другую подозрительную активность.

  • isp_active_subnet — относится ли IP к активной подсети интернет-провайдера, которая используется для подключения частных или корпоративных клиентов к интернету.

  • tor — относится ли IP к сети Tor, которая скрывает реальный адрес пользователя.

  • incognito — открыт ли браузер в режиме инкогнито или приватного просмотра.

  • antidetect — используется ли антидетект-браузер, который подменяет параметры браузера и отпечаток, чтобы с одного устройства можно было выдавать себя за разных пользователей.

  • vm — запущен ли браузер в виртуальной машине.

  • rdp — есть ли признаки использования программы для удалённого доступа.

  • webview — открыт ли ваш ресурс внутри другого приложения (WebView), например, по ссылке в мессенджере, а не в обычном браузере.

  • mobile — пришёл ли запрос с мобильного устройства.

  • os — какая операционная система используется: например, Windows, macOS, Linux, iOS или Android.

  • vpn — есть ли признаки использования VPN.

  • new_user — впервые ли ваш ресурс посещают из этого клиентского окружения.

  • confidence_score — степень уверенности в том, что user_id определён корректно.

  • white_bot (только для интеграции DFP на сайт) — от доверенного ли источника пришёл запрос.

    По умолчанию доверенными источниками считаются только поисковые краулеры. По вашему запросу добавим в список и другие источники: например, IP-адреса ваших разработчиков.

    Запросы с white_bot: true рекомендуем автоматически пропускать на вашем бэкенде. Для них DFP не вычисляет user_id и возвращает в этом поле пустую строку ("user_id": "").

  • user_id — идентификатор клиентского окружения (ID устройства).

  • bot_score — вероятность, что запрос отправил бот;

  • os — операционная система;

  • isp_active_subnet — относится ли IP к активной подсети интернет-провайдера, которая используется для подключения частных или корпоративных клиентов к интернету;

  • vpn — используется ли VPN;

  • hosting — из хостинговой подсети пришёл запрос или из обычной;

  • bot_hosting — пришёл ли запрос из хостинговой подсети, откуда мы зафиксировали активность ботов или другую подозрительную активность;

  • new_user — впервые ли ваш ресурс посещают из этого клиентского окружения;

  • confidence_score — степень уверенности в том, что user_id определён корректно.

Сами по себе эти поля не говорят, хороший пользователь или плохой. Они дают контекст. Решение вы принимаете сами — в зависимости от сценария, действий пользователя и правил продукта. Пример: если у вас запрещён мультиаккаунтинг, но вы видите 100 аккаунтов с одним user_id, можно их заблокировать за злоупотребление.

Ниже рассказываем, как интерпретировать каждое поле и где оно может пригодиться.

user_id

Как интерпретировать

user_id — стабильный идентификатор клиентского окружения.

При интеграции на сайт для запросов с white_bot: true DFP не вычисляет user_id и возвращает пустую строку ("user_id": "").

Говоря проще, это ID, который описывает уникальную связку «конкретный браузер + конкретное устройство» (DFP для сайта) или уникальное устройство (DFP для мобильного приложения). ID остаётся стабильным, даже когда пользователь меняет разные настройки. Например, если он:

  • включит VPN;

  • обновит ОС;

  • поменяет время на компьютере/телефоне;

  • откроет инкогнито в браузере;

  • обновит версию браузера.

ID будет тем же самым, ведь главный критерий выполняется: устройство и браузер остались те же. А вот если пользователь откроет другой браузер или сделает запрос с нового устройства, вы увидите другой ID.

Смена user_id может быть нормой: пользователь зашёл с другого телефона или скачал новый браузер. А может говорить об опасном сценарии: например, у пользователя украли токен аутентификации и пытаются с ним залогиниться.

Использование нескольких аккаунтов с одного user_id тоже может быть нормальным — например, если одним компьютером пользуется вся семья. Но в другом контексте это может быть сигналом фрода: например, злоумышленник плодит аккаунты, чтобы получить бонусы по реферальной программе.

Когда пригодится

user_id особенно полезен, когда нужно понять, что перед вами уже знакомое окружение.

Пример 1

У вас сервис с бесплатным лимитом: можно бесплатно сгенерировать 10 отчётов в месяц. Кто-то пытается обойти ограничение: чистит cookie, открывает инкогнито, включает VPN и снова приходит как будто впервые.

Если лимит привязан только к cookie или IP, такой обход может сработать. Но если вы учитываете user_id, то видите, что клиентское окружение не изменилось. Тогда можно выдавать сообщение: бесплатный объём уже использован.

Пример 2

У вас есть промоакция или приветственный бонус. Один человек создаёт десять аккаунтов, чтобы получить бонус десять раз.

Если у этих аккаунтов один и тот же user_id, это не стопроцентное доказательство нарушения, но сильный сигнал. Вы можете не выдавать бонус автоматически, ограничить количество участий с одного user_id или отправить такие аккаунты на проверку.

Пример 3

Пользователь раньше входил в аккаунт из одного user_id, а теперь тот же токен или cookie приходит из другого окружения.

Это может быть признаком кражи cookie или токена. В таком случае можно сбросить сессию и попросить пользователя войти заново.

new_user

Как интерпретировать

new_user: true значит, что DFP не встречал это клиентское окружение при предыдущих посещениях вашего ресурса. new_user: false — ваш ресурс уже посещали из этого окружения.

new_user: true не значит, что перед вами обязательно новый человек или новый аккаунт: пользователь мог уже заходить с другого браузера или устройства. И наоборот, одно окружение могут использовать несколько людей. Поле показывает только историю посещений вашего ресурса из конкретного клиентского окружения.

Когда пригодится

Поле полезно, когда важно отличать знакомые окружения от тех, с которых ресурс посещают впервые: например, при входе в аккаунт.

Если пользователь логинится из совсем незнакомого окружения, риск, что пароль украли, выше. Лучше запросить дополнительное подтверждение, например, отправить код на имейл.

confidence_score

Как интерпретировать

confidence_score: 1 — DFP уверен, что user_id определён правильно. Значения ниже 1 означают снижение уверенности.

Если DFP встречает окружение, которое раньше не посещало ваш ресурс (new_user: true), то выдаёт ему новый user_id. В таких случаях confidence_score всегда равен 1.

Если DFP встречает окружение, которое уже посещало ваш ресурс, то выдаёт связанный с ним user_id. В этом случае confidence_score может отличаться от 1. Чем ниже значение, тем больше параметров текущего окружения отличается от набора, который DFP видел раньше. Но совпадений всё ещё достаточно, чтобы распознать его.

bot_score

Как интерпретировать

bot_score показывает, насколько запрос похож на автоматизированный или содержит признаки подмены параметров клиентского окружения. Значение находится в диапазоне от 0 до 1.

Значение Как интерпретировать

Меньше 0.4

Обычный запрос, отправленный человеком. Значительных признаков автоматизации не выявлено.

От 0.4 до 0.5

Возможно, бот. Есть отдельные признаки автоматизации, подмены параметров клиента и другой аномалии.

0.5 и выше

Наверняка бот. Значительные признаки, характерные для автоматизации или подмены параметров клиента.

Высокий bot_score не означает, что запрос нужно сразу блокировать. Важно смотреть на сценарий: если бот стучится в открытый API, это нормальное поведение. А вот если похожий на бота клиент пытается восстановить пароль, создать много аккаунтов или применить промокод, риск гораздо выше.

Когда пригодится

bot_score полезен там, где автоматизация может навредить бизнесу.

Пример 1

У вас есть форма регистрации. В обычный день через неё создают 200 аккаунтов, а сегодня внезапно создали 5000.

Если у значительной части таких запросов высокий bot_score, они идут из подозрительных подсетей и ведут себя похоже, стоит включить дополнительную проверку при регистрации: CAPTCHA, одноразовый код, лимит запросов или ручную модерацию.

Пример 2

У вас есть форма заявки. Бот массово отправляет фейковые заявки, и менеджеры тратят время на несуществующих клиентов.

В этом случае можно не блокировать форму целиком, а менять реакцию по уровню риска: обычные запросы пропускать, подозрительные отправлять на дополнительную проверку, а запросы с высоким bot_score блокировать.

Пример 3

Ваш сайт содержит данные, которые нельзя массово выгружать. Можно поставить лимит запросов по user_id и выдавать проверки при высоком bot_score.

proxy_score и proxy_signs

Как интерпретировать

proxy_score показывает, насколько вероятно, что при отправке запроса использовался VPN или прокси. Значение находится в диапазоне от 0 до 1. DFP оценивает его, сравнивая параметры браузера с параметрами сетевого соединения.

Значение Как интерпретировать

Меньше 0.5

Признаков VPN или прокси не выявлено.

0.5 и выше

Использовался VPN или прокси.

proxy_signs показывает, почему DFP поставил такую оценку: в массиве перечислены признаки VPN или прокси, которые он нашёл.

  • tcp — значение MSS не соответствует операционной системе;

  • tls — расхождение во времени RTT;

  • os — операционная система по сетевому отпечатку не совпадает с указанной в User-Agent;

  • tz — часовой пояс браузера не совпадает с часовым поясом IP-адреса.

Когда пригодится

proxy_score полезен в сценариях, где важен регион или сеть пользователя: например, при анализе подозрительных входов, защите финансовых операций или ограничении доступа по региону.

Пример

Пользователь входит в личный кабинет. У него proxy_score: 1, а в proxy_signs есть os и tz: операционная система, указанная в браузере, не совпадает с определённой по сетевому отпечатку, а часовой пояс браузера — с часовым поясом IP-адреса.

Это признаки использования VPN или прокси. Если раньше пользователь входил в аккаунт без них, изменение сетевого окружения может быть подозрительным.

Можно запросить дополнительное подтверждение входа, например одноразовый код из СМС.

hosting

Как интерпретировать

hosting: true значит, что IP отправителя относится к хостинговой подсети.

Для обычного пользовательского продукта это может быть подозрительно. Реальные пользователи обычно заходят из домашних, мобильных, офисных или корпоративных сетей. Хостинговые подсети чаще используют для скриптов, парсеров, ботов, тестовых стендов и массовых запросов.

Но hosting: true не доказывает фрод автоматически. Запрос может прийти из корпоративной инфраструктуры, прокси, мониторинга, внутреннего инструмента или тестового окружения.

Когда пригодится

Пример 1

У вас сервис, где пользователи создают аккаунты и получают пробный период. За короткое время приходит много регистраций из хостинговых подсетей, с высоким bot_score и похожими параметрами окружения.

Это похоже на массовую автоматизированную регистрацию. Можно показать дополнительную проверку, ограничить количество регистраций, временно замедлить поток или отправить часть заявок на модерацию.

Пример 2

Обычный пользователь всегда заходил в личный кабинет из домашней или мобильной сети. Теперь попытка сменить пароль приходит из хостинговой подсети.

Это повод запросить дополнительное подтверждение.

bot_hosting

Как интерпретировать

bot_hosting: true значит, что IP отправителя относится к хостинговой подсети, откуда мы зафиксировали активность ботов или другую подозрительную активность.

Это более сильный риск-фактор, чем hosting: true: поле hosting говорит только о типе подсети, а bot_hosting добавляет репутационный контекст.

Когда пригодится

Пользователь пытается совершить важное действие: например, зарегистрировать аккаунт, применить промокод или восстановить пароль. Запрос пришёл из хостинговой подсети с bot_hosting: true, а bot_score средний или высокий.

Это повод провести дополнительную проверку: выдать CAPTCHA, запросить одноразовый код из СМС или отправить подтверждение по почте.

isp_active_subnet

Как интерпретировать

isp_active_subnet: true значит, что пользователь подключился к интернету через обычную сеть интернет-провайдера — такую, которую используют для домашнего, мобильного или корпоративного доступа в интернет.

Это дополнительный контекст о сети пользователя. Сам по себе параметр не подтверждает ни безопасность, ни подозрительность запроса.

Когда пригодится

Поле может служить дополнительным сигналом для вашего сценария. Например, если важно защититься от регистраций ботами и вы видите низкий bot_score в сочетании с hosting: false и bot_hosting: false, то isp_active_subnet: true станет дополнительным подтверждением, что запрос похож на обращение обычного пользователя.

tor

Как интерпретировать

tor: true значит, что IP отправителя относится к сети Tor, которая скрывает реальный адрес пользователя.

Сам по себе Tor не доказывает нарушение: его используют и для приватности. Но для действий с деньгами или доступом к аккаунту это заметный риск-фактор.

Когда пригодится

Пользователь добавляет новый банковский счёт для вывода средств, при этом tor: true. Раньше он выполнял финансовые операции без Tor.

Теперь пользователь скрывает свой IP-адрес при изменении реквизитов для вывода денег. Такое изменение привычного поведения — повод запросить дополнительное подтверждение перед сохранением новых реквизитов.

incognito

Поле incognito присутствует, только если DFP интегрирован на сайт. При интеграции в мобильное приложение этого поля не будет в ответе DFP.

Как интерпретировать

incognito: true значит, что пользователь открыл страницу в режиме инкогнито или приватного просмотра.

Все мы иногда используем инкогнито — например, если логинимся в аккаунт с чужого компьютера. Но иногда его используют, чтобы злоупотребить ресурсом: например, сбросить cookie и выдать себя за нового пользователя.

Само по себе инкогнито не доказывает нарушение. Но если оно появляется вместе с VPN, новым поведением, повторными действиями или тем же user_id, его стоит учитывать.

Когда пригодится

Инкогнито полезно учитывать в промоакциях, голосованиях, опросах, бесплатных лимитах и paywall-сценариях. Он становится дополнительным сигналом — чаще всего, в связке с user_id.

Пример

У вас есть промокод для новых пользователей: один человек может применить его только один раз.

Пользователь создаёт первый аккаунт, применяет промокод и получает скидку. Потом открывает сайт в инкогнито, создаёт второй аккаунт с того же user_id и снова пытается применить промокод.

Один user_id у двух аккаунтов сам по себе ещё не доказывает нарушение: одним компьютером могли пользоваться два разных человека. Но incognito: true добавляет важный контекст. Пользователь создаёт новый аккаунт в режиме, который помогает скрыть браузерное состояние: cookie, локальное хранилище и историю сессии.

Поэтому сценарий больше похож на попытку обойти правило акции. В таком случае можно не только отказать во втором применении промокода, но и ограничить первый аккаунт: например, заморозить промобонусы и отправить аккаунт на проверку.

Так система реагирует не на сам факт инкогнито, а на схему: пользователь уже получил выгоду и пытается повторить её через второй аккаунт в приватном режиме.

antidetect

Как интерпретировать

antidetect: true значит, что используется антидетект-браузер. Он подменяет параметры браузера и отпечаток, чтобы с одного устройства можно было выдавать себя за разных пользователей.

Обычные пользователи такие браузеры, как правило, не используют, поэтому это сильный риск-фактор.

Когда пригодится

За короткое время на вашем сайте появляется много новых аккаунтов. При регистрации DFP обнаруживает antidetect: true.

С помощью антидетект-браузера можно подменять параметры браузера и цифровой отпечаток, чтобы создавать видимость разных клиентских окружений. В сочетании с массовыми регистрациями это может указывать на попытку обойти ограничения сервиса.

Можно отправить такие регистрации на дополнительную проверку или временно ограничить создание новых аккаунтов.

vm

Как интерпретировать

vm: true значит, что браузер запущен в виртуальной машине.

Само по себе это не доказывает нарушение: виртуальные машины используют разработчики, тестировщики и компании с виртуальными рабочими местами. Но их используют и для массовой регистрации аккаунтов. Поэтому поле стоит учитывать вместе с другими сигналами.

Когда пригодится

На вашем сайте за короткое время появляется много новых регистраций с vm: true, hosting: true и bot_score: 0.6.

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

Такое сочетание сигналов может указывать на массовую автоматизированную регистрацию. Можно выдавать CAPTCHA или отправлять подозрительные регистрации на модерацию.

rdp

Как интерпретировать

rdp: true значит, что DFP обнаружил признаки использования программы для удалённого доступа.

Удалённый доступ используют легитимно: для работы из дома или помощи техподдержки. Но так же действуют мошенники: убеждают пользователя установить программу и сами управляют его устройством.

Когда пригодится

Пользователь переводит крупную сумму на новый банковский счёт, при этом rdp: true.

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

Чтобы снизить риск потери денег, можно приостановить операцию и подтвердить её по другому каналу, например звонком.

webview

Как интерпретировать

webview: true значит, что ваш ресурс открыт внутри другого приложения (WebView), а не в обычном браузере. Например, пользователь перешёл по ссылке в мессенджере, и сайт открылся прямо в нём.

Чаще всего это обычная ситуация. Если ваше собственное приложение открывает страницы сайта через WebView, такие запросы тоже придут с webview: true.

Но WebView используют и мошенники: делают своё приложение, открывают в нём ваш сайт и перехватывают данные, которые вводит пользователь. Поэтому поле стоит учитывать на страницах, где пользователь вводит пароль, платёжные данные или подтверждает операцию.

Когда пригодится

Ваши клиенты входят в личный кабинет через браузер или ваше собственное приложение, которое не использует WebView для входа.

Но один из запросов на вход приходит с webview: true. Значит, страницу авторизации открыли внутри другого приложения. Это может быть обычный переход по ссылке, но также есть риск, что пользователь открыл страницу через приложение, которому не стоит доверять.

Можно запросить дополнительное подтверждение входа, например одноразовый код из СМС.

vpn

Поле устарело. Мы оставили его, чтобы не нарушить работу уже настроенных интеграций. Если настраиваете новую логику, используйте вместо него proxy_score и proxy_signs — они определяют и VPN, и прокси.

Как интерпретировать

vpn: true показывает, что DFP обнаружил признаки использования VPN.

VPN — не синоним фрода. Пользователь может включить VPN для приватности, работы, доступа из корпоративной сети или стабильного соединения в поездке.

Но VPN важен там, где для вашего сценария значимы регион, сеть или история входов. Например, если вы ограничиваете доступ по стране, применяете региональные цены, выдаёте бонусы по географии, защищаете платежи или отслеживаете подозрительные входы.

Поэтому vpn лучше читать так: сетевой контекст скрыт или изменён. Дальше важно смотреть, что пользователь делает и какие ещё сигналы пришли вместе с VPN.

Когда пригодится

У вас сервис с региональными ценами. Пользователь пытается зарегистрироваться, но у него включён VPN.

Возможно, он просто использует VPN постоянно. А может быть, это способ привязать аккаунт к другому региону, где цены ниже. Вы выдаёте страницу: регистрация доступна только без VPN. Когда пользователь придёт без VPN, он сможет вернуться к форме и создать аккаунт.

mobile, os и engine

Поля mobile и engine присутствуют, только если DFP интегрирован на сайт. При интеграции в мобильное приложение этих полей не будет в ответе DFP.

Как интерпретировать

mobile, os и engine дают контекст запроса:

  • mobile показывает, пришёл ли запрос с мобильного устройства;

  • os показывает операционную систему: например, Windows, macOS, Linux, iOS или Android;

  • engine показывает браузерный движок: например, Blink, WebKit, Gecko, Goanna или другой.

Эти поля сами по себе не указывают на подозрительное поведение. Но их можно использовать как дополнительный контекст при анализе запросов.

Когда пригодится

У вас началась волна подозрительных регистраций. По одному запросу ничего необычного не видно, но в потоке появляется повторяющийся набор признаков: десктопное устройство, Linux, один и тот же браузерный движок, хостинговая подсеть и средний bot_score.

mobile, os и engine вместе с другими сигналами помогают описать автоматизированный паттерн и точнее настроить правила: например, отправлять такие регистрации на дополнительную проверку или ограничивать частоту запросов.

white_bot

Как интерпретировать

white_bot: true означает, что запрос пришёл из доверенного источника. Это возможно в двух случаях:

  • вы передали нам признаки доверенного трафика, и запрос соответствует этим признакам;

  • запрос отправил поисковый бот — такие запросы считаются доверенными по умолчанию.

Как передать нам признаки доверенного трафика и настроить его автопропуск на бэкенде, читайте в инструкции по интеграции.

Для запросов с white_bot: true DFP не вычисляет user_id и возвращает в нём пустую строку ("user_id": "").

Когда пригодится

white_bot: true поможет бэкенду узнать доверенный запрос и не заблокировать его, даже если остальные признаки выглядят подозрительными.

Пример

Ваши разработчики тестируют регистрацию на сайте. Они отправляют формы, держа открытыми инструменты разработчика (DevTools) в браузере. Из-за DevTools DFP может присвоить их запросам высокий bot_score, а ваш бэкенд в результате — принять за ботов и заблокировать.

Чтобы избежать проблемы, вы передали нам IP-адреса разработчиков. Теперь для запросов с них DFP возвращает white_bot: true. По этому признаку ваш бэкенд узнаёт доверенный трафик и пропускает его, несмотря на высокий bot_score.