Съдържание

JavaScript е модерен език за програмиране, който създава обширно и динамично съдържание на уебсайта. Интересното е, че работи на принципа на една нишка. Това означава, че можете да извършвате само една операция наведнъж. Обектите могат да се правят директно и променливите нямат фиксирани статични типове.

JavaScript е лесен за много уеб разработчици и неговият приложен код е достъпен за потребители и всеки. Това е най-предизвикателната част от използването на JavaScript за разработчици на уебсайтове. По този начин много нападатели могат лесно да получат достъп и да използват уязвимостите в кода на уебсайта и данните, които могат да навредят на уебсайта и бизнеса.

За да преодолеят или запазят кода, генериран от JavaScript, разработчиците използват техника, наречена JavaScript Obfuscation. В тази статия ще разгледате JavaScript Obfuscator, как можете да защитите и запазите JS код и значението на JS obfuscator.

Процесът за защита на кода, при който разработчиците променят или модифицират основния код в проблемна форма, която не може да бъде разбрана лесно от хората, като същевременно се гарантира правилното изпълнение на кода. За разлика от криптирането (което изисква ключ за декодиране на модифицирания код), обфускирането не изисква никакъв ключ за преструктуриране на основния код. 

Основната цел на този процес е да се предотврати или спре неоторизиран достъп, обратно инженерство и кражба на интелектуална собственост.

Обфускацията може да служи за различни цели и ползи, поради които се използва, някои от които са дадени по-долу:

Обфускирането защитава вашия код и чувствителна информация от киберкрадци и нападатели, като по този начин позволява поверителността на вашия проект.

Обфускираните кодове могат да затруднят хакерите да ги отстраняват грешки, така че да могат да се използват за злонамерени цели.

Обфускацията ще осигури конкурентно предимство, като запази уникалните реализации на нечии тактики и стратегии.

Някои кодове включват чувствителна информация, ключове или логика, които са важни за работата, но не трябва да бъдат публично изложени, предотвратявайки изтичането на вашата информация и помагайки на информацията да бъде само за вас.

Следва пример за JavaScript обфускатор:

Основният код на думата Hello в JS изглежда така:

function greet(name) {

    връщане на "Hello, " + name + "!";

}

Операцията на обфускиране преобразува следния код в това:

function _0x2c56(_0x1a73){return 'Hello, '+_0x1a73+'!';}

И двата кода имат еднакво значение и изходът им не води до разлика, но разликата в печатните грешки води до значителна защита на кода. Сложните неща винаги са по-трудни за достъп.

Работата на JS обфускацията е показана по-долу

Целият процес следва няколко стъпки като 

Тук замяната на описателни имена на променливи се извършва с безсмислени низове (напр. потребителското име става a1b2c3)

По-долу е даден пример, за да разберете по-добре

Оригинален код:

function calculateTotal(цена, данък) {

    цена за връщане + (цена * данък);

}

Този код може да изглежда така след обфускиране

Обфускиран код:

функция _0x45a1(x,y){return x+(x*y);}

Известно е още като криптиране на низове. Това е процес, чрез който чувствителни данни като URL адреси или API ключове се кодират с низове в кода. Следва пример за криптиране на низове:

Оригинален код:

const apiKey = "ABC123";

Обфускираната версия е дадена по-долу.

Обфускиран код:

const _0x3d2a = "\x41\x42\x43\x31\x32\x33";

 Накратко известно като изравняване на кода. Сложните кодови структури са опростени, коментарите са премахнати, за да се намали максимално четливостта.

Оригинален код:

Прост код може да изглежда така 

function checkAccess(user) {

    if (user.role === "admin") връща true;

    else return false;

}

Обфускиран код:

функция _0x1a2b(_0x3c4d) {

    return _0x3c4d["\x72\x6f\x6c\x65"] === "\x61\x64\x6d\x69\x6e" ? !0x0 : !0x1;

}

 Четливостта е силно намалена, както се вижда от разликата между двата кода, представени по-горе.

Това е подобно на изравняване на кода и промяна на контролния поток. Това е добавянето на безсмислени кодови фрагменти към оригиналния код, за да го направи по-малко четлив.

function validateInput(input) {

    if (input.length > 5) връща true;

    else return false;

    // Мъртъв код по-долу

    const x = 10;

    console.log("Това никога не работи");

}

Версията за вмъкване на мъртъв код (Obfuscated) на този код изглежда  така:

function validateInput(input) {

    if (input.length > 5) {

        // Мъртъв код, който не прави нищо полезно

        const unusedVar = Math.random() * 100;

        console.log("Това е част от мъртвия код: ", unusedVar);

        връщане true;

    } else {

        // Още мъртъв код по-долу

        let fakeCondition = input.includes("secret");

        if (fakeCondition) {

            console.log("Това условие е фалшиво и без значение");

        }

        връщане false;

    }

    // Недостижим мъртъв код

    const x = 10;

    const y = 20;

    console.log("Това никога няма да се изпълни, но обърква нападателите: ", x + y);

}

Техниката против отстраняване на грешки в JS е уникална и включва оператори за отстраняване на грешки, откриване на конзола и атаки за синхронизиране, за да попречат на кода и отстраняването на грешки.

