Tracker Colpirio – zpětná analýza

big_brother

V této analýze se podrobně podíváme na praktiky trackeru Colpirio, na který jsem byl od několika společností upozorněn, že se jim zdá podezřelý. Podíváme se tedy, jak se přesně tracker Colpiria chová, co se uvnitř děje, kam se co posílá a tak. Také se dozvíme, proč si myslím, že by se mu měla každá společnost obloukem vyhnout, pokud to se svými zákazníky myslí vážně.

Colpirio slibuje

Real-time multichannel behaviorální cílení
Lepší výkon reklamních kampaní a personalizovaného doporučování produktů

Dále:

Zvyšte výkonnost vašich kampaní, perzonalizujte vaši nabídku a zvyšte váš obrat. Využijte Colpirio, nástroj pro behaviorální cílení a doporučování produktů založený na strojovém učením a prediktivní analytice.

A jak to funguje?

Colpirio využívá unikátní technologii umělé inteligence (AI) a analýzu dat o chování, zájmech a potřebách uživatelů získavaných na webech a od dalších on-line i off-line partnerů, pro efektivnější cílení marketingových kampaní v realném čase.

Další povídky o dokonalosti systému si přečtete na jejich webu.

K započetí tohoto AI Affiliate kouzla stačí jediné. Vložit si na stránky kouzelný script.

Loader

Návod na instalaci je poměrně strohý. Prostě si na stránky máme vložit tento kód a máme hotovo.

(function() { 
  var vt = document.createElement('script'); vt.type = 'text/javascript'; vt.async = true; vt.defer = true; 
      vt.src = 'https://CLIENT-ID.vivtracking.com/vivtracking.js'; var s = document.getElementsByTagName('script')[0]; 
      s.parentNode.insertBefore(vt, s); 
})();

O co se jedná? Je to úplně běžný asynchronní loader scriptů. Podíváme se tedy, co nám načítá z domény https://CLIENT-ID.vivtracking.com/vivtracking.js

Co je vivtracking.com za doménu?

Mrknem na WHOIS.

Doména je registrovaná na Roberta Studeného a společnost Robert Studený. Z Linked IN se pak dozvíme, že se jedná o „VIVnetworks.com is a leader of affiliate in the Czech Republic and Slovakia. Represents tin CZ, SK, HU and PL greatest technology in the world, CJ Affiliate by Conversant (cj.com).“

Takže co je VIV Networks?

Největší affiliate síť v ČR a SR – Výkonnostní kanál Affiliate marketing. CEO Vladan Hejnic.

To vypadá jako Commission Junction. A tradá… Stránka, jak otestovat funkčnost linku, je moc užitečná. Dozvídáme se zde toto:

CJ doména může mít tyto tvary: jdoqocy, anrdoezrs, kqzyfj, tkqlhce, dpbolvw, kdukvh. PID je číslo Vašeho webu a číslo reklamního formátu.

Co to je za domény?

  • kdukvh.com – Conversant LLC, Westlake Village United States
  • jdoqocy.com – ValueClick – valueclick.com – Westlake Village United States |  Conversant Group – http://www.conversantmedia.com/
  • anrdoezrs.com – HugeDomains.com – Denver United States
  • kqzyfj.com – ValueClick
  • tkqlhce.com – ValueClick
  • dpbolvw.com – Contact Privacy Inc. Customer 0139662590 – Toronto – Canada

Všechny domény jsou registrovány na velké společnosti zabývající se nákupem domén, které zde zjevně figurují jako anonymizační prvek, pokud by někdo chtěl rozklíčovat, komu domény patří a k jaké trackovací technologii přísluší.

K tomu nahrává i fakt, že názvy jsou zcela neurčité a je jich několik. K tomu mohou vést primárně dva důvody. 1) společnost tak aktivně bojuje proti blokátorům trackování a reklamy, 2) snaží se odvést pozornost od své identity.

Další loader

Po načtení scriptu z prvního loaderu se nám objeví hned další krátký script.

var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
g.type='text/javascript'; g.async=true; g.defer=true; g.src='https://cdn.feynmanhopeful.eu/dmt-viv.min.js'; s.parentNode.insertBefore(g,s);

