Skip to main content
Blog
Blog

Waarom hebben websites 3rd party scripts nodig?

Bij het ontwikkelen van een website neem je vaak bibliotheken op om het ontwikkelproces te versnellen en het wiel niet opnieuw uit te vinden. Echter

Oct 10, 2024 6 min read
Simon Wijckmans
Simon Wijckmans Founder & CEO
websites-need-3rd-party-scripts-image-cover

Hoe scripts van derden op een website terechtkomen

Bij het ontwikkelen van een website neem je vaak bibliotheken op om het ontwikkelproces te versnellen en het wiel niet opnieuw uit te vinden. Echter, er zijn momenten waarop je een script van een externe bron moet laden. Door recente aanvallen zoals de Polyfill domeinovername, zijn er vragen gerezen: waarom heb je überhaupt 3rd party scripts nodig? Hoe komen ze op een website terecht?

Laten we eerst de context schetsen. 3rd party scripts zijn JavaScript-bestanden die worden geserveerd vanaf een andere server dan je eigen server. Stel bijvoorbeeld dat ik mijn website run, cside.com. Deze website is gemaakt door een team van ontwikkelaars, die een aantal bibliotheken hebben gebruikt om het samen te stellen. Dit wordt vervolgens gecompileerd / getransformeerd / opgedeeld in kleinere, minder JavaScript-bestanden dan de broncode oorspronkelijk was opgebouwd. Dit noemen we 1st party JavaScript – het wordt geserveerd als een resource binnen cside.com, bijvoorbeeld cside.com/_next/static/chunks/main-ab76c1828cff9b09.js.

Een week later vraagt een marketingteamlid de ontwikkelaars om een script toe te voegen aan de site voor hun analytics-product van keuze. Nu heeft de site zijn eerste 3rd-party JavaScript. Dit proces kan doorgaan met het juridische team dat vraagt om een cookiebanner, marketing die vraagt om nog een analytics-script, enzovoort.

De ontwikkelaars kennen de risico's van 3rd party JavaScript, dus ze zoeken online naar de tool, doen wat onderzoek en achten het betrouwbaar.

Deze cyclus herhaalt zich totdat er een dozijn scripts of meer op de pagina staan. Allemaal legitiem, allemaal belangrijk en allemaal 3rd party. In het slechtste geval wordt een van deze domeinen gekocht, wordt er slecht verkeer geserveerd en raakt je site geïnfecteerd.

Maar dit is vergezocht – en zo gebeuren aanvallen meestal niet. De top-level scripts op je site zijn meestal niet degenen die worden getarget, hoewel dat mogelijk is (zie onze Polyfill-analyse hier). Vaak laden scripts andere scripts. Sommige scripts kunnen zelfs iframes creëren en nog meer scripts laden. Net zoals je 1st party code een aantal dependencies gebruikt, hebben 3rd party scripts ook vereisten om zichzelf functioneel te maken en hebben ze hun eigen supply chain.

Soms kunnen zelfs first-party bibliotheken die je toevoegt een script laden tijdens runtime. Ze bieden misschien een handige React-component om in je pagina te plaatsen, maar achter de schermen voegen ze een paar scripts toe om zichzelf functioneel te maken. Of het nu gaat om het laden van lokalisatie, hun eigen analytics, thema's of meer - het voegt toe aan de 3rd party supply chain van je website.

Dus je zou kunnen denken: waarom download je deze scripts niet gewoon en host je ze zelf? Voor sommige basisscripts, zoals jQuery, is dit een voor de hand liggende keuze - en een die we aanbevelen. Als je te maken hebt met een statisch script in de supply chain van je site, breng het dan naar je origin indien mogelijk.

Echter, veel scripts serveren dynamische content op basis van de aanvrager. Ze kunnen bijvoorbeeld naar je User Agent in het verzoek kijken en besluiten dat je een andere versie met extra functies nodig hebt. Of ze kunnen naar je IP kijken en besluiten om je een andere lokalisatie van het script te sturen.

Deze zijn meestal nog steeds statisch per gebruiker, maar belangrijk is dat ze niet globaal statisch zijn. Dit betekent dat door het script zelf te serveren, je slechts één variatie zou serveren, niet de complete suite van scripts die nodig zijn om je gebruikers de beste ervaring te geven.

