Ако ги користите Facebook и Instagram апликациите веројатно сте забележале дека линковите кои ги отворате не се отвораат во Safari или Google Chrome. Наместо во стандардните прелистувачи се отвора внатрешниот (in-app) прелистувач на Meta. Безбедносниот истражувач Феликс Краус откри дека прелистувачот инјектира JavaScript код кој на друштвената мрежа и овозможува да ги следи сите интеракции на корисникот на веб-страницата.
Instagram го додава овој код на било што ќе се отвори, без разлика дали е содржина или реклама. Инјектирање на JavaScript код овозможува следење на сите притиснати копчиња, линкови, полиња за податоци, дури и полињата за лозинки и платежни картички, за среќа pcm.js не прави сѐ од ова. Со прелистувачот Meta може да прибира податоци за корисниците, без да добие никаква дозвола од нив или од веб-страниците кои тие ги посетуваат.
Следењето го откри Феликс Краус поранешен инженер во Google. Краус го откри следењето во iOS верзиите на Facebook и Instagram. Пропустот е откриен благодарение на алатка која сам ја креирал и му овозможува да ги надгледува сите JavaScript команди од апликациите. Со нејзина помош успеал да пронајде 18 линии код кои ги додава апликацијата (Instagram или Facebook). Овој код проверува дали постои специфичен cross-platform „kit“ за следење. Ако овој „kit“ не е инсталиран, ја повикува Meta Pixel алатката за следење.
За жал, засега нема листа на податоци кои Meta на овој начин ги собира од корисниците.
„Немам прецизна листа на податоци кои Instagram ги испраќа дома. Немам доказ дека апликациите на Instagram и Facebook активно извршуваат JavaScript команди за да инјектираат дополнителен JS SDK без дозвола од корисникот, како и дека ги следат полињата во кои се внесува текст. Сепак ако Instagram веќе го прави ова, може да инјектира каков било JS код“.
По објавувањето на веста Meta излезе со свое образложение:
„Намерно го развивме овој код за да можеме да ја испочитуваме желбата на корисниците кои бараат да бидат следени на нашите платформи. Кодот ни овозможува да ги собереме податоците на корисниците пред да ги користиме за да им прикажеме таргетирани реклами или за аналитика. Не додаваме pixel. Кодот е инјектиран за да може да ја следиме конверзијата на настани од pixel“.
Технички детали
За сите кои се заинтересирани како следењето функционира технички, Феликс има одлично објаснување. Објаснувањето не е премногу сложено за следење.
Во прв чекор Instagram додава нов event listener кој следи кога корисникот ќе селектира било каков текст на страницата.
Потоа апликацијата проверува дали постои елемент со ID „iab-pcm-sdk“ (iab можеби е ознака за „In App Browser“).
Ако ваков елемент не е пронајден, Instagram креира елемент-скрипта и како source ја додава https://connect.facebook.net/en_US/pcm.js. Потоа ја пронаоѓа првата скрипта на веб-страницата и го додава елементот пред нејзе.
На крај Instagram проверува дали на страницата има iframe, но Феликс не открил што се случува со оваа селекција.
Што да направите за да се заштитите како корисник
За жал нема елегантно решение што може да им помогне на корисниците. Корисникот најпрво треба да ја отвори страницата во прелистувачот на Meta, па потоа да го пронајде копчето со функционалност „Open in Crome/Safari“. Ако вакво копче нема тогаш наместо ова треба да ја ископира адресата и да ја внесе во прелистувачот.
Како да ги заштитите корисниците
За сите девелопери и сопственици на веб-страници кои сакаат да гo спречат следењето на своите веб-страници Феликс предлага едноставно решение.
За да ги „излажете“ апликациите дека кодот е веќе инсталиран додадете ги следните две линии во HTML кодот…
<span id="iab-pcm-sdk"></span>
<span id="iab-autofill-sdk"></span>
За да спречите целосно следење на содржината во текст полињата додадете:
const originalEventListener = document.addEventListener
document.addEventListener = function(a, b) {
if (b.toString().indexOf("messageHandlers.fb_getSelection") > -1) {
return null;
}
return originalEventListener.apply(this, arguments);
}