Styre JS Injection: Veiledning for sikker bruk

Styre-JS slipper automatisk utdata for å forhindre injeksjon, men usikre mønstre som trippel regulering eller dårlig skrevne tilpassede hjelpere kan omgå denne beskyttelsen helt. Når de gjør det, kan angripere injisere XSS-nyttelaster, stjele data eller kjøre ondsinnet kode gjennom maler utviklere antok var trygge som standard.

Denne veiledningen viser deg hvordan du bruker sikker bruk av handlebars, fremhever eksempler på farlige kontra sikre og forklarer hvordan du automatiserer malvalidering i pipelinemed verktøy som Xygeni.

Hvorfor styremaler kan være risikable

Som standard bruker Handlebars JS verdier som escape-kode for å blokkere direkte injeksjon. Men mange utviklere slår dette av uten å kjenne til risikoene. For eksempel viser bruk av trippel parentes rå HTML:

If userInput is <script>alert('XSS')</script>, Skriptet kjøres i nettleseren. Som et resultat kan selv én usikker mal kompromittere hele appen.

Disse grunnleggende feilene har ført til reelle, dokumenterte utnyttelser, ikke bare teoretisk risiko. Her er to av de mest bemerkelsesverdige tilfellene.

Eksempler på sårbarheter i styret fra den virkelige verden

Selv Styrer JS escape-verdier som standard, historikken viser at usikre mønstre eller svake Styrehjelpere har forårsaket alvorlige problemer:

1. Prototypeforurensning i styret (npm-veiledning GHSA-2cf5-4w76-r9qv)

I 2021 ble det funnet en feil i handlebars selve pakken. Feilen tillot prototypeforurensning, der angripere kunne injisere egenskaper i globale objekter gjennom utformede maler.

  • Innvirkning: Prototypeforurensning kan la angripere kjøre kode, få høyere tilgang eller stjele data.
  • Utnyttelse: Angripere sendte ondsinnet inndata som __proto__ egenskaper. Da maler ble gjengitt, endret disse forurensede objektene hvordan appen oppførte seg.
  • Lekse: Selv malmotoren kan være risikabel hvis den ikke oppdateres. Det er avgjørende å kjøre avhengighetsskanninger og holde pakkene oppdatert.

2. XSS i Asanas spesialtilpassede styrehjelpere (2019)

I 2019 oppdaget sikkerhetsforskere at asana, et verktøy for oppgavebehandling, eksponerte brukere for XSS på grunn av usikre tilpassede hjelpere. Utviklere skrev hjelpere som returnerte rå strenger ved hjelp av SafeString, og omgår styrets innebygde escape-funksjon.

  • Innvirkning: Angripere injiserte skadelig JavaScript i delte oppgaver eller kommentarer.
  • Utnyttelse: Nyttelaster som <script>alert('XSS')</script> kjørte i offerets nettleser da de åpnet disse feltene.
  • Lekse: Deaktiver aldri escape med mindre du ikke har noe annet valg. Se alltid over tilpassede alternativer. Styrehjelpere før de utplasseres.

Typer sårbarheter i styret

Usikker bruk av Styrer JS Maler kan avsløre ulike klasser av sårbarheter. Å forstå dem hjelper utviklere med å vite nøyaktig hva de skal forhindre:

Cross-Site Scripting (XSS)

Dette er den vanligste feilen. Den oppstår når utviklere bruker trippel regulering. {{{}}} eller rå hjelpere som deaktiverer escaping.

  • Innvirkning: Angripere kan injisere <script> tagger, HTML eller iframes som kjører i brukerens nettleser.
  • Eksempel:
  • If userInput inneholder <script>alert('XSS')</script>, den utføres umiddelbart.

Forurensningsprototype

Som sett i npm advisory GHSA-2cf5-4w76-r9qv, kan ondsinnet inndata endre globale objekter gjennom laget maler.

  • Innvirkning: Dette kan føre til vilkårlig oppførsel, eskalering av privilegier eller datausfiltrering.
  • Lekse: Hold alltid handlebars oppdaterte og kjøre avhengighetskontroller i CI/CD.

