Pornhub обходить блокувальники реклами з допомогою вебсокетов



Інженер з компанії BugReplay знайшов відмінний спосіб продемонструвати, як працює його сервіс екрана з записом мережевого трафіку і демонстрацією помилок, в тому числі WebSockets і JavaScript. Він записав скрінкасти завантаження Pornhub з відображенням лода трафіку, який синхронізований з відео. Так от, на цій демонстрації відмінно видно, яким чином Pornhub обходить блокувальники реклами і пропихає рекламу з допомогою вебсокетов.

Pornhub працює дуже грамотно. Коли ви заходите на сайт, він перевіряє наявність блокувальника. Якщо такий виявлений, то сайт відкриває нове з'єднання WebSocket, яке діє в якості резервного механізму доставки реклами.

скринкасте з мережевим логом можна побачити безліч запитів, які заблокував uBlock Origin. Вони позначені як Failed в мережевому трафіку.

http://cdn1b.static.pornhub.phncdn.com/www-static/js/ph-tracking.js?cache=2016102525
 
GET Failed
 

 
https://media.trafficjunky.net/js/holiday-promo.js
 
GET Failed
 

 
http://www.google-analytics.com/analytics.js
 
GET Failed
 

 
http://ss.phncdn.com/iframe-1.1.3.html
 
GET Failed
 

 
http://ss.phncdn.com/iframe-1.1.3.html
 
GET Failed
 

 
http://engine.phn.doublepimp.com/Tag.engine?time=240&id=7129f320-ce21-4b40-9d7e-37b1df8cf8f0&rand=25334&ver=async&referrerUrl=&fingerPrint=123&abr=false&stdTime=-300&fpe=3&bw=1262&bh=636&res=1280x800
 
GET Failed
 

 
http://electosake.com/240/7129f320-ce21-4b40-9d7e-37b1df8cf8f0/82615/asynch/null/123/null/true/-300/3/1262/636/Tag.a1b
 
GET Failed
 

 
https://www.etahub.com/trackn?app_id=971&product_name=2&category=connectTime&action=other&label=&value=116
 
GET Failed
 

 
https://www.etahub.com/trackn?app_id=971&product_name=2&category=ttfb&action=other&label=&value=799
 
GET Failed
 

 
https://www.etahub.com/trackn?app_id=971&product_name=2&category=redirectTime&action=other&label=&value=0
 
GET Failed
 

 
https://www.etahub.com/trackn?app_id=971&product_name=2&category=domInteractive&action=other&label=&value=1659
 
GET Failed
 

 
https://www.etahub.com/trackn?app_id=971&product_name=2&category=domComplete&action=other&label=&value=1829
 
GET Failed
 

 
https://www.etahub.com/trackn?app_id=971&product_name=2&category=domContentLoadedEventEnd&action=other&label=&value=1710
 
GET Failed
 

 
https://www.etahub.com/trackn?app_id=971&product_name=2&category=loadEventEnd&action=other&label=&value=1850
 
GET Failed


При натисканні на запит відображаються подробиці. Причина блокування:
net::ERR_BLOCKED_BY_CLIENT
. Така помилка виникає, коли блокувальник реклами в браузері блокує деякі Ajax-виклики (принаймні, в Chrome все працює саме так).

Відразу після повідомлення про помилку в балці ми бачимо запит на створення вебсокета і фреймів, на який у підсумку отримано позитивну відповідь.

ws://ws.adspayformy.site./nsoj
 
webSocketCreate
 

 
ws://ws.adspayformy.site./nsoj
 
webSocketFrameSent
 

 
ws://ws.adspayformy.site./nsoj
 
webSocketFrameReceived


Немов вибачаючись перед користувачами, Pornhub використовує для створення вебсокета домен adspayformy.site. Жарт явно націлена на тих, хто використовує блокувальники реклами.

Після завантаження вебсокета створюється кадр, куди завантажується закодований JSON-контент для кожного місця на сторінці, де має бути рекламний банер.