var VIVtrackingQueue = function () {
    this.push = function () {
        for (var i = 0; i < arguments.length; i++) try {
            if (typeof arguments[i] === "function") arguments[i]();
            else {
                // get tracker function from arguments[i][0]
                // get tracker function arguments from arguments[i].slice(1)
                // call it!  trackers[arguments[i][0]].apply(trackers, arguments[i].slice(1));
            }
        } catch (e) {}
    }
};

// get the existing VIVtracking array
var _oldVIVtracking = window.VIVtracking;

// create a new VIVtracking object
window.VIVtracking = new VIVtrackingQueue();

// execute all of the queued up events - apply() turns the array entries into individual arguments
window.VIVtracking.push.apply(window.VIVtracking, _oldVIVtracking);

To už je velmi zajímavé.  Máme tady další asynchronní loader a nějaký bonus, který integruje datové vrstvy Commission Junction (VIVtracking). Co to tedy načítáme z https://cdn.feynmanhopeful.eu/dmt-viv.min.js ? 82967 bajtů komprimovaného kódu. To je asi 60 stránek textu. Taková střední bakalářka.

Co je feynmanhopeful.eu za doménu?

Mrknem se na WHOIS.

Doména je registrovaná na společnost Ascio Technologies Inc. (Ascio is a subsidiary of Group NBT plc., a leading Domain Management Company in the United Kingdom.) To není příliš zajímavé, opět nějaká dummy 3rd part společnost.

Registrátorem je však Jan Janca ze společnosti CognitoCZ s.r.o. – Congito je nějaká agentura na weby (Cognito je mladou společností s dlouhou historií. bla bla…).

Nameservery jsou u active24.cz takže servery budou taky v CZ.

Všechno je to tedy české, pak jen nechápu tu skrývačku za feynmanhopeful.eu. To mi připomíná Richarda Feynmana, ale že by dělal CDNky? Ani google o Feynmanových CDN nic neví. Škoda, mohli jsme se něco přiučit.

Co je zač ta 82967 bajtů dlouhá knihovna?

Největší část knihovny zabírá Tracker Piwiku. Piwik je Open-Source analytický nástroj, který sám o sobě nědělá nic zlého, nikdy bych jej nepodezříval z něčeho nekalého a je zde pravděpodobně v roli trackeru pro Colpirio.

Ta zajímavá část kódu je až ke konci scriptu a jmenuje se DeepMind (neplést s DeepMind od google pro znetvořené obrázky).

Přes JS beautifier dělám knihovnu trochu čitelnější a jdu si číst. Kdyby se někdo chtěl také začíst, stáhněte si svoji, nebo si stáhněte tu, nad kterou dělám tuto analýzu (colpirio_tracker.js).

Zajímavé adresy ve scriptu:

function n() {
    t.apply(this, arguments),
    this.tracking_domains = ["www.kdukvh.com"], this.tracking_path = "/tags/c?",
    this.retargeting_domains = ["www.lduhtrp.net", "www.tqlkg.com", "www.awltovhc.com", "www.ftjcfx.com"],
    this.retargeting_path = "/tags/r?", this.cache = []
}
  • www.kdukvh.com – ValueClick – valueclick.com – Westlake Village United States |  Conversant Group – http://www.conversantmedia.com/
  • www.lduhtrp.net – ValueClick
  • www.tqlkg.com – ValueClick
  • www.awltovhc.com – ValueClick
  • www.ftjcfx.com – ValueClick

To vypadá na Commission Junction adresy.

DeepMind – Analýza scriptů a trafficu

Zkusíme si tedy cvičně projet pár webů, které Colpirio používají. Začneme jedním nejmenovaným českým e-shopem, který scripty od Colpiria má. Má dokonce i Commission Junction, takže tu těch dat uvidíme pravděpodobně více. Co se týče integrace CJ a Colpirio, ta je přiznaná (někde jsem to četl, teď to nemůžu dohledat). Nechci být zbytečně ofenzivní, když to není relevantní.

Tak jedem, načítám e-shop.

Výstup z console Firebugu

Doména feynmanhopeful.eu se nám tu už objevila, ale data jsme tahali ze subdomény cdn.feynmanhopeful.eu.

Subdoména tr.feynmanhopeful.eu si přímo řiká, že by mohla být TR jako tracker a trackery obvykle sbírají data.

console_log_tr.feynman

Výstup z Charlese – tr.feynmanhopeful.eu

Zapínám Charles Web Debugging Proxy a začinám analyzovat traffic mezi webem a servery.

Pilulka.cz & kasa.cz

