Пишу свою баннерную систему с блэкджеком и дамами фривольного поведения. Встала проблема защиты от кликфрода, так что в итоге я наваял свой многоступенчатый велосипед проверок. Ясное дело, что меня не хватило на самообучающиеся алгоритмы и тонны матана и стат-анализа. А хотелось бы сделать все максимально правильно. Что можно почитать по теме хорошего?
С благодарностью принимаются ссылки на открытые движки с защитой от накрутки, хорошие статьи про многофакторные проверки и алгоритмы, клик-фродовые патенты там всякие итд итп.
Заранее спасибо. Я понимаю, что тему эту обычно не светят, и собственные разработки не показывают, но писать ведь как-то нужно :)
В данный момент:
- проверяется факт загрузки всех файлов обеспечивающих показ баннера
- проверяется время между отображением баннера и переходом по нему, время загрузки баннера
- каждый юзер получает при первом обращении метку на сутки и заносится в базу, метка эта раскладывается юзеру в куку, в локал, глобал, sql и dom стораджи, в etag
- проверяется отсутствие хедеров HTTP_VIA, HTTP_CLIENT_IP, HTTP_X_REAL_IP, HTTP_X_FORWARDED_FOR
- НЕ проверяется резолвинг айпишника так как это долго
- в фрейме, котором отображается баннер сверяются top.location в скрипте с HTTP_REFERER в php (малополезно так как для https > http не пашет)
- в конце осуществления показа баннера юзеру выдается шифрованный по ключу массив данных показа в виде токена, соответственно каждый токен уникален (в пределах погршности) и является одноразовым способом кликнуть. Тобеж не эмулировав показ клик не сделать.
- при клике все данные зашифрованные в токене снова достаются и повторно сверяются
Соответственно если у юзера найдена метка (и она есть в базе) - юзер не уникален. Если нарушена одна из проверок пересылки параметров/данных/валидности токенов - по возможности показываем баннер/делаем клик, но деньги не списываем и логируем накрутку. Если у юзера не найдена метка и ошибок в процессе показа баннера нет то пытаемся найти его в базе по IP, если находим - вешаем ему обратно все метки (кошмар, я знаю, пользователи за nat, бла бла бла, но это последняя грань защиты, что без неё делать я не знаю).