Serversidemalinjeksjon (SSTI)

SSTI skjer når upålitelig inndata sendes direkte til en malmotor som kjører på serveren. Styrer JS, hvis utviklere kompilerer maler ved hjelp av rå brukerinndata, kan en angriper kjøre nyttelaster på servernivå.

Hvis en angriper sender inn:

Motoren kan prøve å evaluere den, og dermed eksponere filer på serversiden.

  • Innvirkning: I motsetning til XSS, som bare påvirker nettleseren, kan SSTI gi direkte tilgang til servermiljøet.
  • Forebygging: Aldri kompiler maler fra upålitelige kilder. Bruk i stedet bare forhåndsdefinerte maler og rengjør inndata før gjengivelse.

Lignende risikoer forekommer i andre økosystemer. Se for eksempel vår veiledning om Python-avhengighetsinjeksjon å lære trygge praksiser i en annen kontekst.

Logikkmisbruk i hjelpere

Custom Styrehjelpere kan være farlig hvis de tillater rå strenger eller fungerer med uvaliderte input.

  • Innvirkning: Angripere kan omgå escape-funksjoner eller lure hjelpere til å eksponere sensitive data.
  • Eksempel:
  • Denne hjelperen deaktiverer rømningsfunksjonen fullstendig og bør unngås.

Datalekkasje

Noen ganger avslører hjelpere eller feilkonfigurerte maler sensitiv informasjon.

  • Innvirkning: Tokener, konfigurasjonsverdier eller databaselegitimasjon kan gjengis i HTML-utdata.
  • Lekse: Aldri avslør hemmeligheter i maler; valider og skann etter utilsiktede lekkasjer i databasene dine.

Sammen viser disse kategoriene risikoområdet, fra en gjengivelsesfeil i nettleseren til en fullstendig kompromittert server. Hvis den ikke rettes, kan selv en liten feil i en Handlebars-mal bli et problem i forsyningskjeden.

Hvorfor dette er viktig for utviklere

Disse sårbarhetene er ikke teoretiske; de ​​har blitt utnyttet på virkelige plattformer som Asana og i Handlebars. npm-pakke seg selv. Fordi Handlebars JS er så mye brukt på tvers av Node.js og frontend-prosjekter, kan en usikker hjelper eller en utdatert avhengighet i ett prosjekt raskt bli en risiko i programvareforsyningskjeden som påvirker mange.

Vil du blokkere disse risikoene automatisk? Start en gratis prøveversjon av Xygeni og legge til guardrails i pipeline i dag.

Beste praksis for sikker bruk av styret

For å unngå injeksjonsfeil, følg disse sikre kodepraksisene:

1. Bruk alltid dobbel tannregulering

Dette sikrer at malmotoren unnslipper HTML før gjengivelse.

2. Valider og rengjør inndata

I tillegg må du validere inndata før du sender dem til maler. Biblioteker som validator.js

3. Begrens farlige hjelpere

Dårlig utformet Styrehjelpere forårsaker ofte sårbarheter:

Dette omgår escape helt. Sikre hjelpere bør imidlertid begrenses til enkle operasjoner som formatering av datoer eller beskjæring av tekst.

4. Bruk innholdssikkerhetspolicy (CSP)

I tillegg må du håndheve sterke CSP-headere for å redusere eksplosjonsradiusen til enhver injeksjon.

Disse beste praksisene er viktige under utvikling. I tillegg kan du legge til automatiserte kontroller, slik at usikker kode aldri kommer i produksjon.

Automatisering av validering i CI/CD Pipelines

