Blokirajte skripte trećih strana s nekoliko linija JavaScript-a

Kako spriječiti skripte treće strane da prikupljaju podatke, šalju analitike i drugo bez pristanka korisnika.

Izjava o odricanju odgovornosti: Ovaj se članak odnosi na blokiranje skripti za koje se zna da su sigurne, poput analitike - što znači skripte iz usluga trećih strana koje sami uključujete. Da biste blokirali zlonamjerne neželjene skripte treće strane ili spriječili napade križanjem skrivenih web stranica, uvijek biste trebali razmotriti korištenje drugih rješenja, poput dodavanja zaglavlja sadržaja sigurnosne politike!
Tražite pristanak korisnika - bez praćenja unaprijed.

Kontekst

Ovdje u Snipsu shvaćamo privatnost vrlo ozbiljno. Sada kada je GDPR na snazi, odlučili smo da naše web stranice nikada ne bi trebale prikupljati analitičke podatke o posjetiteljima - osim ako se dobrovoljno ne prijave.

Nažalost, blokiranje analitike drugih proizvođača može biti pomalo teško. Problem je u tome što su ove usluge napravljene za pokretanje odmah i što se oslanjaju na male isječke isječaka koda i oznake skripti. Možete pokušati sami izmijeniti izmijenjeni kôd, ali on postaje malo zbrkan i težak za održavanje, pogotovo ako koristite nekoliko knjižnica.

Da bismo to bolje riješili - automatski - stvorili smo malu biblioteku otvorenog koda nazvanu Yett (zanimljivo značenje) koja se brine za blokiranje izvršenja analitičkih skripti. Biblioteka vam također omogućuje da kasnije deblokirate ove skripte nakon što se korisnik prijavi.

Automatsko blokiranje skripti može se činiti trivijalno - ali zapravo nije tako jednostavno blokirati umetnute oznake skripti!

Dakle, dok smo istraživali temu, pronašli smo neke tehničke suptilnosti za koje smo mislili da bi bilo lijepo podijeliti sa zajednicom .

Cilj

Evo zahtjeva:

  • Kôd se mora učitati i izvršavati sinkrono, prije bilo koje druge skripte;
  • U ovom trenutku nemate pojma kako će izgledati konačni html, jer dokument još nije u cijelosti učitan;
  • Blokirane skripte ne smiju se mijenjati na bilo koji način (cilj je spriječiti ih da se izvršavaju bez dodirivanja vlastitog koda);
  • Trebali bismo biti u mogućnosti (na kraju) skripte programski deblokirati kasnije.

U nastavku navodimo nekoliko tehnika koje će zapravo raditi.

Osnovni rad - Korištenje MutationObservera za promatranje umetanja elemenata skripte

MutationObserver je zgodan u ovom slučaju, jer možete registrirati promatrača na elementu dokumenta prije vremena i biti obaviješten kad god se DOM čvorovi ubace, posebno čvorovi skripte.

To samo po sebi neće biti dovoljno, ali bit će to prvi korak ka našem cilju.

Sprječavanje izvršavanja oznake