Sadržaj
JavaScript je moderan programski jezik koji stvara ogroman i dinamičan sadržaj web stranice. Zanimljivo je da djeluje na principu jednostrukog navoja. To znači da možete izvoditi samo jednu operaciju u isto vrijeme. Objekti se mogu izrađivati izravno, a varijable nemaju fiksne statičke tipove.
JavaScript je jednostavan za mnoge web programere, a njegov aplikacijski kod dostupan je korisnicima i svima. To je najizazovniji dio korištenja JavaScripta za programere web stranica. Na taj način mnogi napadači mogu lako pristupiti i iskoristiti kod web stranice i ranjivosti podataka koje mogu naštetiti web stranici i poslovanju.
Kako bi prevladali ili spremili kod generiran JavaScriptom, programeri koriste tehniku koja se zove JavaScript Obfuscation. U ovom ćete članku istražiti JavaScript Obfuscator, kako možete zaštititi i spremiti JS kod te važnost JS obfuscatora.
Što je prikrivanje JavaScripta?
Proces osiguranja koda, u kojem programeri mijenjaju ili modificiraju temeljni kod u problematičan oblik koji ljudi ne mogu lako razumjeti, a istovremeno osiguravaju ispravno izvršavanje koda. Za razliku od enkripcije (koja zahtijeva ključ za dekodiranje modificiranog koda), prikrivanje ne zahtijeva nikakav ključ za restrukturiranje osnovnog koda.
Glavna svrha ovog procesa je spriječiti ili zaustaviti neovlašteni pristup, obrnuti inženjering i krađu intelektualnog vlasništva.
Zašto koristiti JavaScript prikrivanje?
Zamagljivanje može poslužiti u različite svrhe i koristi zbog kojih se koristi, od kojih su neke dane u nastavku:
1-Zaštita od krađe
Prikrivanje štiti vaš kod i osjetljive podatke od cyber lopova i napadača, omogućujući tako privatnost vašeg projekta.
Prevencija 2-temperamenta
Prikriveni kodovi mogu hakerima otežati otklanjanje pogrešaka kako bi se mogli koristiti u zlonamjerne svrhe.
3-Očuvanje poslovnih interesa
Prikrivanje će osigurati konkurentsku prednost zaštitom jedinstvenih implementacija nečijih taktika i strategija.
4-Zaštita osjetljivih podataka
Neki kod uključuje osjetljive informacije, ključeve ili logiku koji su važni za rad, ali ne bi trebali biti izloženi javnosti, sprječavajući curenje vaših podataka i pomažući da informacije budu samo za vas.
Slijedi primjer JavaScript obfuscatora:
Osnovni kod riječi Hello u JS-u izgleda ovako:
funkcija pozdrav(ime) {
vratite "Zdravo, " + ime + "!";
}
Operacija prikrivanja pretvara sljedeći kod u ovo:
function _0x2c56(_0x1a73){return 'Pozdrav, '+_0x1a73+'!';}
Oba koda imaju isto značenje, a njihov izlaz ne rezultira razlikom, ali razlika u pogrešci pri upisu rezultira značajnom zaštitom koda. Složenim stvarima uvijek je teže pristupiti.
Kako funkcionira prikrivanje JavaScripta?
Rad JS prikrivanja prikazan je u nastavku
Cijeli proces slijedi neke korake kao što su
Preimenovanje 1-varijable
Ovdje se zamjena opisnih naziva varijabli vrši besmislenim nizovima (npr. korisničko ime postaje a1b2c3)
Primjer je dan u nastavku kako bi se bolje razumjelo
Izvorni kod:
funkcija calculateTotal(cijena, porez) {
povratna cijena + (cijena * porez);
}
Ovaj kod može izgledati ovako nakon prikrivanja
Prikriveni kod:
funkcija _0x45a1(x,y){return x+(x*y);}
Kodiranje 2 niza i brojeva
Također je poznata kao enkripcija nizova. To je proces kojim se osjetljivi podaci kao što su URL-ovi ili API ključevi kodiraju nizovima unutar koda. Slijedi primjer šifriranja nizova:
Izvorni kod:
const apiKey = "ABC123";
Prikrivena verzija dana je u nastavku.
Prikriveni kod:
const _0x3d2a = "\x41\x42\x43\x31\x32\x33";
3-Kontrolno izravnavanje protoka
U kratkom obliku poznatom kao izravnavanje koda. Složene strukture koda su pojednostavljene komentari se uklanjaju kako bi se što više smanjila čitljivost.
Izvorni kod:
Jednostavan kod može izgledati ovako
function checkAccess(user) {
if (user.role === "admin") return true;
inače se vrati lažno;
}
Prikriveni kod:
funkcija _0x1a2b(_0x3c4d) {
return _0x3c4d["\x72\x6f\x6c\x65"] === "\x61\x64\x6d\x69\x6e" ? !0x0 : !0x1;
}
Čitljivost je znatno smanjena, što se vidi iz razlike između dva gore navedena koda.
Umetanje 4-mrtvog koda
Slično je izravnavanju koda i promjeni tijeka kontrole. To je dodavanje besmislenih isječaka koda izvornom kodu kako bi ga učinili manje čitljivim.
function validateInput(input) {
if (input.length > 5) return true;
inače se vrati lažno;
// Mrtvi kod ispod
const x = 10;
console.log("Ovo nikad ne trči");
}
Verzija umetanja mrtvog koda (prikrivena) ovog koda izgleda ovako:
function validateInput(input) {
if (ulaz.duljina > 5) {
// Mrtav kod koji ne čini ništa korisno
const unusedVar = Math.random() * 100;
console.log("Ovo je dio mrtvog koda: ", unusedVar);
vratiti istinito;
} else {
// Više mrtvog koda u nastavku
let fakeCondition = input.includes("secret");
if (fakeCondition) {
console.log("Ovo stanje je lažno i nevažno");
}
vratiti netočno;
}
// Nedostupan mrtvi kod
const x = 10;
const y = 20;
console.log("Ovo se nikada neće izvršiti, ali zbunjuje napadače: ", x + y);
}
5. Tehnike protiv otklanjanja pogrešaka
Tehnika protiv otklanjanja pogrešaka u JS-u jedinstvena je i uključuje izjave programa za ispravljanje pogrešaka, otkrivanje konzole i napade na mjerenje vremena kako bi se ometalo kod i otklanjanje pogrešaka.
setInterval(function(){
if (typeof console._commandLineAPI !== 'nedefinirano') {
upozorenje("Otkriven program za ispravljanje pogrešaka!");
window.location.href = "about:blank";
}
}, 1000);
Isti kod, kada je modificiran u prikrivenu verziju pomoću JS alata za prikrivanje. Postalo ga je teže razumjeti i analizirati korištenjem dodatnog sloja protiv otklanjanja pogrešaka.
Prikriveni kod:
(funkcija () {
var _0x3c87 = ['_commandLineAPI', 'nedefinirano', 'oko:prazno'];
(funkcija (_0x4d1b99, _0x1ea782) {
var _0x223b1b = funkcija (_0x234219) {
dok (--_0x234219) {
_0x4d1b99['push'](_0x4d1b99['shift']());
}
};
_0x223b1b(++_0x1ea782);
}(_0x3c87, 0x18f));
var _0x4a68 = funkcija (_0x4d1b99, _0x1ea782) {
_0x4d1b99 = _0x4d1b99 - 0x0;
var _0x223b1b = _0x3c87[_0x4d1b99];
povratak _0x223b1b;
};
setInterval(funkcija () {
if (typeof console[_0x4a68('0x0')] !== _0x4a68('0x1')) {
alert('Otkriven program za ispravljanje pogrešaka!');
window['location']['href'] = _0x4a68('0x2');
}
}, 0x3e8);
})();
Ovo su bili samo neki od jednostavnih koraka (tehnika) kako se jednostavan i bitan dio koda može pretvoriti u najvišu razinu težine, čineći ga vrlo naprednim i složenim kodom pomoću alata za prikrivanje.
Prijedlozi za vježbu za prikrivanje u JavaScriptu
Za najbolju praksu zamagljivanja u JS-u, postoji nekoliko prijedloga da se to primijeni u praksi.
Izbor pouzdanih alata
Rad pouzdanih obfuskatora kao što su JavaScript Obfuscator ili UglifyJS za uklanjanje robusnih transformacija.
2-Prikrivanje drugim sigurnosnim mjerama
Prikrivanje je početni sloj obrane. Uparivanje s različitim tehnikama kao što su rigorozno testiranje, sigurne prakse kodiranja itd. može dodati neprobojnu zaštitu vašem projektu.
Dokumentacija s 3 koda
Spremite jasnu verziju izvornog koda i zakup za buduće otklanjanje pogrešaka. Omogućit će vam pristup izvornom kodu, čime će se olakšati postupak izmjene.
4-Aktivnost
Budite u tijeku s novim prijetnjama i u skladu s tim modificirajte svoje taktike zamagljivanja.
Etička razmatranja
Ideja zamagljivanja došla je do osjećaja etičke zaštite vaših projekata od kibernetičkih napada. Dakle, njegova zlouporaba može dovesti do loših okolnosti, kao što su:
1-Implementacija zlonamjernog softvera
Kibernetički kriminalci često koriste tehniku prikrivanja kako bi prikrili svoje opasne skripte ili kaznenu evidenciju.
2-Obmanjujuće prakse
Zamagljivanje također može narušiti nečiju privatnost, pratiti skripte itd. Uvijek je bitno razmotriti pravilnu uporabu takvih tehnika. Održavanje ravnoteže među takvim stvarima prvi je korak u izvođenju zamagljivanja.
Ograničenja zamagljivanja
Iako je korištenje prikrivanja za zaštitu vašeg koda i projekata vrlo korisno, nije sigurno. Ima neka ograničenja koja vas mogu iritirati dok ga koristite. U nastavku se raspravlja o nekim od njegovih neispunjenih nedostataka:
1-Utjecaj na performanse:
Ako je vaš kod prikriven više nego što je potrebno, to će negativno utjecati na vrijeme izvođenja vašeg koda, uglavnom ako se koriste metode dinamičkog generiranja ili suvišnog koda.
2-Nedostatak apsolutne sigurnosti:
Stručni hakeri ili napadači mogu koristiti prikrivanje vašeg već prikrivenog koda, na kraju ne ostavljajući nikakvu zaštitu vašeg koda.
3-Izazovi otklanjanja pogrešaka:
Prikriveni kod uvijek je teško otkloniti pogreške, održavati ili razvijati zbog dodavanja nepotrebnih redaka koji se koriste za njegovu zaštitu. Još je teže programerima koji nisu bili dio razvojnog tima izvornog koda i prikrivenog koda.
4-Problemi s kompatibilnošću:
Specifične tehnike prikrivanja nisu dostupne u svim preglednicima ili okruženjima, čime se povećavaju šanse za tehničke probleme u izlazu ili radu koda.
Zaključak
JavaScript prikrivanje moćan je i koristan alat za zaštitu nečijeg koda od krađe, hakera, napadača, neovlaštenog mijenjanja i obrnutog inženjeringa. Iako je to zaštitni štit za vaše osjetljive podatke i intelektualno vlasništvo spremljeno na vašem računalu kodiranjem, to nije trajno ili nepobjedivo rješenje za sigurnost.
Investitor se ne smije oslanjati samo na prikrivanje. Razumijevanjem i stjecanjem dovoljno znanja o njegovim tehnikama, prednostima i ograničenjima, programeri ga mogu učiniti vrijednijim i učinkovitijim za konačnu zaštitu vašeg koda.
Iako ima neke prednosti, ograničenja i sve što je procesu ili tehnici potrebno da bi postojao, njegova prava moć leži u činjenici da je dio slojevite obrambene strategije; Morate vježbati dovoljno da biste ga učinili učinkovitijim, korisnijim i produktivnijim za vas od bilo koga drugog. Pomaže osigurati integritet, povjerljivost i pouzdanost vašeg JavaScript koda u digitalnom krajoliku koji se stalno razvija.
Ukratko, to je alat koji vam pomaže u održavanju privatnosti i motivira vas da razmislite o učinkovitijim načinima zaštite svojih podataka.
Za više alata za optimizaciju vašeg web razvoja, pogledajte:
Za više sigurnosnih alata posjetite odjeljak Sigurnost UrwaTools.