I de siste årene har JavaScript, som et plattformuavhengig språk, funnet veien til en rekke bruksområder, alt fra mobile applikasjoner til HTML5-baserte spill og Node.js-servere. Langt borte er de dagene da du bare brukte JavaScript for spesielle effekter og form validering.
Denne utviklingen er bra både for utviklere og for forbrukere, som får raskere oppdateringer til deres applikasjoner uansett hvilken plattform de er på.
Men det reiser også spørsmål om sikkerhet.
Hvordan kan vi sørge for at våre applikasjoner går som planlagt? Hvordan håndhever vi våre lisenser? Og hva med piratkopiering?
I denne veiledningen vil vi se på de vanligste truslene mot JavaScript-applikasjonene dine, og hvordan du kan beskytte dem mot dem. Vi vil også se på trinnene i å gjøre Jscrambler 4.0 til en del av utviklingsarbeidet ditt, slik at du enkelt kan holde JavaScript-applikasjonene dine sikre.
Siden JavaScript hovedsakelig brukes på nettet, er det naturlige stedet å starte, tilkoblingen mellom applikasjonen som kjører på brukerens enheter og serveren din.
Først, la meg få dette ut av veien: uansett hvor god beskyttelse du legger på klientsiden, må du alltid begynne med antagelsen om at klienten kan bli kompromittert. Noen går så langt som å si at du må behandle klienten som ondsinnet.
Grunden til dette er at uansett hvor godt du sikrer kunden din, kan HTTP-kommunikasjonen mellom JavaScript-klienten og serveren din alltid bli manipulert ved hjelp av forespørsels-sniffing-verktøy eller til og med skreddersydde klienter som bruker din serverens protokoller.
Så hvis din søknad snakker til en server, før du legger til en annen form for sikkerhet på kundesiden, starter du med å sikre serveren din så mye som mulig - akkurat som du ville når du bruker et vanlig HTML-grensesnitt.
Du kan tenke på å sikre serveren din gjennom to begreper: dataintegritet og dataintrolighet.
Dataintegritet betyr at dataene i søknaden din skal forbli nøyaktige og konsistente i løpet av sin livssyklus. Dataintrolighet betyr at brukerens data skal forbli sikre, og tredjeparter bør aldri få tilgang til det.
Mens du bør gjøre parametervalidering allerede i JavaScript-klienten, forhindrer det ikke at hackere sender malformerte eller til og med skadelige data til serveren din. Tross alt vil noen som ønsker å ødelegge serveren din, nok ikke engang bruke brukergrensesnittet ditt!
Så, når du jobber med et JavaScript-program, gjelder alle de vanlige server-side-valideringene, fra å rømme HTML-tegn for å kontrollere at attributter er av riktig type, fortsatt søke.
Noen ganger er dataene som sendes inn riktig formatert, men gir ikke mening i programmets tilstand, for eksempel når en spiller sender en umulig høy score. Du kan beskytte serveren din mot situasjoner som disse ved å bruke sunnhets sjekker og plassere så mye av programmets logikk på serveren som mulig.
En annen del av sikringen av klient-serverkommunikasjonen er at alle brukerspesifikke data forblir konfidensielle og tilgjengelige bare av den autoriserte brukeren.
Det første trinnet er å bruke SSL i all kommunikasjon mellom JavaScript-klienten og serveren din for å forhindre at andre på internett spionerer på dataene som passerer mellom de to.
Deretter må du validere at forespørslene faktisk kommer fra riktig bruker. Detaljer for hvordan du best kan gjøre dette, avhenger av søknaden din. I webbaserte applikasjoner er nonces en nyttig teknikk, mens i et spills kontekst kan OAuth-autentisering være en mer naturlig tilnærming.
Bare vær oppmerksom på at du aldri skal lagre sensitiv informasjon som passord eller API-nøkler i klienten din. Det er en god ide å tenke på serveren din som en API som kan brukes av JavaScript-klienten, men også andre klienter på internett.
Mens kontrollene nevnt ovenfor gjelder for alle typer applikasjoner, når mer kompleksitet legges til klienten, blir noen verifikasjoner vanskelig å gjøre.
I multiplayer-spill, for eksempel, kjører all logikken gjennom serveren din, så lenge spillet er enkelt, og du har bare et begrenset antall spillere. Men når den aktive brukerbasen vokser, vil belastningen på serveren få deg til å vurdere muligheten for å flytte noen av behandlingen til klienten. Det samme skjer hvis spilllogikken din er så kompleks at simulering på serveren vil ta opp mange ressurser.
Det er der grensene blir uskarpe.
Mens ideen om å aldri stole på at klienten lyder bra, må du i praksis sette en terskel og si "dette er hvor mye jeg stoler på klienten min" og bare gjør det på siktet på serveren. Hvis noen av spillerens handlinger også påvirker andre spillere, er det her du trenger å involvere serveren mer, slik at stedene hvor brukeren kun kan skade sin egen erfaring til klienten å håndtere.
Og hva med de mange JavaScript-brukstilfeller hvor du ikke har en server, eller hvor du legger programlogikken på serveren, er ikke fornuftig, for eksempel mobilapper, HTML5-streaming-spillere og kartprogrammer?
Endelig er det godt å huske på at uansett hvor godt du sikrer serveren din, er JavaScript-klienten din alltid utsatt. Så, med mindre du legger til noe slags beskyttelse mot det, er det veldig enkelt for en angriper (Man-in-the-Browser eller data exfiltration angrep, for eksempel) for å få tilgang til sensitive data, eller for å endre brukeropplevelsen.
Som et dynamisk språk kan JavaScript endres i nettleseren ved hjelp av grunnleggende verktøy som nettleserens innebygde debugger. Hvis du vet hva du gjør, kan du erstatte deler av koden og endre programmets oppførsel i fly.
Som vi så over, bør du sørge for at ugyldige data aldri gjør det til databasen på serveren din. Men noen endringer er mer begrenset enn dette. Et malware-plugin kan legge til nye knapper i programmet ditt for å lokke brukeren til et eksternt nettsted. Eller brukeren kan hacke klienten for å se mer av spillet uten å spille det.
Endringer som dette vil ikke ødelegge hele programmet, men de vil endre måten brukeren opplever. I tilfelle malware kan dette også utgjøre en alvorlig trussel mot brukerens personvern.
Fordi JavaScript er et tolket språk, er dette umulig å forhindre helt. En dedikert hacker vil alltid finne en måte å komme forbi hindringene, akkurat som en innbruddstyver kan bryte en lås. Men vi kan gjøre å bryte så hardt at de fleste brukere vil bruke riktige metoder (for eksempel å bli bra på spillet ditt), i stedet for å hack applikasjonen.
Det er her Jscrambler kan hjelpe deg.
Jscrambler er en JavaScript-sikkerhetsplattform som har som mål å sikre at JavaScript-applikasjoner utføres på den måten de ble utviklet for å være.
For å gi Jscrambler et forsøk, besøk sin hjemmeside og registrer deg for en gratis prøveversjon. Hvis du finner det lever opp til forventningene dine, kan du senere velge en av sine betalte planer.
Når du er pålogget, hvis det er noe tekst som sier "En ny versjon av Jscrambler er nå tilgjengelig" øverst på siden betyr det at du fortsatt ser den gamle versjonen. Klikk på Prøv det nå.
Jscrambler 4 organiserer arbeidet ditt i applikasjoner, som hver kan bestå av en eller flere JavaScript-filer. Så neste, ser du skjermen for å velge programmet for å jobbe med.
Hvis du vil teste funksjonaliteten ved hjelp av et eget JavaScript-program, klikker du på Opprett app.
For nå, men la oss velge Lekeplass. I denne modusen kommer du til å prøve alle transformasjoner på et eksempelskript, mens transformasjonene du kan søke på din faktiske applikasjon, er begrenset av abonnementsnivået ditt.
Til venstre ser du Filtret, en liste over filer i søknaden din, og en Legg til knapp for import eller oppretting av nye filer. På lekeplassen er Add-knappen deaktivert.
Til høyre er det en meny for å plukke Språkspesifikasjoner og Programmodus for appen din. Jscrambler bruker dem for å sikre at den forvandlede koden vil fungere i ditt valgte miljø, ta hensyn til begrensninger og muligheter.
Vi skal nå med ES5 og en grunnleggende Nettleser App.
Klikk på filnavnet (clock.js
) for å begynne å jobbe med det.
Filens innhold vil bli vist midt på skjermen: kildekoden til venstre og versjonen forvandlet av Jscrambler til høyre.
Deretter velger du Kode Transformasjoner kategorien til høyre for å avsløre en liste over tilgjengelige transformasjoner. Jscrambler lar deg velge transformasjoner du finner relevant for koden din. Du kan til og med bruke notater i koden din for å endre måten noen av koden blir forvandlet til. Det kan være nyttig i ytelseskritiske kodeblokker, for eksempel gjengivelse av funksjoner i spill.
For å teste transformasjonene, velg dem en om gangen. Klikk deretter på Beskytt App nederst i vinduet for å lage en ny versjon av din forvandlede kode.
Ved siden av knappen ser du en måler som presenterer effektene av disse endringene på JavaScript-koden din.
I måleren ser du tre ikoner, som representerer kostnadene, motstanden og styrken (går fra venstre til høyre i skjermbildet over) av transformasjonene du har valgt for søknaden din.
For å komme i gang, merk av i boksen foran Kontrollflyt, og klikk deretter på Beskytt App.
De Kontroll Flow Flattening er en av de kraftige nye transformasjonene lagt til i Jscrambler 4. Det flater scriptets kontrollflow slik at det blir vanskelig for en person å lese koden for å følge logikken i søknaden din.
Deretter fortsetter du ved å velge noen flere obfuscation-alternativer. Når du legger til mer, vil du legge merke til hvordan koden blir mer og vanskeligere å lese - og dermed redigere uten å bryte funksjonaliteten.
Også, når du klikker på Beskytt App igjen, selv uten å endre innstillingene, vil du legge merke til at innholdet i det beskyttede skriptet endres hver gang.
Jscramblers transformasjoner er polymorfe, sørge for at transformasjonene produserer en annen utgang hver gang. På denne måten, selv om noen var i stand til å hacke den gjeldende versjonen, neste gang du kjører koden din gjennom Jscrambler, ville disse endringene ikke lenger fungere.
Så langt har vi snakket om måter å sikre at søknaden fungerer som forventet ved å forhindre både brukeren og utenforstående å endre kildekoden. Men det er ikke den eneste trusselen mot søknaden du trenger å bekymre deg for.
Siden JavaScript har blitt populært i frittstående og mobile applikasjoner, har piratkopiering blitt et reelt problem også i dette rike.
Jeg er sikker på at vi alle har klikket "Se kilde" å lære å lage en kul ny effekt eller triks, og tilpasse det vi har lært til våre nettsteder. Det er ikke det jeg snakker om her.
I stedet la oss anta at du opprettet et populært mobilspill i HTML5 og JavaScript. Takket være JavaScript-portabiliteten kan du bruke den samme koden på Android, iOS og andre plattformer, og nå et større publikum uten at det ekstra arbeidet er å skrive innfødte versjoner for hvert miljø. Men det er et problem: alle kan kopiere JavaScript-koden, gjøre noen få modifikasjoner, og selge den som sin egen!
Transformasjonene i forrige trinn bidrar til å forhindre dette ved å gjøre koden vanskelig å lese og reversere. I tillegg til dem, legger Jscrambler kodefelt, funksjonalitet som gjør at koden beskytter seg selv.
La oss ta en titt på noen av dem.
I Jscrambler, i listen over transformasjoner, finner du en seksjon med tittelen Kode lås.
Transformasjonene i denne delen legger enda et lag med sikkerhet til JavaScript-programmet.
Ved å bruke dem kan du begrense utførelsen av koden din til et gitt sett med nettlesere, en tidsramme (nyttig for demoer som ikke skal kunne kjøre etter at forhåndsvisningsperioden er over), på et gitt domene (vanligvis din), og en bestemt operativsystem.
En kraftigere funksjon for å beskytte koden din er Client-side RASP (Runtime Application Self-Protection). Det endrer JavaScript-koden din, og gjør det til å forsvare seg fra kjøringen. For eksempel vil programmet slutte å fungere hvis noen prøver å åpne debuggeren.
Til slutt, i optimalisering seksjon, velg forminskning å redusere koden og gjøre filen mindre.
Deretter klikker du på Beskytt App, etterfulgt av Last ned app å laste ned kildekoden og bruke den i søknaden din.
Jscrambler følger oversikten din, så du kan alltid gå tilbake til en tidligere versjon.
Som vi har sett, konfigurerer du beskyttelsesnivået ved å merke av i boksene en for en er grei. Men du kan fremdeles øke arbeidsflyten din ved å gruppere dine vanlige kombinasjoner av transformasjoner i maler.
Når du har funnet et sett med transformasjoner som du vil lagre for fremtidig bruk, klikker du Opprett mal på bunnen av Applikasjon innstillinger seksjon.
Jscrambler vil be deg om å gi malen et navn og en beskrivelse.
Skriv inn noe beskrivende for fremtiden, og klikk på Lagre mal.
Du kan også bruke en av malene som allerede er tilgjengelige på Dine maler tab:
Flytt musepekeren over malnavnene for å lese mer om dem og forstå når de gir mening. Klikk deretter på dem for å se hvilke transformasjoner de gjelder for koden din.
Så langt har vi dekket noen måter der Jscrambler kan hjelpe deg med å beskytte din søknad ved hjelp av webgrensesnittet. Mens grensesnittet er intuitivt, ettersom søknaden din vokser, vil du ha noe mer grei.
Også, som jeg nevnte tidligere, er Jscrambler polymorf, som genererer en annen utgang hver gang. Så det er nyttig å kjøre verktøyet igjen nå og da, selv om det ikke er noen endringer i de bestemte filene.
For å gjøre dette, la oss se på Jscrambler kommandolinjeverktøy.
Først last ned og installer kommandolinjeverktøyet ved hjelp av npm. Skriv inn på kommandolinjen din:
sudo npm installer -g jscrambler
Når installasjonen er fullført, gå tilbake til programmene dine i Jscrambler admin.
Legg merke til at for å bruke kommandolinjeverktøyet, må du bruke en faktisk applikasjon i stedet for lekeplassskriptet. Så, hvis du ikke har et program ennå, opprett en nå.
Etter å ha valgt transformasjonene du vil bruke, klikker du på nedlastningsknappen øverst til høyre på siden. Dette vil laste ned innstillingene til datamaskinen som en JSON-fil.
Kopier JSON-filen til prosjektet ditt. Ikke forplikte det til versjonskontroll som filen inneholder API-nøkkelen din og hemmelighet for bruk av Jscrambler API.
Kjør deretter jscrambler
kommandoen for å utføre transformasjonene på JavaScript-filene dine.
For eksempel, hvis du bare har en fil, test.js
, du kan kjøre følgende kommando:
$ jscrambler -c jscrambler.json -o test.protected.js test.js
I kommandoen passerte du i JSON-filen som inneholder dine programinnstillinger ved hjelp av -c
parameter, etterfulgt av utdatafilen (-o test.protected.js
), og til slutt JavaScript-filen for å beskytte.
Hvis du vil kjøre beskyttelsen for alle JavaScript-filer i prosjektkatalogen, kan du bruke noe slikt:
$ jscrambler -c jscrambler.json -o beskyttet / ** / *. js
I dette eksemplet definerer du i stedet for en utdatafil en katalog (beskyttet
) der Jscrambler vil plassere resultatene av beskyttelsen.
Nå trenger du ikke å gå tilbake til Jscramblers webgrensesnitt hver gang du gjør endringer i JavaScript-filene dine. Dette vil gjøre det mer sannsynlig at du vil huske trinnet, og dermed holde søknaden din trygg.
Som en ytterligere forbedring, kan du også sette opp Jscrambler-oppgaven å løpe når det er endringer i skriptene dine, for eksempel ved hjelp av Grunt. Eller det kan til og med være en oppgave på din kontinuerlige integrationsserver, som kjører når en ny versjon av koden er forpliktet.
Jscrambler tilbyr cutting edge verktøy for å gjøre det vanskelig for kjeksere, bedrager og skadelig programvare for å injisere uønsket funksjonalitet til din søknad eller endre programmets variabler. Det gjør det også vanskelig for andre å kopiere koden og omfordele den som sin egen.
Sikkerhet er et komplekst felt med flere ulike trusler å vurdere. Så når JavaScript-koden snakker til en server, er den beste løsningen å bruke en kombinasjon av beste praksis for serverutvikling, robust parametervalidering, og en JavaScript-sikkerhetsplattform som Jscrambler for å gjøre klienten tamperbestandig. På denne måten kan du forhindre at de fleste angrepene mot programmets integritet allerede er i klienten og sørge for at kundene får den opplevelsen du har laget for at de skal ha.
Jscrambler kan også hjelpe deg med å beseire angrep mot menneske i nettleseren (MitB) og svindel, bots, 0-dagers trusler og APT (Advanced Persistent Threats) ved å oppdage endringer i DOM og gi deg all den informasjonen du trenger for å stoppe disse angrepene. For mer informasjon, vennligst kontakt [email protected].
For mer informasjon om Jscrambler, de nye funksjonene og de nyeste oppdateringene, kan du også besøke Jscrambler nettsiden.