{
 
"zone_id": 32,
 
"link": "http://cp.pleasedontslaymy.download/_z/eyJj...In19",
 
"media_type": "image",
 
"media_encoding": 0,
 
"img_data": "/9j/4QA.....Wh+n//2Q==",
 
"img_type": "image/jpeg"
 
}


В даному випадку вказаний
zone_id
32, який вказує на місце для впровадження реклами. Зазвичай туди вставляється відео, але в даному прикладі це графічний банер, що зазначено в
media_type
. Контент кодується в base64 і відновлюється в браузері у відповідності зі схемою data: URL (або data: URI), яка підтримується практично всіма сучасними браузерами. На і потім у цю схему передаються дані позначені як
image/jpeg
.

Блокувальники реклами зазвичай відстежують вебсокеты, тому кодування даних в base64 – теж грамотний крок.

Зрозуміло, після розкриття брудних методів Pornhub довго музика грати не буде. Вже 25 жовтня один з розробників в співтоваристві Chromium під ніком pkalinnikov запропонував патч, за допомогою якого в браузері з'явиться можливість блокувати вебсокеты через webRequest API. Якщо патч приймуть, то блокувальники реклами зможуть спокійно реалізувати нормальний спосіб блокування таких хаків в Chrome, ну а власникам Pornhub доведеться шукати нові трюки у вічній боротьбі з блокувальниками, яка ніколи не припиниться.

Після виходу публикации від розробника BugReplay з'ясувалося, що деякі блокувальники реклами навчилися блокувати вебсокеты виявляли у своєму житті таку тих, що використовує Pornhub. Принаймні, вебсокет вже не пролазить через uBlock Origin (відповідний тікет) і AdBlock Plus (тікет). А ось блокувальник AdBlock і деякі інші поки не оновилися.

Історія з «багом» Chrome webRequest API, який не дозволяє перехоплювати запити WebSocket (тікет 129353) дуже цікава. Цей тікет відкритий ще в травні 2012 року. І до цих пір залишається відкритим. Обговорення тривало дуже довго. Користувачі скаржилися в обговоренні, що з-за неможливості блокувати вебсокеты сайти можуть відносно просто обходити блокувальники реклами. Адже якщо блокувальник не відстежує вебсокеты через стандартні API, то для блокування такої реклами потрібно шукати дуже важкі обхідні шляхи. У перший час це була суто теоретична проблема. Начебто у 2012 році жоден сайт не використовував такі методи обходу блокувальників реклами, так і самі блокувальники були в той час не настільки популярні, як зараз.

Ситуація змінилася в 2015 і 2016 році. Зараз Pornhub не єдиний сайт, який додумався до такого хака. Що найцікавіше, в обговоренні тікета Chromium в серпні 2016 року виступив один з розробників. Він переконливо пояснював, що блокувальники реклами намагаються переписувати вміст вебсокетов — і це реально загрожує безпеці користувачів, тому що ламає базову функціональність Javascript. Тобто впроваджувати цей патч — значить, жертвувати безпекою. Все б нічого, але цей розробник routeh...@gmail.com працює в компанії MindGeek, якій належить сайт Pornhub, і рекламна мережа By Traffic Наркоман, яка постачає туди рекламу. До речі, аналогічні трюки з обходу блокувальників реклами діють не тільки на Pornhub, але й на інших сайтах компанії MindGeek.

Схоже на те, що в порнокомпаниях працюють досить просунуті програмісти. Як відомо з історії, саме порноіндустрія часто рухала вперед технологічний прогрес. Виявляється, і зараз вони дещо випереджають всіх інших. Хоча б у найбільш інноваційні методи обходу блокувальників реклами. Правда, в тому ж обговоренні в трекері Chomium повідомляли, що трюк з вебсокетами застосовують і деякі інші рекламні мережі, згадувалася якась мережа RevDefender.

Побажаємо удачі товаришеві pkalinnikov, щоб його патч прийняли в кодову базу Chromium. Судячи з усього, це один з провідних розробників Chromium, так що довіримось його авторитет.
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.