În ultimii ani, ca limbă independentă de platformă, JavaScript și-a găsit drumul spre o gamă largă de utilizări, de la aplicații mobile până la jocuri bazate pe HTML5 și servere Node.js. Au trecut mult timp zilele în care ați folosit doar JavaScript pentru efectele speciale și validarea formularului.
Această evoluție este bună atât pentru dezvoltatori, cât și pentru consumatori, care obțin actualizări mai rapide în aplicațiile lor, indiferent de platforma pe care se află.
Dar ridică, de asemenea, întrebări legate de securitate.
Cum putem să ne asigurăm că aplicațiile noastre funcționează conform destinației? Cum punem în aplicare licențele noastre? Și pirateria?
În acest tutorial, vom examina cele mai frecvente amenințări la adresa aplicațiilor dvs. JavaScript și cum puteți să le protejați. Vom analiza, de asemenea, pașii în a face Jscrambler 4.0 o parte din fluxul de lucru al dezvoltării pentru a vă menține cu ușurință aplicațiile JavaScript.
Pe măsură ce JavaScript este folosit în cea mai mare parte online, locul natural pe care trebuie să-l începeți este conectivitatea dintre aplicația care rulează pe dispozitivele utilizatorilor și pe serverul dvs..
În primul rând, permiteți-mi să scap de asta: indiferent de cât de bună protecție adăugați pe partea clientului, întotdeauna trebuie să începeți cu presupunerea că clientul poate fi compromis. Unii merg atât de departe încât să spună că trebuie să tratați clientul ca fiind rău intenționat.
În mod fundamental, motivul pentru aceasta este că, indiferent cât de bine vă asigurați clientul dvs., comunicarea HTTP între clientul JavaScript și serverul dvs. poate fi întotdeauna manipulată, cu ajutorul unor instrumente de solicitare-sniffing sau chiar de clienți personalizați care utilizează protocoalele serverului.
Deci, dacă aplicația dvs. vorbește cu un server, înainte de a adăuga orice altă formă de securitate pe partea clientului, începeți prin a vă asigura serverul cât mai mult posibil - la fel cum ați proceda atunci când utilizați o interfață HTML obișnuită.
Vă puteți gândi să vă asigurați serverul prin două concepte: integritatea datelor și confidențialitatea datelor.
Integritatea datelor înseamnă că datele din aplicația dvs. ar trebui să rămână corecte și consecvente pe durata ciclului de viață. Confidențialitatea datelor înseamnă că datele utilizatorilor dvs. ar trebui să rămână sigure, iar terțele părți nu ar trebui să aibă acces la acestea.
În timp ce ar trebui să faceți validarea parametrilor deja în clientul JavaScript, acest lucru nu va împiedica hackerii să trimită pe server serverul dvs. date eronate sau chiar rău intenționate. La urma urmei, cineva care caută să spargă serverul dvs. probabil că nici măcar nu va folosi interfața dvs. utilizator!
Deci, atunci când lucrăm cu o aplicație JavaScript, toate validările actuale de la server, de la scăparea de caractere HTML la verificarea atributelor sunt de tip corect, se aplică în continuare.
Uneori, datele trimise sunt corect formatate, dar nu au sens în starea aplicației - de exemplu, când un jucător prezintă un scor incredibil de mare. Puteți să vă protejați serverul împotriva unor astfel de situații, utilizând controale sanitare și plasând cât mai mult din logica aplicației pe server.
O altă parte a securizării comunicării client-server se face că toate datele specifice utilizatorului rămân confidențiale și accesibile numai de către utilizatorul autorizat.
Primul pas este să utilizați SSL în întreaga comunicare între clientul dvs. JavaScript și serverul dvs. pentru a împiedica pe alții de pe internet să spioneze datele transmise între cele două.
Apoi, va trebui să confirmați că cererile provin într-adevăr de la utilizatorul corect. Detaliile despre modul în care puteți face acest lucru cel mai bine depind de aplicația dvs. În aplicațiile bazate pe web, noncesurile sunt o tehnică utilă, în timp ce în contextul unui joc autentificarea OAuth ar putea fi o abordare mai naturală.
Rețineți că nu trebuie să stocați niciodată informații delicate, cum ar fi parole sau chei API, în clientul dvs. Este o idee bună să vă gândiți la serverul dvs. ca un API care poate fi utilizat de clientul JavaScript, dar și de alți clienți de pe Internet.
În timp ce verificările menționate mai sus se aplică fiecărui tip de aplicație, când se adaugă o mai mare complexitate clientului, unele verificări devin greu de făcut.
În jocurile multiplayer, de exemplu, executarea întregii logici prin serverul dvs. va funcționa atât timp cât jocul este simplu și aveți doar un număr limitat de jucători. Dar, pe măsură ce crește baza de utilizatori activă, încărcarea de pe server vă va face să considerați posibilitatea mutării unei părți din procesare către client. Același lucru se întâmplă dacă logica jocului dvs. este atât de complexă încât simularea pe server ar ocupa o mulțime de resurse.
Acolo unde granițele devin neclare.
În timp ce ideea de a nu mai avea încredere în client sună bine, în practică va trebui să setați un prag, spunând "cât de mult am încredere în clientul meu" și doar verificările de sănătate pe server. Dacă unele acțiuni ale jucătorului afectează și alți jucători, acolo trebuie să implicați mai mult serverul, lăsând locurile în care utilizatorul poate dăuna doar clientului experiența proprie.
Și cum rămâne cu multe cazuri de utilizare a JavaScript în care nu aveți un server sau unde introducerea logicii aplicației pe server nu are sens, cum ar fi aplicațiile mobile, playerele de streaming HTML5 și aplicațiile de hartă?
În cele din urmă, este bine să rețineți că, indiferent cât de bine vă asigurați serverul, clientul dvs. JavaScript este întotdeauna expus. Deci, dacă nu adăugați un fel de protecție, este foarte ușor ca un atacator (de exemplu, Man-in-the-Browser sau atacurile de exfiltrație a datelor) să aibă acces la date sensibile sau să modifice experiența utilizatorului.
Ca limbă dinamică, JavaScript poate fi modificat în browser utilizând instrumente de bază, cum ar fi programul de depanare încorporat al browserului. Dacă știți ce faceți, puteți să înlocuiți părți din cod și să schimbați comportamentul aplicației în zbor.
După cum am văzut mai sus, trebuie să vă asigurați că datele nevalide nu o fac niciodată în baza de date de pe serverul dvs. Dar unele schimbări sunt mai restricționate decât acestea. Un plugin malware poate adăuga noi butoane la aplicația dvs. pentru a atrage utilizatorul într-un site extern. Sau utilizatorul ar putea hack client pentru a vedea mai mult de joc, fără să-l joace.
Modificările de acest gen nu vor întrerupe întreaga aplicație, dar vor schimba modul în care utilizatorul o va experimenta. În cazul malware-ului, aceasta poate reprezenta o amenințare gravă la adresa confidențialității utilizatorului.
Deoarece JavaScript este un limbaj interpretat, acest lucru este imposibil de prevenit în întregime. Un hacker dedicat va găsi întotdeauna o cale de a trece peste obstacole, la fel cum un spărgător poate sparge orice blocare. Dar putem face o rupere atât de greu încât majoritatea utilizatorilor vor folosi metode adecvate (cum ar fi obținerea unui bun la joc), mai degrabă decât hack-ul aplicației.
Aici Jscrambler vă poate ajuta.
Jscrambler este o platformă de securitate JavaScript care își propune să se asigure că aplicațiile JavaScript sunt executate așa cum au fost dezvoltate.
Pentru a oferi Jscrambler o încercare, vizitați pagina sa de pornire și înscrieți-vă pentru o încercare gratuită. Dacă găsiți că respectă așteptările dvs., puteți alege mai târziu unul dintre planurile plătite.
Când sunteți conectat, dacă există un text care să spună "O nouă versiune de Jscrambler este acum disponibilă" în partea de sus a paginii, înseamnă că mai vedeți versiunea veche. Click pe Încearcă acum.
Jscrambler 4 vă organizează munca în aplicații, fiecare dintre acestea putând fi alcătuite dintr-unul sau mai multe fișiere JavaScript. Deci, în continuare, veți vedea ecranul pentru selectarea aplicației pentru a funcționa.
Dacă doriți să testați funcționalitatea utilizând o aplicație JavaScript, faceți clic pe Creați aplicația.
Pentru moment, totuși, să alegem Loc de joaca. În acest mod, veți încerca toate transformările pe un exemplu de script, în timp ce transformările pe care le puteți aplica aplicației dvs. reale sunt limitate de nivelul dvs. de abonament.
În stânga, veți vedea Arborele fișierului, o listă de fișiere din aplicația dvs. și o listă de fișiere din aplicația dvs. Adăuga pentru importarea sau crearea de fișiere noi. În spațiul de joacă, butonul Adăugare este dezactivat.
În partea dreaptă, există un meniu pentru alegerea Specificații de limbă și Modul de aplicare pentru aplicația dvs. Jscrambler le folosește pentru a vă asigura că codul transformat va funcționa în mediul selectat, luând în considerare limitările și posibilitățile sale.
Vom merge acum ES5 și o bază Aplicația Web Browser.
Faceți clic pe numele fișierului (clock.js
) pentru a începe să lucrați la el.
Conținutul fișierului va fi afișat în mijlocul ecranului: codul sursă din stânga și versiunea transformată de Jscrambler în partea dreaptă.
Apoi, selectați Transformări de cod fila din dreapta pentru a dezvălui o listă cu transformările disponibile. Jscrambler vă permite să alegeți transformările pe care le găsiți relevante pentru codul dvs. Puteți chiar să folosiți adnotări în codul dvs. pentru a schimba modul în care se transformă o parte din cod. Acest lucru poate fi util în blocurile de cod critice de performanță, de exemplu funcțiile de redare în jocuri.
Pentru a testa transformările, selectați-le una câte una. Apoi faceți clic pe Protejați aplicația în partea de jos a ferestrei pentru a crea o nouă versiune a codului dvs. transformat.
În dreptul butonului, veți vedea un contor prezentând efectele acestor modificări asupra codului dvs. JavaScript.
În contor, veți vedea trei pictograme, reprezentând costul, reziliența și potența (mergând de la stânga la dreapta în imaginea de mai sus) a transformărilor pe care le-ați selectat pentru aplicația dvs..
Pentru a începe, bifați caseta de selectare din fața Control Flow, apoi faceți clic pe Protejați aplicația.
Controlarea fluxului de control este una dintre noile transformări puternice adăugate în Jscrambler 4. Acesta aliniază fluxul de control al scriptului astfel încât devine greu pentru o persoană care citește codul să urmeze logica aplicației.
Apoi, continuați prin selectarea mai multor opțiuni de obfuscare. Pe măsură ce adăugați mai multe, veți observa cum devine din ce în ce mai greu să citiți codul dvs. - și, prin urmare, să îl editați fără a-i rupe funcționalitatea.
De asemenea, când faceți clic pe Protejați aplicația din nou, chiar fără a modifica setările, veți observa că conținutul scriptului protejat se modifică de fiecare dată.
Transformările lui Jscrambler sunt polimorfă, asigurându-vă că transformările produc o ieșire diferită de fiecare dată. În acest fel, chiar dacă cineva a reușit să hackze versiunea curentă, data viitoare când executați codul prin Jscrambler, aceste modificări nu vor mai funcționa.
Până acum, am vorbit despre modalități de a vă asigura că aplicația dvs. funcționează conform așteptărilor, împiedicând atât utilizatorii, cât și cei din afară să vă modifice codul sursă. Dar asta nu este singura amenințare la adresa cererii pe care trebuie să vă faceți griji.
Dat fiind că JavaScript a devenit popular în aplicații independente și mobile, pirateria a devenit o problemă reală și în acest domeniu.
Sunt sigur că am făcut clic pe toate "Vizualizare sursă" pentru a afla cum să faceți un nou efect sau un truc nou și să adaptați ceea ce am învățat site-urile noastre. Despre asta nu vorbesc aici.
În schimb, să presupunem că ați creat un joc mobil popular în HTML5 și JavaScript. Datorită portabilității JavaScript, puteți utiliza același cod pe platformele Android, iOS și alte platforme și puteți ajunge la o audiență mai largă, fără ca munca suplimentară de a scrie versiuni native pentru fiecare mediu. Dar există o problemă: oricine poate să vă copieze codul JavaScript, să facă câteva modificări și să-l vândă ca pe propriile lor!
Transformările din etapa anterioară ajută la prevenirea acestui lucru, făcând codul greu de citit și inversat. Pe lângă acestea, Jscrambler adaugă capcane de cod, funcționalitate care face ca codul să se protejeze.
Să aruncăm o privire asupra unora dintre ei.
În Jscrambler, în lista de transformări, veți găsi o secțiune intitulată Blocări de coduri.
Transformările din această secțiune adaugă încă un nou nivel de securitate aplicației dvs. JavaScript.
Folosindu-le, puteți limita execuția codului dvs. într-un anumit set de browsere, un interval de timp (util pentru demo-uri care nu ar trebui să poată fi executat după terminarea perioadei de previzualizare), pe un anumit domeniu (de obicei al dvs.) și sistem de operare special.
O caracteristică mai puternică pentru protejarea codului dvs. este clientul ZĂNGĂNIT (Auto-protecția aplicației în timpul aplicării). Modifică codul dvs. JavaScript, făcându-l să se apere de la manipularea în executare. De exemplu, aplicația va înceta să funcționeze dacă cineva încearcă să deschidă programul de depanare.
În cele din urmă, în Optimizare secțiune, selectați minification pentru a minimiza codul și a face fișierul mai mic.
Apoi faceți clic pe Protejați aplicația, urmat de Descărcați aplicația pentru a descărca codul sursă și a le utiliza în aplicația dvs..
Jscrambler ține evidența istoriei dvs. de transformare, astfel încât să vă puteți întoarce întotdeauna la o versiune anterioară.
După cum am văzut, configurarea nivelului dvs. de protecție prin selectarea casetelor de selectare unul câte unul este simplă. Dar puteți totuși să vă accelerați fluxul de lucru prin gruparea combinațiilor comune de transformări în șabloane.
După ce ați găsit un set de transformări pe care doriți să le stocați pentru utilizare ulterioară, faceți clic pe Creați șablon în partea de jos a Setările aplicației secțiune.
Jscrambler vă va solicita să oferiți șablonului un nume și o descriere.
Introduceți ceva descriptiv pentru viitor și faceți clic pe Salvați șablon.
De asemenea, puteți utiliza unul dintre șabloanele deja disponibile pe Șabloanele dvs. fila:
Mutați indicatorul mouse-ului deasupra numelor șablonului pentru a citi mai multe despre ele și pentru a înțelege când au sens. Apoi dați clic pe ele pentru a vedea ce transformări se aplică codului dvs..
Până acum, am acoperit câteva moduri în care Jscrambler vă poate ajuta să vă protejați aplicația folosind interfața web. În timp ce interfața este intuitivă, pe măsură ce aplicația dvs. crește, veți dori ceva mai simplu.
De asemenea, după cum am menționat mai devreme, Jscrambler este polimorfic, generând o ieșire diferită de fiecare dată. Deci, este util să rulați din nou unealta, chiar dacă nu există modificări ale fișierelor specifice.
Pentru a face acest lucru, să ne uităm la instrumentul de linie de comandă al lui Jscrambler.
Mai întâi, descărcați și instalați instrumentul de linie de comandă utilizând npm. În linia de comandă, tastați:
sudo npm instalați -g jscrambler
Odată ce instalarea este finalizată, reveniți la aplicațiile din administratorul Jscrambler.
Rețineți că pentru a utiliza instrumentul de linie de comandă, va trebui să utilizați o aplicație reală în locul scriptului pentru locurile de joacă. Deci, dacă nu aveți încă o aplicație, creați-o acum.
După selectarea transformărilor pe care doriți să le aplicați, faceți clic pe butonul de descărcare din colțul din dreapta sus al paginii. Aceasta va descărca setările pe computer ca fișier JSON.
Copiați fișierul JSON în proiectul dvs. Nu o obligați să verifice versiunea, deoarece fișierul conține cheia API și secretul pentru utilizarea API-ului Jscrambler.
Apoi rulați jscrambler
comanda pentru a executa transformările pe fișierele JavaScript.
De exemplu, dacă aveți doar un fișier, test.js
, puteți rula următoarea comandă:
$ jscrambler -c jscrambler.json -o test.protected.js test.js
În comandă, ați trecut în fișierul JSON care conține setările aplicației dvs. utilizând -c
, urmat de fișierul de ieșire (-o test.protected.js
) și, în final, fișierul JavaScript pentru a fi protejat.
Pentru a rula protecția pentru toate fișierele JavaScript din directorul proiectului, puteți folosi ceva similar:
$ jscrambler -c jscrambler.json -o protejat / ** / *. js
În acest exemplu, în loc de un fișier de ieșire, definiți un director (protejat
) unde Jscrambler va plasa rezultatele protecției.
Acum, nu trebuie să vă întoarceți la interfața web a lui Jscrambler de fiecare dată când faceți modificări în fișierele JavaScript. Acest lucru va face mai probabil ca dvs. să vă amintiți pasul, menținând astfel cererea sigură.
Ca o îmbunătățire ulterioară, ați putea seta sarcina Jscrambler să ruleze ori de câte ori există schimbări în scenariile dvs., de exemplu folosind Grunt. Sau ar putea fi chiar o sarcină pe serverul de integrare continuă, care rulează ori de câte ori este lansată o nouă versiune a codului.
Jscrambler oferă instrumente de ultimă oră pentru a face greu pentru crackers, cheaters și malware pentru a injecta funcționalități nedorite aplicației dvs. sau pentru a schimba variabilele aplicației. De asemenea, este dificil pentru alții să vă copieze codul și să îl redistribuie ca pe propriile lor.
Securitatea este un câmp complex cu multiple amenințări diferite de luat în considerare. Deci, atunci când codul dvs. JavaScript se referă la un server, cea mai bună soluție este să utilizați o combinație de cele mai bune practici de dezvoltare a serverului, validarea robustă a parametrilor și o platformă de securitate JavaScript, cum ar fi Jscrambler, pentru a face clientul să nu poată fi manipulat. În acest fel, puteți preveni majoritatea atacurilor împotriva integrității aplicației dvs. deja în client și asigurați-vă că clienții dvs. obțin experiența pe care ați conceput-o pentru a le avea.
Jscrambler vă poate ajuta, de asemenea, să învingeți atacurile și frauda, boții, amenințările de o zi și APT (amenințări persistente avansate) prin detectarea modificărilor făcute în DOM și oferindu-vă toate informațiile de care aveți nevoie opriți aceste atacuri. Pentru mai multe informații, vă rugăm să contactați [email protected].
Pentru mai multe informații despre Jscrambler, noile sale caracteristici și cele mai recente actualizări, puteți vizita și site-ul web Jscrambler.