Sommige scripts kunnen zelfs hard-coded URL's hebben naar sub-scripts die ze zullen laden. Dit betekent dat zelfs als je het root-script naar je site kopieert, het nog steeds externe scripts zal laden vanaf een externe URL.

Zelfs bibliotheken die je misschien elke dag in je app gebruikt, volgen dit patroon. Laten we naar enkele voorbeelden kijken:

Het Intercom npm-pakket laadt een hele hoop scripts tijdens runtime:

https://developers.intercom.com/installing-intercom/web/installation#single-page-app

Intercom-installatiesnippet voor single-page apps die extra scripts laadt

Cside-dashboardweergave waarin Intercom-scripts via cside worden gerouteerd

Zelfs bij het gebruik van social media tracking tools, die onvermijdelijk zijn voor de meeste bedrijven die social-media-marketing doen, is het eerste wat de scripts die ze je geven doen het laden van nog een 3rd party script:

Microsoft Clarity-trackingsnippet die extra third-party scripts laadt

Of je gebruikt een React-pakket zoals @monaco-editor/react, met meer dan 712.000 wekelijkse downloads, dat een 3rd party script laadt voor veel van zijn functionaliteit: https://www.npmjs.com/package/@monaco-editor/react

npm-pagina van @monaco-editor/react met het aantal wekelijkse downloads

Dus waar gaan we vanaf hier naartoe? Daarom bestaat cside. We proxyen elk script dat in de pagina laadt - zelfs degenen die tijdens runtime worden geladen. We herschrijven script-URL's om via onze cside Proxy te gaan, die in staat is om een script te blokkeren voordat het zelfs maar aan de client wordt geserveerd.

Onze proxy geeft een uniek uitkijkpunt: het mogelijk maken van per-url, per-domein, per-hash, per-headers beleid dat in seconden wereldwijd kan worden ingezet. Als een script probeert een child-script te laden, zal cside ervan weten en het proxyen. En je vervolgens de controle geven om te beslissen wat er gebeurt: sta dit script toe, blokkeer dit script, en de analytics die erbij horen.

Voor elk script dat onze proxy ziet, geven we het door aan onze detectie-engine. Onze detectie-engine haalt het script uit elkaar - tot op AST-niveau - om erachter te komen wat het doet. En we doen dit voor elke kleine verandering in een script, zelfs als het een karakter is. We kunnen je informeren over wat een script doet, wanneer zijn toegang tot je site verandert, en een hele reeks vertrouwensinformatie rond de bron.

We hebben beveiligingsanalisten die de klok rond werken om opkomende bedreigingen te spotten en ze op onze proxy-laag te blokkeren voordat ze ooit een van je klanten beïnvloeden. Combineer dit met de eerder genoemde automatische detectie-engine, en je hebt nu totale controle over de 3rd party supply chain van je site.

Je kunt je aanmelden voor onze gratis tier hier.

Interesseert de browser supply chain je? Zo ja, kom dan bij ons op de missie om elke gebruiker van het World Wide Web te beschermen: https://cside.com/careers

Simon Wijckmans
Founder & CEO Simon Wijckmans

Founder and CEO of cside. Building better security against client-side executed attacks, and making solutions more accessible to smaller businesses. Web security is not an enterprise only problem.

FAQ

Frequently Asked Questions

Chatwidgets, analytics, advertenties, A/B-tests, betalingen en zelfs React-componentbibliotheken trekken op runtime JavaScript van derden binnen. De afhankelijkheidsgrafiek groeit snel omdat elk third-party script vaak nog meer scripts laadt.

Stuur elk script door een monitor die volgt welke code er echt wordt geleverd. cside herschrijft script-URL's naar onze edge, blokkeert kwaadaardige wijzigingen en toont de echte payload in het dashboard.

Monitor en Beveilig Je Third-Party Scripts

Gain full visibility and control over every script delivered to your users to enhance site security and performance.

Start gratis, of probeer Business met een proefperiode van 14 dagen.

cside dashboard interface met script monitoring en beveiligingsanalytics
Related Articles
Boek een demo