Nov. 14th, 2018

henry_flower: A melancholy wolf (Default)

Притча про те, як робити не треба.

The Verge (Manhattan, NYC) is an American technology news/media network operated by Vox Media. Alexa rank (Sep 2018): 576.

На уйоб сайті theverge.com, якщо зайти 1й раз, коли cookies для їх домейну ще немає, вони показують чималенький банер "We use cookies..." зі кнопкою "I Accept."

Але, якщо у вас є блокувальник реклами, то після жмакання на зе кнопку, банер нікуди не подінеться, а на кнопці з'явиться безкінечний спінер.

Релевантні шматки onclick колбеку:

var pickup = document.querySelector('#phonograph-pickup');
pickup.async = true;
pickup.onload = addCallback(function() {
  phonographEvents.push(['privacy_consent', {
    token: token, geoip_continent: continentCode[1], callback: done
  }]);
})
pickup.src = pickup.getAttribute('data-src');

Де #phonograph-pickup це:

<script data-src="https://phonograph2.voxmedia.com/pickup.js?v=1529075019264"
        id="phonograph-pickup"></script>

EasyPrivacy список має ||voxmedia.com/pickup.js рядок, тому UO блокує завантаження зе скрипта (який є на диво не obfuscated).

Зі зе сніпету є геть незрозумілим як вони намагаються банера приховати, навіть якщо би заблокований скрипта завантажився. phonographEvents це є просто array, done то є посилання на хфункцію яка робить повний location.reload().

А намагаються вони зробити ось таке: pickup.js створює таймер, який безкінечно кожні 300 мс шкутильгає по phonographEvents, щоб зробити POST запит зі даними про бідосю-користувача та виконати, нарешті, колбек done:

while (phonographEvents.length) {
  _this.send(phonographEvents.shift());
}

Як саме вони роблять POST запит, то є поезія. Ніякого fetch або XMLHttpRequest--ні! Вони створюють iframe, куди динамічно пхають хформу, на якій синтетично роблять submit.

Які дані користувача відсилаються?

buildQuery: function(event) {
  var q = {};
  q['d'] = (event.length > 1) ? JSON.stringify(event[1]) : "";
  q['e'] = event[0];
  q['uid'] = this.uuid;
  q['suid'] = this.suid;
  q['de'] = (document.characterSet || document.charset)
  q['sr'] = window.screen.width + "x" + window.screen.height
  q['vp'] = this.vpSize();
  q['ul'] = ((window.navigator.language ||
              window.navigator.browserLanguage) || "").toLowerCase();
  q['sd'] = (window.screen && window.screen.colorDepth || "") + "-bit";
  q['fl'] = this.flash();
  q['je'] = this.java();
  q['dl'] = document.location;
  q['dr'] = document.referrer;
  q['wh'] = window.location.hostname;
  q['z'] = Math.round(Math.random() * 2147483647);
  return q;
},

Менхетенські технології журналістики!

'In December 2014, Vox Media raised a $46.5 million round led by the growth equity firm General Atlantic, estimating the media company's value at around $380 million.

In August 2015, NBCUniversal made a $200 million equity investment in Vox Media, valuing the company at more than $1 billion'

(насправді, заздрю страшно)

June 2025

M T W T F S S
      1
2345678
91011 12131415
16171819202122
23242526272829
30      

Expand Cut Tags

No cut tags