Blog o spletnem programiranju in elektroniki
💬 👤
back Nazaj na blog
WEB (HTML, CSS, PHP)

Kako zaščititi in skriti JavaScript kodo v Node.js

JavaScript je po svoji naravi interpretiran jezik, kar pomeni, da je koda v svoji izvorni obliki berljiva vsakomur, ki ima dostop do datotek. Ko razvijete kompleksen projekt, kot je napreden simulator ali unikatna poslovna logika, jo želite zaščititi pred nepooblaščenim kopiranjem in radovednimi očmi.

V Node.js okolju ne moremo ustvariti klasične zakodirane dvojiške datoteke (kot je .exe), lahko pa kodo drastično spremenimo s postopkom, ki se imenuje Obfuskacija (Code Obfuscation). Ta kodo spremeni v popolnoma nepregledno zmešnjavo spremenljivk in funkcij, ki pa še vedno deluje brezhibno.

Kaj sploh je obfuskacija kode?

Obfuskacija je postopek preoblikovanja izvorne kode z namenom, da postane človeku popolnoma nerazumljiva, medtem ko računalnik jo še vedno izvaja enako hitro. Glavni koraki vključujejo:

  • Preimenovanje spremenljivk: Smiselna imena (npr. sqlSimulator) se spremenijo v naključne znake (npr. _0x4a2b).
  • Preoblikovanje nizov: Tekstovni nizi se zakodirajo v Hex ali Base64 obliko.
  • Injekcija lažne kode: Dodajanje nenevarnih, a zmedenih vrstic, ki zmedejo avtomatske programe za obratni inženiring.

1. Namestitev in uporaba orodja javascript-obfuscator

V svetu Node.js je standard za to opravilo paket javascript-obfuscator. Namestimo ga globalno na računalnik preko npm terminala:

npm install -g javascript-obfuscator

Ko je orodje nameščeno, lahko svojo glavno datoteko (npr. simulator.js) zaščitite z enim samim ukazom:

javascript-obfuscator simulator.js --output simulator.dist.js --string-array true --compact true

Zgornji ukaz bo ustvaril novo datoteko simulator.dist.js, ki bo popolnoma stisnjena in zakrita, pripravljena za zagon na strežniku.

Primer: Kako koda izgleda po zaščiti

Poglejmo si preprost primer pred zaščito:

function preveriSqlFunkcijo(stavek) {
    console.log("Izvajam SQL: " + stavek);
}

Po agresivni obfuskaciji se ta koda spremeni v nekaj takšnega:

var _0x5b1a=['\x49\x7a\x76\x61\x6a\x61\x6d\x20\x53\x51\x4c\x3a\x20'];(function(_0x3d2a,_0x5b1a6b){var _0x1c2b=function(_0x4d3e){while(--_0x4d3e){_0x3d2a['\x70\x75\x73\x68'](_0x3d2a['\x73\x68\x69\x66\x74']());}};_0x1c2b(++_0x5b1a6b);}(_0x5b1a,0x1b3));var _0x1c2b=function(_0x3d2a,_0x5b1a6b){_0x3d2a=_0x3d2a-0x0;var _0x1c2b4f=_0x5b1a[_0x3d2a];return _0x1c2b4f;};function preveriSqlFunkcijo(_0x2b3a12){console['\x6c\x6f\x67'](_0x1c2b('\x30\x78\x30')+_0x2b3a12);}

Pomembno opozorilo pri razvoju

Obfuskacijo vedno izvajajte le kot zadnji korak pred nanosom kode na produkcijski strežnik. Svojo izvorno, lepo napisano kodo vedno skrbno hranite in varnostno kopirajte lokalno, saj obfuskirane kode ni več mogoče obrniti nazaj v prvotno obliko.

back Nazaj na blog