Manuelle gjennomganger alene er ikke nok, usikre styremønstre kan og vil gli inn i produksjon uten automatiserte kontroller på plass:

  • SAST regler: Flagg {{{ in .hbs filer.
  • Hemmelighetsskannere: Oppdag legitimasjon innebygd i maler.
  • CI/CD guardrails: Bryt konstruksjoner når de er utrygge Styrehjelpere eller trippel regulering vises.

For eksempel kan du håndheve et autovern i pipelines:

Disse kontrollene reduserer sjansen for at usikre maler når produksjon, men håndhever dem konsekvent på tvers av alle repositorier og pipeline er der en dedikert plattform som Xygeni kommer inn i bildet.

Du kan også se hvordan du sikrer pipelines i Bitbucket fungerer i vår Vanlige spørsmål om Bitbucket-sikkerhets.

Hvordan Xygeni bidrar til å forhindre usikker bruk av styret

Det er viktig å skrive sikker kode, men ekte beskyttelse kommer fra automatisering. Xygeni gjør Styrer JS tryggere ved å legge til sjekker i arbeidsflyten din:

  • SAST for maler: skanner .hbs filer for å fange opp usikre {{{ eller risikable tilpassede hjelpere.
  • Guardrails: Sett enkle regler i GitHub, GitLab eller Bitbucket. Hvis usikker Handlebars JS-kode blir funnet, stopper byggingen.
  • Automatisk fiks: Foreslår sikre løsninger i pull requests, bytte ut trippel tannregulering med trygg dobbel tannregulering eller pålitelige hjelperrop.
  • Hemmeligheter og konfigurasjonskontroller: Finner tokener eller legitimasjon skjult i maler før de lekker.
  • CI/CD Trygghet: Blokkerer usikre kodesnutter under sammenslåing, slik at bare sikker kode når produksjon.

Med Xygeni, trygg Styrer JS bruk er ikke lenger bare en retningslinje. Det blir en del av den automatiserte pipeline.

Putting It All Together

Styret er trygt som standard, men misbruk åpner fortsatt døren for injeksjonsangrep. Ved å følge disse beste praksisene, validere input, begrense farlige hjelpere og håndheve CSP, lukkes det meste av dette gapet. Den virkelige fordelen kommer når disse kontrollene kjøres automatisk i din pipeline i stedet for å være avhengig av manuell gjennomgang hver gang.
Ved å kombinere disse vanene med en plattform som Xygeni holder du malene sikre uten å bremse leveringen.

FAQ

Er det trygt å bruke JS-styret?

Ja, som standard. Styrer escaperer automatisk utdata for å forhindre injeksjon. Risikoen kommer fra utviklere som overstyrer denne beskyttelsen, vanligvis med trippel parentes ({{{ }}}) eller tilpassede hjelpere som returnerer rå, uescapede strenger.

Hva er forskjellen mellom XSS og Server-Side Template Injection (SSTI) i Handlebars?

XSS påvirker nettleseren: et skadelig skript kjører i offerets økt. SSTI er mer alvorlig, det skjer når upålitelig inndata kompileres direkte inn i en mal på serveren, noe som potensielt eksponerer serversidefiler eller miljøtilgang, ikke bare nettleseren.

Hvordan vet jeg om styrehjelperne mine er utrygge?

En hjelper er en risiko hvis den returnerer en rå streng ved hjelp av SafeString eller på annen måte omgår Handlebars' standard escape. Begrens tilpassede hjelpere til enkle operasjoner som ikke returnerer strenger, som formatering av datoer eller trimming av tekst.

Kan automatiserte verktøy fange opp usikker bruk av styre før det sendes?

Ja. SAST regler kan flagge trippelparenteser i .hbs-filer, hemmelighetsskannere kan fange opp legitimasjon innebygd i maler, og CI/CD guardrails kan blokkere et bygg fullstendig når usikre mønstre oppdages, og fange opp problemer før manuell gjennomgang ville gjort det.

sca-tools-programvare-verktøy for komposisjonsanalyse
Prioriter, utbedre og sikre programvarerisikoene dine
Få din gratis konto.
Ingen kredittkort kreves.

Sikre programvareutviklingen og -leveringen din

med Xygeni-produktpakken