Parametry OAMT, AMT, ITEM, atd. náramně připomínají implementaci konverzního scriptu Commission Junction z adresy www.kdukvh.com. Signál vypadá nějak takto:

https://www.kdukvh.com/tags/c?containerTagId=XXXX&OID=90287XX3&ITEM1=811500&AMT1=240&QTY1=1&ITEM2=836664&AMT2=8264&QTY2=1&SKU=811500,836664&PRQTY=1,1&OAMT=8504&CID=1536201&TYPE=382667&CURRENCY=CZK&&nbsp;

Takže tady detekujeme Commission Junction a vyhýbáme se webům pilulka.cz a kasa.cz
(-1 === [„www.pilulka.cz“, „www.kasa.cz“].indexOf(window.location.hostname).

Vzhledem k tomu, jak je Colpirio i CJ veliké mi takovýto exclude v obecných scriptech přijde velmi prominentní. Toto totiž nejsou unikátní scripty pro Pilulku či Kasu, ale pro celou infrastrukturu Colpiria.

 if ("OID" in i && -1 === ["www.pilulka.cz", "www.kasa.cz"].indexOf(window.location.hostname)) {
    var r = 0,
        o = [];
    for (var a in i) {
        var s = a.match(/ITEM(\d+)/);
        if (null != s) {
            var c = s[1];
            o.push(i["ITEM" + c]), t.push(["addEcommerceItem", i["ITEM" + c].toString().toLowerCase(), !1, !1, parseFloat(i["AMT" + c]), parseInt(i["QTY" + c])]), r += parseFloat(i["AMT" + c]) * parseInt(i["QTY" + c])
        }
    }
    o.length < 1 && "SKU" in i && (o = i.SKU.split(",")), t.push(["trackEcommerceOrder", i.OID, "OAMT" in i ? parseFloat(i.OAMT) : r]), t.push(["trackEvent", "Ecommerce", "Order", "Create", {
        order: i.OID,
        items: o.map(e.Utils.toLowerCase)
    }])

Dá se tedy předpokládat, že když se neozvete, budou vás trackovat, nicméně nejspíš existuje možnost, jak se tomu vyhnout.

Bata.cz

Ve scriptu je speciálně zmíněna doména bata.cz. A articleID je ID produktu (artiklu v terminologii bata.cz). Takže lze předpokládat, že script speciálně hledá ID bot.

case "purchase":
    if (n.transactionId) {
        var a = n.ecomm_prodid || [];
        if (void 0 !== n.transactionProducts)
            for (var s = 0, c = n.transactionProducts; s < c.length; s++) {
                var u = c[s];
                void 0 !== u.articleId && "www.bata.cz" === window.location.hostname ? a.push(u.articleId) : void 0 !== u.sku && a.push(u.sku)
            }
        t.push(["trackEvent", "Ecommerce", "Order", "Create", {
            order: n.transactionId,
            items: a.map(e.Utils.toLowerCase)
        }])
    }

Opět, nevím, zda integrace je legitimní dohodou mezi Colpirio a Bata. Pokud není, zavání to levárnou.

Ale račme si povšimnout krásné URL adresy:

https://tr.feynmanhopeful.eu/ecommerceproductview

{
    "pageview": 14728XXX0,
    "timestamp": 14728XX1,
    "useragent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0",
    "referrer": "",
    "url": "http://www.bata.cz/web/kategorie/web-katalog-cz-muzi/689367-caterpillar",
    "PWID": "31e0bc2ce1XXXX",
    "BBID": "BBID-01-00601858XXXX",
    "value": {
        "item": "689367",
        "price": 2379,
        "brand": "CATERPILLAR",
        "category": "Muži"
    }
}

Že já to zrovna koukám na boty….

colpir_ecommerce

https://tr.feynmanhopeful.eu/trackercommisionjunctionurl

{
    "pageview": 1472800000,
    "timestamp": 1472838944,
    "useragent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0",
    "referrer": "https://www.XXXX.cz/kosik",
    "url": "https://www.XXXX.cz/",
    "PWID": "01f7d5f4422XXXXX",
    "BBID": "BBID-01-00601858994XXXXX",
    "value": "https://www.awltovhc.com/tags/r?containerTagId=XXXX"
}

To je nejspíše ta integrace s Commission Junction.

https://tr.feynmanhopeful.eu/trackerbillboardid

{
    "pageview": 1472840363,
    "timestamp": 1472842546,
    "useragent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0",
    "referrer": "https://www.XXXX.cz/",
    "url": "https://wwwXXXXXXXorest",
    "PWID": "01f7d5f442XXXX",
    "BBID": "BBID-01-0060185899XXXX",
    "value": "BBID-01-006018589XXX"
}

Tady celkem nic zajímavého. Integrace s iBillboardem je také součástí trojčlenky Colpiria, tedy VIV, iBillBoard a nějaké to strojové učení.

https://tr.feynmanhopeful.eu/customdata

{
    "pageview": 1472841364,
    "timestamp": 1472842547,
    "useragent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0",
    "referrer": "https://www.XXXXXXX.cz/",
    "url": "https://www.XXXXXXXXXX",
    "PWID": "01f7d5f442XXXXX",
    "BBID": "BBID-01-006018XXXXX",
    "data": {
        "dataLayer": {
            "cj_extended": true,
            "traffic": {
                "channelName": "Product Detail",
                "channelFlag": "detail"
            }
        }
    }
}

Customdata zní dost dobře a obsah je mnohem zajímavější. To, co je obsahem objektu data je google_tag_manager dataLayer a jsem si pekelně jistý, že daný e-shop tato data Colpiriu dobrovolně a vědomě neposkytuje.

Takže jestli jsem do teď měl jen podezření, že Colpirio krade data, tak tady mám důkaz. Teď už jen pojďme rozkrýt, kolik si toho z webů bere, aniž by o tom jeho provozovatelé pravděpodobně vůbec věděli.

google_tag_manager – dataLayer

Ve scriptu je tato část. Zjevně kopíruje celý obsah dataLayeru.

inspectDataLayer = function(e) {
    for (var t = window.dataLayer || [], n = this.lastId; n < t.length; n++) {
        this.lastId = n;
        var i = t[n];
        e.push(["trackData", "dataLayer", i]);
        try {
            this.analyzeData(e, i)
        } catch (r) {
            console.log(r)
        }
    }
    if (this.lastId = n, this.gtp && void 0 !== window.google_tag_params) {
        this.gtp = !1;
        var i = {
            google_tag_params: window.google_tag_params
        };
        this.analyzeData(e, i)
    }
}

Takže třeba tohle:

"data": {
"dataLayer": {
	"event": "productDetail",
	"ecommerce": {
		"detail": {
			"products": [{
			"id": "93XXX78",
			"name": "JetXXXXXest",
			"price": "3059",
			"category": "Sport, outdoor/Camping, outdoor/Vařiče, nádobí/Vařiče, náplně/Plynové vařiče",
			"brand": "Jetboil",
			"variant": "931278",
			"quantity": 1,
			"dimension32": "3100",
			"dimension38": "NEW",
			"dimension39": "avail_stock",
			"dimension37": "9",
			"dimension36": "3397",
			"dimension51": "2528",
			"dimension52": "21",
			"dimension49": "NA179",
			"dimension47": "NA",
			"dimension48": "Sport, outdoor",
			"dimension50": "Plynové vařiče"
			}]
		}
	}
}
}

Co takhle data o způsobu dodání a platbě? Není problém.

"productHit": {
	"paymentMethod": "Online Payment",
	"shippingMethod": "Marketplace",
	"shippingPlan": "separately",
	"shippingPlanStructure": "Express Delivery,Marketplace",
	"shippingPlanTime": "4,5"
}

Trackování událostí po kliknutí na formulářové pole, taky není problém, což dokazuje, že si Colpirio nastavuje nějaké eventListenery a trackuje i uživatelské interakce.

"data": {
	"dataLayer": {
		"event": "eventFire",
		"eventCategory": "Form errors in checkout process",
		"eventAction": "(3)Adresa - shipping-firstname",
		"eventLabel": "unknown",
		"eventValue": 1,
		"eventNonInteractionFlag": true
	}
}

Commission Junction Event

"payload": {
		"e_c": "Tracker",
		"e_a": "CommisionJunction",
		"e_n": "Url",
		"e_v": "https://www.awltovhc.com/tags/r?containerTagId=XXXXX&SKU=931278&PRICE=2528&CATID=NA179&CATEGORY=Plynov%C3%A9%20va%C5%99i%C4%8De&BRAND=Jetboil",
		"idsite": "-1",
		"rec": "1",
		"r": "666401",
		"h": "20",
		"m": "36",
		"s": "5",
		"url": "httXXXXXXXXrest",
		"urlref": "XXXXXXX",
		"_id": "f2c9e421520XXXXd",
		"_idts": "1465209142",
		"_idvc": "1",
		"_idn": "0",
		"_refts": "0",
		"_viewts": "1472838911",
		"send_image": "0",
		"pdf": "0",
		"qt": "0",
		"realp": "0",
		"wma": "0",
		"dir": "0",
		"fla": "1",
		"java": "0",
		"gears": "0",
		"ag": "0",
		"cookie": "1",
		"res": "1024x768",
		"cvar": "{\"2\":[\"CJURL\",\"https://www.awltovhc.com/tags/r?containerTagId=XXXXX&SKU=931278&PRICE=2528&CATID=NA179&CATEGORY=Plynov%C3%A9%20va%C5%99i%C4%8De&BRAND=Jetboil\"],\"3\":[\"_pks\",\"931278\"],\"4\":[\"_pkn\",\"\"],\"5\":[\"_pkc\",\"Plynové vařiče\"]}",
		"gt_ms": "1035"
	}
}

Stash – řekni kde ta data jsou?

Kde si script posbíraná data ukládá? Skutečně v útrobách Piwiku. Konkrétně v objektu   window[„_dmt“].plugins   kde je v jednom poli convertPiwikToLogger = true, ale také mnohem zajímavější objekt stash.

colpirio_stash

iBillboard

Ještě se ze scriptu Colpiria přinačítá zajímavý script z adresy http://bbcdn-bbnaut.ibillboard.com/library/bbnaut-core-1.7.6.min.js (bbnaut-lib-1.7.6.min) a (bbnaut-core-1.7.6.min)

/*!
 * BBnaut v1.7.6
 * 2015-11-27
 * Internet Billboard a.s.
 * miza
 */
! function(a, b) {
    var c = function(a) {
            var b = (a.location && "https:" == a.location.protocol ? "https:" : "http:") + "//";
            return {
                bn002: "ibbid",
                CPEX_KEY: "cpex2ibb",
                bn003: "BBID-00-00000000000000000",
                bn004: b + "bbcdn-bbnaut.ibillboard.com/library/bbnaut-lib-1.7.6.min.js",
                bn005: [],
                bn006: "bbnaut_debug"
            }
        },
        d = function(a, b) {
            return {
                bn007: function(a, b) {
                    if ("string" == typeof b)
                        for (var c = a + "=", d = b.split(/[;&]/), e = 0; e < d.length; e++) {
                            for (var f = d[e];
                                " " == f.charAt(0);) f = f.substring(1, f.length);
                            if (0 == f.indexOf(c)) return f.substring(c.length, f.length)
                        }
                },
                bn008: function(a) {
                    b.write('<script type="text/javascript" src="' + a + '"></script>')
                },
                bn017: function(a) {
                    var c = b.createElement("script");
                    c.type = "text/javascript", c.async = !0, c.src = a;
                    var d = b.getElementsByTagName("script")[0];
                    d.parentNode.insertBefore(c, d)
                },
                bn009: function(b) {
                    a.console && a.console.info(b)
                }
            }
        },
        e = function(a, b, c, d) {
            return {
                bn011: function() {
                    return d.bn007(c.bn002, b.cookie)
                },
                bn016: function(a) {
                    return d.bn007(a, b.cookie)
                },
                bn012: function() {
                    try {
                        if (a.localStorage) return a.localStorage.getItem(c.bn002)
                    } catch (b) {}
                },
                bn013: function() {
                    try {
                        if (a.sessionStorage) return a.sessionStorage.getItem(c.bn002)
                    } catch (b) {}
                },
                bn014: function() {
                    try {
                        return d.bn007(c.bn002, a.name)
                    } catch (b) {}
                }
            }
        },
        f = function(a, b, c, d) {
            return {
                bn015: function() {
                    if (!a.bbnautLib || !a.bbnautLib.getId) {
                        for (var e = !0, f = 0; f < b.bn005.length; ++f)
                            if (a.location.host.indexOf(b.bn005[f]) >= 0) {
                                e = !1;
                                break
                            }
                        e && (a.bbnautLibAsync ? c.bn017(b.bn004) : c.bn008(b.bn004));
                        var g = function() {
                                var e, f, g, h, i = [d.bn011(), d.bn012(), d.bn013(), d.bn014()],
                                    j = !1,
                                    k = Number.MAX_VALUE;
                                a.location.hash.indexOf(b.bn006) >= 0 && c.bn009(i);
                                for (var l = 0; l < i.length; l++) f = i[l], "string" == typeof f && 25 === f.length && f.match(/BBID-([\d]{2})-([\d]{17})/) && (h = parseInt(f.substr(5, 2), 10), g = parseInt(f.substr(8, 17), 10), !isNaN(h) && !isNaN(g) && k > g && (h > 0 ? (e = f, k = g) : j = !0));
                                return !e && j && (e = b.bn003), e
                            }(),
                            h = function() {
                                var a = d.bn016(b.CPEX_KEY);
                                return a
                            }();
                        a.bbnautLib = a.bbnautLib || {}, a.bbnautLib.getId = function() {
                            return g
                        }, a.bbnautLib.getCpexProfile = function() {
                            return h
                        }, a.bbnautLib.setId = function(a) {
                            this._setValue = a
                        }
                    }
                }
            }
        },
        g = c(b),
        h = d(b, a),
        i = e(b, a, g, h),
        j = f(b, g, h, i);
    j.bn015()
}(document, window);

Co tu dělá CPEX?

Zde je zajímavé klíčové slovo CPEX, nebo-li Czech Publisher EXchange, což je největší česká exchange platforma. Zajímavé je to i proto, že tracker pro CPEX jsem psal já (2014-2016). A taky proto, že za CPEX stojí Matěj Novák a jeho síť je seriozní záležitost.

No a když zde vidím funkce a hodnoty jako:

  • getCpexProfile()
  • CPEX_KEY: „cpex2ibb“
  • localStorage ibbid

Nutí mě to prozkoumat více.

Abych nerozkrýval legitimní integraci, zavolal jsem Matějovi, abych se ujistil, že iBillboard, Colpirio či VIVNetworks nejsou partneři. Není překvapení, že nejsou. Naopak, jsou si přímými konkurenty. Takže mám podezření, že se jedná o špehovačku konkurence. Nemám pro to však důkaz fungující v praxi. Přes veškeré snahy se mi nepodařilo odchytit žádný závadný traffic.

Jak u tohoto pokračovat? Prvně zjistit, co znamená to profile.

  • Je to demdex cookie?
  • Je to ID publishera?
  • Je to nějaké RTB id?

Update od Matěje Nováka:

cpex2ibb je cookie, kterou předáváme informace o segmentech iBillboardu pro účely cílení reklamy na webech zapojených médií; iBillboard by ji měl používat jen pro ta média; může být, že ten kód je v pořádku, protože je to obecný kód nějaké jejich knihovny a jenom tam „zbyl“, pokud ale data z této cookie posílají kamkoliv jinam než do adserveru iBB, kde je využívají pro konkrétního publishera, je to zlodějina;

Jak už jsem psal v výše, nepodařilo se mi prokázat, že by se tato informace posílala někam jinam, takže se zde jedná nejspíše o korektně použitou integraci.

Economia (centrum.cz, aktualne.cz, volny.cz, etc…)

Mezi další, za pozornost stojící, kousky kódu patří plugin scriptu Colpiria jménem Economia. Už z jeho definice je zřejmé, že jeho jediným úkolem je číst cookie s jménem tracking-uid, které má mateřskou doménu centrum.cz, ale pravděpodobně bude sloužit k synchornizaci uživatelů napříč celým mediálním domem. Takže bude pravděpodobně přítomné i na jiných webech pod Economia.

var DeepMind;
! function(e) {
    var t;
    ! function(t) {
        var n = function(t) {
            function n() {
                t.apply(this, arguments), this.cname = "tracking-uid"
            }
            return __extends(n, t), n.prototype.register = function(e) {
                this.fetcher(e)
            }, n.prototype.fetcher = function(t) {
                var n = this,
                    i = e.Utils.getCookie(this.cname);
                return "" !== i ? void t.push(["trackData", "economia_uid", i]) : void setTimeout(function() {
                    return n.fetcher(t)
                }, 1500)
            }, n
        }(e.Plugin);
        t.Economia = n
    }(t = e.Sites || (e.Sites = {}))
}(DeepMind || (DeepMind = {}))

 https://tr.feynmanhopeful.eu/customdata

{
	"pageview": 1472851748,
	"timestamp": 1472XXXX,
	"useragent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0",
	"referrer": "",
	"url": "https://www.centrum.cz/",
	"PWID": "9023b2e781eXXXX",
	"BBID": "BBID-01-00601858994XXXXX",
	"data": {
		"economia_uid": "E1OWCXXXX"
	}
}

Zde je v komunikaci na server vidět parametr economia_uid, který odpovídá tracking-uid a to je i hodntoa v mé cookie.

tracking_uid_2

Opět ale nevím, zda se jedná o dohodu mezi Economia a Colpirio. Pokud ano, je vše v naprostém pořádku. Pokud ne, pak nám tady tracker sprostě krade.

Abych otestoval toto, musel jsem upravit jejich aktuální produkční tracker, jelikož obsahuje chybu. Musel jsem tedy použít verzi se zakomentovanou část na loupení dataLayeru. (dmt_viv-deobfuscated-original-2016-09-02) a (dmt_viv-deobfuscated-commented-bug-2016-09-02)

Update:

Zde mi bylo potvrzeno, že Centrum má s Colpirio podepsanou smlouvu o využívání těchto dat pro potřeby zlepšování personalizovaného obsahu návštěvníkům centrum.cz. Akorát jsem na to narazil asi týden před tím, než to šlo do produkce. Co se člověk nedozví, když se hrabe v cizím kódu. Takže i zde je to v pořádku.

Plýtvání zdroji

Co mi ještě velmi vadí na tomto trackeru je jeho nehorázná nespodárnost. Na jednom eshopu mi ihned po onloadu vygeneroval téměř 200 HTTP requestů na své trackovací servery. Celkový processing time 6000 milisekund. Takže vy investujete statisíce/miliony do odladěného eshopu aby se načítal do pár sekund a pak si tam mrsknete Affiliate script, co vám přidá 6 sekund jen tak gratis. Ideálně ještě na mobilních datech. OK, netvrdím, že mám nejrychlejěí počítač na planetě. Ale stejně je to bída.

feyman_172requests

Nutno ovšem dodat, že se jednalo o ojedinělý případ a nelze tento nález generalizovat.

Závěrem

České Colpirio jede velmi agresivní způsob sběru dat a osobně si myslím, že je hodně přes čáru.

Především mi vadí automatické vykrádání dataLayeru od Google Tag Manageru. Často je dataLayer využíván i pro interní funkce webu jako datový HUB a někteří vývojáři nepočítají s tím, že se celý dataLayer bude posílat na cizí servery k nějaké analýze. Mohou tak unikat data, která měla zůstat soukromá. Nelze tvrdit, že Colpirio data zneužívá, ale mohlo by bez mrknutí oka.

Dále jsou podezřelé trackovací domény registrované na nicneříkající společnosti v Americe a Kanadě. Na první pohled není u Colpiria zřejmé, čím se vůbec zabývá a že je to Česká a Slovenská služba. Vůbec se při těchto praktikách nedivím stále větší oblibě blokátorů reklamních a jiných špehovacích scriptů či přímo webových prohlížečů bojujících aktivně proti reklamě.

Mezi další nefér indikace patří sekce Naši zákazníci na http://colpirio.cz/, kde je polovina zobrazených společností přímo zapojená do vývoje systému Colpiria. Tudíž nejsou zákazníci, ale tvůrci. Přijde mi to jako takový jánabráchysmus. Jmenované společnosti jsou: VIVnetworks (že by poskytovatel VIVtrackeru?), iBillBoard (už vím, článek na ihnedu a taky to byly ty scritpy na detekci CPEX), VIVmail (tady byl pan Hejnic též spoluzakladatelem, takže ruka ruku myje), Cognito (kdo že to registroval ty domény…)

Dalším problémem u takto komplexního trackeru je absence opt-out z trackingu, což může souviset s tím množstvím divných domén (takže to považuji za záměr).

Na všem, co jsem nalezl, nemusí být formálně/právně nic špatně a dá se předpokládat, že všechny zmíněné nálezy mají smluvně ošetřené, ale slušná praxe je na míle daleko od toho, co Colpirio předvádí.

Celkově se jedná se o nejpodezřelejší tracker, se kterým jsem se veřejně setkal.

 

2 komentáře: „Tracker Colpirio – zpětná analýza

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *

Tato stránka používá Akismet k omezení spamu. Podívejte se, jak vaše data z komentářů zpracováváme..