setInterval(function(){

    if (typeof console._commandLineAPI !== 'undefined') {

        alert("Открит е дебъгер!");

        window.location.href = "относно:празно";

    }

}, 1000);

Същият код, когато е модифициран в обфускирана версия с помощта на инструмента за обфускиране на JS. Стана по-трудно да се разбере и анализира чрез използване на допълнителен слой против отстраняване на грешки.

Обфускиран код:

(функция () {

    var _0x3c87 = ['_commandLineAPI', 'undefined', 'about:blank'];

    (функция (_0x4d1b99, _0x1ea782) {

        var _0x223b1b = функция (_0x234219) {

            докато (--_0x234219) {

                _0x4d1b99['push'](_0x4d1b99['shift']());

            }

        };

        _0x223b1b(++_0x1ea782);

    }(_0x3c87, 0x18f));

    var _0x4a68 = функция (_0x4d1b99, _0x1ea782) {

        _0x4d1b99 = _0x4d1b99 - 0x0;

        var _0x223b1b = _0x3c87[_0x4d1b99];

        връщане _0x223b1b;

    };

    setInterval(function () {

        if (typeof console[_0x4a68('0x0')] !== _0x4a68('0x1')) {

            alert('Открит е дебъгер!');

            window['location']['href'] = _0x4a68('0x2');

        }

    }, 0x3e8);

})();

Това бяха само някои от простите стъпки (техники) за това как ясна и съществена част от кода може да бъде преобразувана в най-високото ниво на трудност, правейки го да изглежда като много напреднал и сложен код с помощта на инструмент за обфускиране.

За най-добрата практика на обфускацията в JS има няколко предложения за прилагането й на практика.

Работа на доверени обфускатори като JavaScript Obfuscator или UglifyJS за премахване на стабилни трансформации.  

Обфускацията е началният слой на защита. Съчетаването му с различни техники като строго тестване, сигурни практики за кодиране и т.н. може да добави непробиваема защита към вашия проект.

Запазете ясна версия на оригиналния код и чартър за бъдещо отстраняване на грешки. Той ще ви позволи достъп до оригиналния си код, като по този начин ще улесни процеса на изменение.

Бъдете в течение за възникващите заплахи и съответно променете тактиките си за обфускиране.

Идеята за обфускиране дойде до усещане за етична защита на вашите проекти от кибератаки. По този начин злоупотребата с него може да доведе до лоши обстоятелства, като например:

Киберпрестъпниците често използват техниката на обфускиране, за да прикрият своите опасни скриптове или криминални досиета.

Обфускацията може също да нахлуе в личния живот, да проследява скриптове и т.н. Винаги е важно да се обмисли правилното използване на такива техники. Поддържането на баланс между тези неща е първата стъпка към извършване на замъгляване.

Въпреки че използването на обфускиране за защита на вашия код и проекти е много полезно, то не е безупречно. Има някои ограничения, които могат да ви дразнят, докато го използвате. Някои от неудовлетворените пропуски са разгледани по-долу:

Ако кодът ви е обфускиран повече от необходимото, това ще се отрази отрицателно на времето за изпълнение на кода ви, главно ако се използват методи за динамично генериране или излишен код.

Експертните хакери или нападатели могат да използват обфускиране на вашия вече обфускиран код, като в крайна сметка не оставят защита на вашия код.

Обфускираният код винаги е труден за отстраняване на грешки, поддръжка или разработване поради добавянето на ненужни редове, използвани за неговата защита. Още по-трудно е за програмисти, които не са били част от екипа за разработка на оригиналния код и обфускиран код.

Специфични техники за обфускиране не са достъпни във всички браузъри или среди, като по този начин увеличават шансовете за технически проблеми при извеждането или работата на кода.

JavaScript обфускацията е мощен и полезен инструмент за защита на кода срещу кражба, хакери, нападатели, подправяне и обратно инженерство. Въпреки че е защитен щит за вашата чувствителна информация и интелектуална собственост, запазена във вашия компютър чрез кодиране, той не е постоянно или непобедимо решение за безопасността.

 Разработчикът не трябва да разчита само на замъгляване. Като разберат и получат достатъчно познания за неговите техники, предимства и ограничения, разработчиците могат да го направят по-ценен и ефективен за крайната защита на вашия код.

Въпреки че има някои предимства, ограничения и всичко, от което се нуждае един процес или техника, за да съществува, истинската му сила се крие във факта, че е част от многопластова отбранителна стратегия; Трябва да практикувате достатъчно, за да го направите по-ефективно, полезно и продуктивно за вас от всеки друг. Помага да се гарантира целостта, поверителността и надеждността на вашия JavaScript код в непрекъснато развиващия се цифров пейзаж. 

Накратко, това е инструмент, който ви помага да запазите поверителността си и ви мотивира да мислите за по-ефективни начини за защита на вашата информация.

За повече инструменти за оптимизиране на вашата уеб разработка, разгледайте:

За повече инструменти за защита посетете раздела за сигурност на UrwaTools.

UrwaTools Editorial

The UrwaTools Editorial Team delivers clear, practical, and trustworthy content designed to help users solve problems ef...

Бюлетин

Бъдете в крак с нашите най-нови инструменти