In de afgelopen jaren heeft JavaScript, als platformonafhankelijke taal, zijn weg gevonden naar een breed scala aan toepassingen, gaande van mobiele applicaties tot HTML5-gebaseerde games en Node.js-servers. Lang geleden zijn de dagen dat je alleen JavaScript hebt gebruikt voor speciale effecten en formuliervalidatie.
Deze ontwikkeling is goed voor zowel ontwikkelaars als consumenten, die snellere updates voor hun toepassingen krijgen, ongeacht het platform waarop ze zich bevinden.
Maar het roept ook vragen op over beveiliging.
Hoe kunnen we ervoor zorgen dat onze applicaties werken zoals bedoeld? Hoe handhaven we onze licenties? En hoe zit het met piraterij?
In deze zelfstudie bekijken we de meest voorkomende bedreigingen voor uw JavaScript-toepassingen en hoe u hiertegen kunt beschermen. We zullen ook kijken naar de stappen in het maken van Jscrambler 4.0 een deel van uw ontwikkelworkflow om uw JavaScript-toepassingen eenvoudig te beveiligen.
Omdat JavaScript meestal online wordt gebruikt, is de natuurlijke plaats om te beginnen de connectiviteit tussen de toepassing die wordt uitgevoerd op de apparaten van uw gebruikers en uw server.
Laat me dit als eerste uit de weg ruimen: ongeacht hoe goed de bescherming aan de clientzijde is, u moet altijd uitgaan van de veronderstelling dat de client kan worden gecompromitteerd. Sommigen gaan zo ver om te zeggen dat je de cliënt als kwaadaardig moet behandelen.
Fundamenteel is de reden hiervoor dat ongeacht hoe goed je je client beveiligt, altijd kan worden geknoeid met de HTTP-communicatie tussen de JavaScript-client en je server, met behulp van tools voor het snuiven van aanvragen of zelfs op maat gemaakte clients die je gebruiken serverprotocollen.
Dus, als uw toepassing met een server praat, voordat u een andere vorm van client-side beveiliging toevoegt, begin dan met het beveiligen van uw server zoveel als mogelijk, net zoals u zou doen bij het gebruik van een normale HTML-interface..
U kunt denken aan het beveiligen van uw server via twee concepten: gegevensintegriteit en vertrouwelijkheid van gegevens.
Data-integriteit betekent dat de gegevens in uw applicatie tijdens de levenscyclus accuraat en consistent moeten blijven. Vertrouwelijkheid van gegevens betekent dat de gegevens van uw gebruikers veilig moeten blijven en dat derden er nooit toegang toe zouden moeten hebben.
Hoewel u al parametervalidatie in de JavaScript-client zou moeten doen, kan dit niet voorkomen dat hackers misvormde of zelfs schadelijke gegevens naar uw server verzenden. Per slot van rekening zal iemand die op zoek is naar het verbreken van uw server waarschijnlijk uw gebruikersinterface zelfs niet gebruiken!
Dus, wanneer u met een JavaScript-toepassing werkt, zijn alle reguliere server-side validaties, van het ontsnappen van HTML-tekens tot het controleren of de kenmerken van het juiste type zijn, nog steeds van toepassing.
Soms zijn de verzonden gegevens correct geformatteerd, maar zijn ze niet logisch in de staat van de toepassing, bijvoorbeeld wanneer een speler een onmogelijk hoge score indient. U kunt uw server beschermen tegen dergelijke situaties door gebruik te maken van sanitaire controles en zo veel mogelijk van de logica van de toepassing op de server te plaatsen.
Een ander onderdeel van het beveiligen van de client-servercommunicatie is ervoor te zorgen dat alle gebruikerspecifieke gegevens vertrouwelijk blijven en alleen toegankelijk zijn voor de geautoriseerde gebruiker.
De eerste stap is om SSL te gebruiken in alle communicatie tussen uw JavaScript-client en uw server om te voorkomen dat anderen op het internet de gegevens doorgeven die tussen de twee worden doorgegeven.
Vervolgens moet u valideren dat de verzoeken inderdaad afkomstig zijn van de juiste gebruiker. De details om dit het beste te doen, zijn afhankelijk van uw toepassing. In webgebaseerde applicaties zijn nonces een nuttige techniek, terwijl in de context van een game OAuth-authenticatie een meer natuurlijke benadering kan zijn.
Houd er rekening mee dat u nooit gevoelige informatie zoals wachtwoorden of API-sleutels in uw client mag opslaan. Het is een goed idee om uw server te beschouwen als een API die kan worden gebruikt door de JavaScript-client, maar ook door andere clients op internet.
Hoewel de hierboven genoemde controles van toepassing zijn op elk type toepassing, worden complexiteitsbeperkingen bij het toevoegen van complexiteit aan de client moeilijker.
In multiplayer-games werkt het bijvoorbeeld goed om alle logica via je server te gebruiken zolang het spel maar eenvoudig is en je maar een beperkt aantal spelers hebt. Maar naarmate de actieve gebruikersgroep groeit, zal de belasting op de server u de mogelijkheid doen overwegen om een deel van de verwerking naar de klant te verplaatsen. Hetzelfde gebeurt als uw spellogica zo complex is dat het simuleren van het op de server veel bronnen kost.
Dat is waar de grenzen vervagen.
Hoewel het idee om de cliënt nooit te vertrouwen goed klinkt, moet je in de praktijk een drempel instellen door te zeggen "dit is hoeveel ik mijn cliënt vertrouw" en alleen sanitaire controles uit te voeren op de server. Als sommige acties van de speler ook van invloed zijn op andere spelers, moet u de server daar meer bij betrekken, waarbij u de plaatsen verlaat waar de gebruiker alleen zijn of haar eigen ervaring kan verwonden met de klant.
En de vele JavaScript-casussen waarvoor u geen server hebt of waar het plaatsen van de toepassingslogica op de server geen zin heeft, zoals mobiele apps, HTML5-streamingspelers en kaarttoepassingen??
Ten slotte is het goed om te onthouden dat, ongeacht hoe goed u uw server beveiligt, uw JavaScript-client altijd wordt weergegeven. Dus, tenzij je er een soort van bescherming aan toevoegt, is het heel gemakkelijk voor een aanvaller (bijvoorbeeld man-in-the-browser of data-exfiltratie-aanvallen) om toegang te krijgen tot gevoelige gegevens of om de gebruikerservaring aan te passen..
Als een dynamische taal kan JavaScript in de browser worden aangepast met behulp van basishulpmiddelen zoals de ingebouwde foutopsporing van de browser. Als u weet wat u doet, kunt u delen van de code vervangen en het gedrag van de toepassing onmiddelijk wijzigen.
Zoals we hierboven hebben gezien, moet u ervoor zorgen dat ongeldige gegevens nooit in de database op uw server terechtkomen. Maar sommige veranderingen zijn meer beperkt dan dit. Een malware-invoegtoepassing kan nieuwe knoppen aan uw toepassing toevoegen om de gebruiker naar een externe site te lokken. Of de gebruiker kan de client hacken om meer van het spel te zien zonder het te spelen.
Veranderingen zoals deze zullen je hele applicatie niet breken, maar ze zullen de manier waarop de gebruiker het ervaart veranderen. In het geval van malware kan dit ook een ernstige bedreiging vormen voor de privacy van de gebruiker.
Omdat JavaScript een geïnterpreteerde taal is, is dit onmogelijk volledig te voorkomen. Een toegewijde hacker zal altijd een manier vinden om voorbij de obstakels te komen, net zoals een inbreker een slot kan doorbreken. Maar we kunnen het zo moeilijk maken dat de meeste gebruikers de juiste methoden gebruiken (zoals het verbeteren van je spel) in plaats van de toepassing te hacken.
Dit is waar Jscrambler u kan helpen.
Jscrambler is een JavaScript-beveiligingsplatform dat ervoor moet zorgen dat JavaScript-toepassingen worden uitgevoerd zoals ze zijn ontwikkeld.
Om Jscrambler een kans te geven, bezoekt u de startpagina en meldt u zich aan voor een gratis proefperiode. Als u vindt dat het aan uw verwachtingen voldoet, kunt u later een van de betaalde plannen kiezen.
Wanneer aangemeld, als er een sms-bericht is "Een nieuwe versie van Jscrambler is nu beschikbaar" bovenaan de pagina betekent dit dat u nog steeds de oude versie ziet. Klik op Probeer het nu.
Jscrambler 4 organiseert uw werk in toepassingen, die elk kunnen bestaan uit een of meer JavaScript-bestanden. Dus nu zie je het scherm voor het selecteren van de applicatie om aan te werken.
Als u de functionaliteit wilt testen met een eigen JavaScript-toepassing, klikt u op Maak een app.
Laten we voorlopig echter kiezen Speelplaats. In deze modus kunt u alle transformaties op een voorbeeldscript proberen, terwijl de transformaties die u op uw daadwerkelijke toepassing kunt toepassen, worden beperkt door uw abonnementsniveau.
Aan de linkerkant ziet u de Bestandsstructuur, een lijst met bestanden in uw toepassing en een Toevoegen knop voor het importeren of maken van nieuwe bestanden. In de speeltuin is de knop Toevoegen uitgeschakeld.
Aan de rechterkant is er een menu voor het kiezen van de Taalspecificaties en Toepassingsmodus voor je app. Jscrambler gebruikt ze om ervoor te zorgen dat de getransformeerde code in uw geselecteerde omgeving werkt, rekening houdend met de beperkingen en mogelijkheden ervan.
We gaan nu mee ES5 en een basis Webbrowser-app.
Klik op de bestandsnaam (clock.js
) om ermee aan de slag te gaan.
De inhoud van het bestand wordt in het midden van het scherm weergegeven: de broncode aan de linkerkant en de versie getransformeerd door Jscrambler aan de rechterkant.
Selecteer vervolgens de Codetransformaties Klik op het recht om een lijst met beschikbare transformaties te onthullen. Met Jscrambler kunt u de transformaties kiezen die u relevant vindt voor uw code. U kunt zelfs annotaties in uw code gebruiken om de manier te wijzigen waarop een deel van de code wordt getransformeerd. Dat kan handig zijn in prestatie-kritische codeblokken, bijvoorbeeld het renderen van functies in games.
Als u de transformaties wilt testen, selecteert u ze één voor één. Klik vervolgens op Bescherm app onderaan het venster om een nieuwe versie van uw getransformeerde code te maken.
Naast de knop ziet u een meter met de gevolgen van deze wijzigingen voor uw JavaScript-code.
In de meter ziet u drie pictogrammen, die de kosten, veerkracht en potentie vertegenwoordigen (van links naar rechts gaan in de schermopname hierboven) van de transformaties die u voor uw toepassing hebt geselecteerd.
Schakel het selectievakje vóór in om aan de slag te gaan Controlestroom, en klik vervolgens op Bescherm app.
De Control Flow Flattening is een van de krachtige nieuwe transformaties die is toegevoegd in Jscrambler 4. Het zorgt voor een afvlakking van de besturingsstroom van het script, zodat het moeilijk wordt voor een persoon die de code leest om de logica van uw toepassing te volgen.
Ga vervolgens verder met het selecteren van nog meer versluieringsopties. Naarmate u meer toevoegt, merkt u dat uw code steeds moeilijker leesbaar wordt en dus bewerkt zonder dat de functionaliteit ervan wordt verbroken.
Ook als u op klikt Bescherm app nogmaals, zelfs zonder de instellingen te wijzigen, zult u merken dat de inhoud van het beveiligde script elke keer verandert.
De transformaties van Jscrambler zijn dat polymorfe, ervoor zorgen dat de transformaties elke keer een andere output produceren. Op deze manier, zelfs als iemand de huidige versie kon hacken, de volgende keer dat u uw code via Jscrambler uitvoert, werken die wijzigingen niet meer.
Tot nu toe hebben we gesproken over manieren om ervoor te zorgen dat uw toepassing werkt zoals verwacht door te voorkomen dat zowel de gebruiker als buitenstaanders uw broncode wijzigen. Maar dat is niet de enige bedreiging voor uw toepassing waarover u zich zorgen moet maken.
Omdat JavaScript populair is geworden in zelfstandige en mobiele applicaties, is piraterij ook in dit rijk een echt probleem geworden.
Ik weet zeker dat we allemaal hebben geklikt "Bron bekijken" om te leren hoe een cool nieuw effect of trick te doen, en aangepast wat we hebben geleerd op onze websites. Dat is niet waar ik het hier over heb.
Laten we er in plaats daarvan van uitgaan dat je een populaire mobiele game hebt gemaakt in HTML5 en JavaScript. Dankzij de draagbaarheid van JavaScript kunt u dezelfde code op Android, iOS en andere platforms gebruiken en een groter publiek bereiken zonder extra werk te hoeven maken van het schrijven van native versies voor elke omgeving. Maar er is een probleem: iedereen kan uw JavaScript-code kopiëren, een paar wijzigingen aanbrengen en deze als zijn eigen verkopen!
De transformaties in de vorige stap helpen dit voorkomen door de code moeilijk leesbaar te maken en reverse-engineeren. In aanvulling hierop voegt Jscrambler code traps toe, functionaliteit waardoor de code zichzelf beschermt.
Laten we een paar van hen eens bekijken.
In Jscrambler, in de lijst met transformaties, vindt u een sectie getiteld Codesloten.
De transformaties in deze sectie voegen nog een extra beveiligingslaag toe aan uw JavaScript-toepassing.
Met behulp hiervan kunt u de uitvoering van uw code beperken tot een bepaalde set browsers, een tijdsbestek (handig voor demo's die niet moeten worden uitgevoerd nadat de preview-periode voorbij is), op een bepaald domein (meestal van u) en een bepaald besturingssysteem.
Nog een krachtige functie voor het beschermen van uw code is Client-kant RASP (Runtime Application Self-Protection). Het past uw JavaScript-code aan, waardoor deze zich verdedigt tegen runtime-sabotage. De toepassing stopt bijvoorbeeld met werken als iemand de foutopsporing probeert te openen.
Eindelijk, in de optimalisatie sectie, selecteer minification om de code te verkleinen en het bestand kleiner te maken.
Klik vervolgens op Bescherm app, gevolgd door Download app om de broncode te downloaden en te gebruiken in uw applicatie.
Jscrambler houdt uw transformatiegeschiedenis bij, zodat u altijd terug kunt gaan naar een eerdere versie.
Zoals we hebben gezien, is het eenvoudig om uw beveiligingsniveau te configureren door vakjes één voor één te selecteren. Maar u kunt uw workflow nog steeds versnellen door uw gebruikelijke combinaties van transformaties in sjablonen te groeperen.
Zodra u een reeks transformaties hebt gevonden die u wilt opslaan voor toekomstig gebruik, klikt u op Sjabloon maken onderaan de Applicatie instellingen sectie.
Jscrambler zal u vragen om uw sjabloon een naam en beschrijving te geven.
Typ iets beschrijvend voor de toekomst en klik op Sjabloon opslaan.
U kunt ook een van de sjablonen gebruiken die al beschikbaar zijn op de Uw sjablonen tab:
Beweeg uw muisaanwijzer boven de sjabloonnamen om meer over ze te lezen en te begrijpen wanneer ze logisch zijn. Klik er vervolgens op om te zien welke transformaties ze op uw code toepassen.
Tot nu toe hebben we enkele manieren besproken waarop Jscrambler u kan helpen uw toepassing te beschermen met behulp van de web-UI. Hoewel de interface intuïtief is, zult u naarmate uw toepassing groeit, iets eenvoudiger willen.
Zoals ik eerder al zei, is Jscrambler polymorf, waardoor elke keer een andere output wordt gegenereerd. Het is dus handig om de tool zo nu en dan opnieuw uit te voeren, zelfs als er geen wijzigingen in de specifieke bestanden zijn.
Laten we hiervoor het opdrachtregelprogramma van Jscrambler bekijken.
Download en installeer eerst het opdrachtregelhulpprogramma met behulp van npm. Typ op de opdrachtregel:
sudo npm install -g jscrambler
Zodra de installatie is voltooid, gaat u terug naar uw toepassingen in de Jscrambler-beheerder.
Merk op dat om de commandoregel te gebruiken, je een echte applicatie moet gebruiken in plaats van het speeltuintje. Dus, als je nog geen applicatie hebt, maak er nu een aan.
Na het selecteren van de transformaties die u wilt toepassen, klikt u op de downloadknop in de rechterbovenhoek van de pagina. Hiermee worden uw instellingen naar uw computer gedownload als een JSON-bestand.
Kopieer het JSON-bestand naar uw project. Verbind het niet met versiebeheer aangezien het bestand uw API-sleutel en geheim bevat voor het gebruik van de Jscrambler API.
Voer dan de jscrambler
opdracht om de transformaties op uw JavaScript-bestanden uit te voeren.
Bijvoorbeeld als u slechts één bestand hebt, test.js
, je kunt de volgende opdracht uitvoeren:
$ jscrambler -c jscrambler.json -o test.protected.js test.js
In de opdracht hebt u het JSON-bestand met uw toepassingsinstellingen doorgegeven met behulp van de -c
parameter, gevolgd door het uitvoerbestand (-o test.protected.js
) en ten slotte het JavaScript-bestand dat moet worden beschermd.
Als u de beveiliging voor alle JavaScript-bestanden in de projectdirectory wilt uitvoeren, kunt u zoiets als dit gebruiken:
$ jscrambler -c jscrambler.json -o protected / ** / *. js
In dit voorbeeld definieert u in plaats van een uitvoerbestand een map (beschermde
) waar Jscrambler de resultaten van de beveiliging zal plaatsen.
Nu hoeft u niet telkens terug te gaan naar de webinterface van Jscrambler als u wijzigingen in uw JavaScript-bestanden aanbrengt. Dit maakt het waarschijnlijker dat je de stap onthoudt en dus je applicatie veilig houdt.
Als een verdere verbetering kunt u ook de Jscrambler-taak instellen om uit te voeren wanneer er wijzigingen in uw scripts zijn, bijvoorbeeld met Grunt. Of het kan zelfs een taak zijn op uw continue integratieserver, die wordt uitgevoerd wanneer een nieuwe versie van de code is vastgelegd.
Jscrambler biedt geavanceerde hulpmiddelen om het voor crackers, cheaters en malware moeilijk te maken om ongewenste functionaliteit in uw toepassing te injecteren of de variabelen van uw toepassing te wijzigen. Het maakt het ook moeilijk voor anderen om uw code te kopiëren en ze opnieuw te verspreiden als hun eigen code.
Beveiliging is een complex veld met meerdere verschillende bedreigingen om te overwegen. Dus wanneer uw JavaScript-code met een server spreekt, is de beste oplossing om een combinatie van beste praktijken voor serverontwikkeling, robuuste parametervalidatie en een JavaScript-beveiligingsplatform zoals Jscrambler te gebruiken om de client fraudebestendig te maken. Op deze manier kunt u de meeste aanvallen op de integriteit van uw toepassing al in de client voorkomen en ervoor zorgen dat uw klanten de ervaring krijgen die u voor hen heeft ontworpen..
Jscrambler kan je ook helpen om Man-in-the-Browser (MitB) -aanvallen en fraude, bots, 0-daagse dreigingen en APT (Advanced Persistent Threats) te verslaan door wijzigingen in de DOM te detecteren en je alle informatie te geven die je nodig hebt om stop deze aanvallen. Neem voor meer informatie contact op met [email protected].
Voor meer informatie over Jscrambler, de nieuwe functies en de nieuwste updates, kunt u ook de Jscrambler-website bezoeken.