window.pipedriveLeadboosterConfig = { basis: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', versie: 2, } ;(functie () { var w = venster als (w.LeadBooster) { console.warn('LeadBooster bestaat al') } anders { w.LeadBooster = { q: [], on: functie (n, h) { this.q.push({ t: 'o', n: n, h: h }) }, trigger: functie (n) { this.q.push({ t: 't', n: n }) }, } } })() XSS-beveiliging in populaire Javascript-bibliotheken. Moet ik me nog steeds zorgen maken? - The Codest
The Codest
  • Over ons
  • Diensten
    • Software Ontwikkeling
      • Frontend ontwikkeling
      • Backend ontwikkeling
    • Staff Augmentation
      • Frontend ontwikkelaars
      • Backend ontwikkelaars
      • Gegevensingenieurs
      • Cloud Ingenieurs
      • QA ingenieurs
      • Andere
    • Het advies
      • Audit & Consulting
  • Industrie
    • Fintech & Bankieren
    • E-commerce
    • Adtech
    • Gezondheidstechnologie
    • Productie
    • Logistiek
    • Automotive
    • IOT
  • Waarde voor
    • CEO
    • CTO
    • Leveringsmanager
  • Ons team
  • Case Studies
  • Weten hoe
    • Blog
    • Ontmoetingen
    • Webinars
    • Bronnen
Carrière Neem contact op
  • Over ons
  • Diensten
    • Software Ontwikkeling
      • Frontend ontwikkeling
      • Backend ontwikkeling
    • Staff Augmentation
      • Frontend ontwikkelaars
      • Backend ontwikkelaars
      • Gegevensingenieurs
      • Cloud Ingenieurs
      • QA ingenieurs
      • Andere
    • Het advies
      • Audit & Consulting
  • Waarde voor
    • CEO
    • CTO
    • Leveringsmanager
  • Ons team
  • Case Studies
  • Weten hoe
    • Blog
    • Ontmoetingen
    • Webinars
    • Bronnen
Carrière Neem contact op
Pijl terug KEREN TERUG
2019-08-26
Software Ontwikkeling

XSS-beveiliging in populaire Javascript-bibliotheken. Moet ik me nog steeds zorgen maken?

Daniel Grek

Je moet toegeven dat de meeste populaire Javascript bibliotheken in hun ontwikkelingsgeschiedenis (respectievelijk 9, 6 en 5 jaar voor Angular, React en Vue) veel goede dingen hebben gedaan op het gebied van beveiliging, vooral met betrekking tot kwetsbaarheid voor XSS aanvallen. In dit artikel worden echter de kleine valkuilen en principes besproken waar ontwikkelaars zich nog steeds bewust van moeten zijn.

XSS

We leven in het tijdperk van frameworks, niet van talen. Dit betekent dat programmeurs zich minder zorgen hoeven te maken over veel aspecten van ontwikkeling, waaronder beveiliging. De meeste van de huidige backend frameworks implementeren beveiligingsmodules die worden getest door externe, gespecialiseerde bedrijven en grote organisaties. Daarom, afnemend beveiligingsbewustzijn zou kunnen blijken, bijvoorbeeld tussen jonge programmeurs, die meer verantwoordelijkheid nemen voor de producten, vooral in termen van freelancen.

Een van de meest voorkomende aanvallen aan de clientzijde van de toepassing is XSS (Cross-Site Scripting). Het wordt uitgevoerd door uitvoerbare scripts aan de clientzijde in webtoepassingen te injecteren [1] en maakt gebruik van geïmplementeerde HTML-weergavemethoden of Javascript code beoordelaars die het uitvoeren. XSS is relatief lucratief omdat er veel verschillende gegevens kunnen worden verzameld, waaronder sessiecookies of gebruikersgegevens, en het kan een traceertoepassing installeren zoals een keylogger, waardoor het gevaarlijk is voor zowel gebruikers als bedrijfseigenaren. Soms worden andere aanvalsvormen uitgevoerd om XSS op de pagina mogelijk te maken, zoals SQL-injectie.

Voorbeeld

Aanmeldingsformulier op pagina geeft loginName-parameter die is verzonden binnen GET-verzoek weer in de invoer voor de aanmeldingsnaam. De waarde wordt noch door de server noch door de client-side van de toepassing verwerkt. Door te vragen: http://localhost:8080/login?name=<script>alert(document.cookies)</script>
code wordt uitgevoerd en gegevens worden weergegeven

Dit is een voorbeeld van een gereflecteerde XSS-aanvalwaarbij scripts worden geïnjecteerd via een speciaal geprepareerd URL-adres dat aan het slachtoffer wordt gestuurd en door de serverrespons wordt weergegeven. Andere bekende populaire aanvalsvormen zijn de volgende:

  • Opgeslagen XSS uitgevoerd met geïnjecteerde gegevens die op de server zijn opgeslagen, meestal door formulieren die beschikbaar zijn in de applicatie. De clienttoepassing rendert code die bijvoorbeeld in een database is opgeslagen.
  • DOM XSS voert een XSS-aanval uit zonder gebruik te maken van de server-side. In het volgende deel van dit artikel zullen we ons richten op deze vorm van aanval.

Huidige kwetsbaarheden in React- en Vue-bibliotheken

Voor de huidige React/Vue versies zijn twee grote problemen ontdekt die nog niet officieel verholpen zijn. De eerste kwetsbaarheid heeft dezelfde aard voor elk framework en is gerelateerd aan methoden die rauwe HTML rendering binnen sjablonen toestaan: v-html en gevaarlijkSetInnerHTML, respectievelijk voor Vue en React. Elke documentatie [2] informeert lezers dat onverstandig gebruik gebruikers kan blootstellen aan een XSS-aanval. Als er geen andere opties zijn om het probleem op te lossen, zorg er dan voor dat de gegevens gefilterd en ontsnapt. Hoewel ze gevaarlijk zijn, moet je niet verwachten dat deze methoden worden opgelost. Gebruik ze op eigen risico.

In het eerste kwartaal van 2018 werd een grote bug ontdekt in React, waardoor directe code-uitvoering mogelijk was door de eigenschap voor tag-element in te stellen. Het doorgeven van voorbeeldcode binnen attributen, zoals javascript:waarschuwing(1) en het uitvoeren van een gerenderde link zal de code uitvoeren. Dit probleem [4] is nog steeds open en er is nog geen fix voorbereid en samengevoegd, dus zorg ervoor dat je code veilig is. Voorbeelden voorgesteld in de officiële discussie suggereren enkele manieren om dit probleem op te lossen.

Als bijwerken naar de nieuwste versies niet mogelijk is, zorg er dan voor dat oude problemen geen problemen voor je veroorzaken door ervoor te zorgen dat je code niet wordt blootgesteld voor:

  • kind knooppunt injectie - React, gebruik van React.createElement [5]
  • server-side rendering - React/Vue [6]
  • CSS-injectie [8]

Het gaat nog steeds over Javascript. Het gaat nog steeds over front-end

Vergeet niet dat naast de frameworks of bibliotheken zelf, Javascript als taal een aantal gevaarlijke functies heeft die vermeden of met voorzichtigheid gebruikt moeten worden. Ze zijn over het algemeen gerelateerd aan DOM-manipulatie of het uitvoeren van scripts. eval() vertegenwoordigt vlaggenschipfuncties van dit type en is extreem gevaarlijk omdat het gegeven stringified code direct uitvoert [9]. Kijk ook beter naar je code als je een van deze functies tegenkomt:

  • document.schrijven
  • document.writeln
  • (element).innerHTML
  • (element).outerHTML
  • (element).insertAdjacentHTML

Hier kan het gebruik van linters met de juiste regels helpen bij het vinden van zulke kwetsbare punten. Er zijn ook veel open of commerciële code-analyzers die je kunnen helpen bij het opsporen van beveiligingslekken in ontwikkelde code.

Welke bibliotheek/framework ook wordt gekozen, we moeten nog steeds de basisprincipes met betrekking tot front-end ontwikkeling onthouden. Ten eerste, zorg er altijd voor dat de externe code die je injecteert afkomstig is van een betrouwbare bron. Controle je afhankelijkheden, en kies ze verstandig. Sommige kunnen ernstige kwetsbaarheden bevatten, waardoor je code wordt blootgesteld, zelfs als alles in orde is met de code zelf. Je kunt hier meer lezen over de beveiliging van afhankelijkheden:

https://thecodest.co/blog/security-in-javascript-packages/

Dus... moet je je nog steeds zorgen maken?

Ja - en ik raad iedereen sterk aan om nooit te vertrouwen op externe bibliotheken of op jezelf als het gaat om beveiliging. Hoe veilig je ook verwacht dat je software is, doe altijd je best om het zoveel mogelijk te testen op veelvoorkomende aanvalsvormen [10].

  1. https://reactjs.org/docs/dom-elements.html#dangerouslysetinnerhtml
  2. https://vuejs.org/v2/guide/syntax.html#Raw-HTML
  3. https://github.com/facebook/react/issues/12441
  4. http://danlec.com/blog/xss-via-a-spoofed-react-element
  5. https://medium.com/node-security/the-most-common-xss-vulnerability-in-react-js-applications-2bdffbcc1fa0
  6. https://github.com/dotboris/vuejs-serverside-template-xss
  7. https://frontarm.com/james-k-nelson/how-can-i-use-css-in-js-securely/
  8. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval#Do_not_ever_use_eval!

Lees meer:

5 fouten die je moet vermijden bij het onderhouden van een project in PHP

PHP Ontwikkeling. Symfony Console Component - Tips & Trucs

Waarom hebben we Symfony Polyfill nodig (... en waarom niet)?

Verwante artikelen

Software Ontwikkeling

Bouw Toekomstbestendige Web Apps: Inzichten van The Codest's Expert Team

Ontdek hoe The Codest uitblinkt in het creëren van schaalbare, interactieve webapplicaties met geavanceerde technologieën, het leveren van naadloze gebruikerservaringen op alle platforms. Ontdek hoe onze expertise digitale transformatie en business...

DE BESTE
Software Ontwikkeling

Top 10 in Letland gevestigde bedrijven voor softwareontwikkeling

Lees meer over de beste softwareontwikkelingsbedrijven van Letland en hun innovatieve oplossingen in ons nieuwste artikel. Ontdek hoe deze technologieleiders uw bedrijf kunnen helpen verbeteren.

thecodest
Oplossingen voor ondernemingen en schaalvergroting

Essentiële Java-softwareontwikkeling: Een gids voor succesvol uitbesteden

Verken deze essentiële gids over succesvolle outsourcing Java-softwareontwikkeling om de efficiëntie te verbeteren, toegang te krijgen tot expertise en projectsucces te stimuleren met The Codest.

thecodest
Software Ontwikkeling

De ultieme gids voor outsourcing in Polen

De sterke groei van outsourcing in Polen wordt gedreven door economische, educatieve en technologische vooruitgang, die IT-groei en een bedrijfsvriendelijk klimaat stimuleert.

DeCodest
Oplossingen voor ondernemingen en schaalvergroting

De complete gids voor IT-auditmiddelen en -technieken

IT-audits zorgen voor veilige, efficiënte en compliant systemen. Lees het volledige artikel om meer te weten te komen over het belang ervan.

The Codest
Jakub Jakubowicz CTO & medeoprichter

Abonneer je op onze kennisbank en blijf op de hoogte van de expertise uit de IT-sector.

    Over ons

    The Codest - Internationaal softwareontwikkelingsbedrijf met technische hubs in Polen.

    Verenigd Koninkrijk - Hoofdkantoor

    • Kantoor 303B, 182-184 High Street North E6 2JA
      Londen, Engeland

    Polen - Lokale technologieknooppunten

    • Fabryczna kantorenpark, Aleja
      Pokoju 18, 31-564 Krakau
    • Hersenambassade, Konstruktorska
      11, 02-673 Warschau, Polen

      The Codest

    • Home
    • Over ons
    • Diensten
    • Case Studies
    • Weten hoe
    • Carrière
    • Woordenboek

      Diensten

    • Het advies
    • Software Ontwikkeling
    • Backend ontwikkeling
    • Frontend ontwikkeling
    • Staff Augmentation
    • Backend ontwikkelaars
    • Cloud Ingenieurs
    • Gegevensingenieurs
    • Andere
    • QA ingenieurs

      Bronnen

    • Feiten en fabels over samenwerken met een externe partner voor softwareontwikkeling
    • Van de VS naar Europa: Waarom Amerikaanse startups besluiten naar Europa te verhuizen
    • Tech Offshore Ontwikkelingshubs Vergelijking: Tech Offshore Europa (Polen), ASEAN (Filippijnen), Eurazië (Turkije)
    • Wat zijn de grootste uitdagingen voor CTO's en CIO's?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Gebruiksvoorwaarden website

    Copyright © 2025 door The Codest. Alle rechten voorbehouden.

    nl_NLDutch
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian jaJapanese ko_KRKorean es_ESSpanish etEstonian elGreek nl_NLDutch