İçindekiler Tablosu

JavaScript, geniş ve dinamik web sitesi içeriği oluşturan modern bir programlama dilidir. İlginç bir şekilde, tek iş parçacığı prensibine göre çalışır. Bu, aynı anda yalnızca bir işlem gerçekleştirebileceğiniz anlamına gelir. Nesneler doğrudan yapılabilir ve değişkenlerin sabit statik türleri yoktur.

JavaScript, birçok web geliştiricisi için kolaydır ve uygulama koduna kullanıcılar ve herkes tarafından erişilebilir. Web sitesi geliştiricileri için JavaScript kullanmanın en zorlu kısmı budur. Bu sayede birçok saldırgan, web sitesine ve işletmeye zarar verebilecek web sitesi kodlarına ve veri güvenlik açıklarına kolayca erişebilir ve bunlardan yararlanabilir.

JavaScript tarafından oluşturulan kodun üstesinden gelmek veya kaydetmek için geliştiriciler, JavaScript Gizleme adı verilen bir teknik kullanır. Bu yazıda JavaScript Obfuscator'ı, JS kodunu nasıl koruyabileceğinizi ve kaydedebileceğinizi ve JS obfuscator'ın önemini keşfedeceksiniz.

Geliştiricilerin, kodun doğru şekilde yürütülmesini sağlarken çekirdek kodu insanlar tarafından kolayca anlaşılamayacak sorunlu bir forma dönüştürdüğü veya değiştirdiği kodu güvenli hale getirme süreci. Şifrelemeden farklı olarak (değiştirilen kodun kodunu çözmek için bir anahtar gerektirir), gizleme, çekirdek kodu yeniden yapılandırmak için herhangi bir anahtar gerektirmez. 

Bu sürecin temel amacı, yetkisiz erişimi, tersine mühendisliği ve fikri mülkiyet hırsızlığını önlemek veya durdurmaktır.

Gizleme, kullanıldığı için çeşitli amaçlara ve faydalara hizmet edebilir, bunlardan bazıları aşağıda verilmiştir:

Gizleme, kodunuzu ve hassas bilgilerinizi siber hırsızlardan ve saldırganlardan koruyarak projenizin gizliliğini sağlar.

Gizlenmiş kodlar, bilgisayar korsanlarının kötü amaçlarla kullanılabilmeleri için hata ayıklamasını zorlaştırabilir.

Gizleme, kişinin taktik ve stratejilerinin benzersiz uygulamalarını koruyarak rekabet avantajı sağlayacaktır.

Bazı kodlar, işlem için önemli olan ancak herkese açık olmaması gereken hassas bilgiler, anahtarlar veya mantık içerir, bu da bilgilerinizin sızmasını önler ve bilgilerin yalnızca sizin için olmasına yardımcı olur.

Aşağıda bir JavaScript Obfuscator örneği verilmiştir:

JS'deki Merhaba kelimesinin temel kodu şöyle görünür:

function greet(isim) {

    return "Merhaba, " + isim + "!";

}

Gizleme işlemi aşağıdaki kodu şuna dönüştürür:

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

Her iki kod da aynı anlama sahiptir ve çıktıları hiçbir farka neden olmaz, ancak yazım hatası farkı kodun önemli ölçüde korunmasına neden olur. Karmaşık şeylere erişmek her zaman daha zordur.

JS gizlemenin çalışması aşağıda gösterilmiştir

Tüm süreç aşağıdaki gibi bazı adımları takip eder: 

Burada, tanımlayıcı değişken adlarının değiştirilmesi anlamsız dizelerle yapılır (örneğin, kullanıcı adı a1b2c3 olur)

Daha iyi anlamak için aşağıda bir örnek verilmiştir

Orijinal kod:

function calculateTotal(fiyat, vergi) {

    iade fiyatı + (fiyat * vergi);

}

Bu kod, gizleme işleminden sonra şöyle görünebilir

Gizlenmiş kod:

fonksiyon _0x45a1(x,y){return x+(x*y);}

Dize şifreleme olarak da bilinir. URL'ler veya API anahtarları gibi hassas verilerin kod içindeki dizelerle kodlandığı bir işlemdir. Aşağıda bir Dize Şifreleme örneği verilmiştir:

Orijinal Kod:

const apiKey = "ABC123";

Gizlenmiş versiyon aşağıda verilmiştir.

Gizlenmiş kod:

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

 Kısaca Kod düzleştirme olarak bilinir. Karmaşık Kod yapıları basitleştirilir, okunabilirliği mümkün olduğunca azaltmak için yorumlar kaldırılır.

Orijinal Kod:

Basit bir kod şöyle görünebilir

function checkAccess(kullanıcı) {

    if (user.role === "admin") return true;

    else false döndürür;

}

Gizlenmiş Kod:

fonksiyon _0x1a2b (_0x3c4d) {

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

}

 Yukarıda sunulan iki kod arasındaki farktan da görüldüğü gibi okunabilirlik büyük ölçüde azalır.

Kod düzleştirme ve kontrol akışı Değişikliğine benzer. Orijinal kodu daha az okunabilir hale getirmek için anlamsız kod parçacıklarının eklenmesidir.

function validateInput(giriş) {

    if (input.length > 5) return true;

    else false döndürür;

    Aşağıdaki ölü kod

    sabit x = 10;

    console.log("Bu asla çalışmaz");

}

Bu kodun Ölü kod ekleme sürümü (Gizlenmiş) şöyle görünür :

function validateInput(giriş) {

    if (input.length > 5) {

        Yararlı hiçbir şey yapmayan ölü kod

        const unusedVar = Math.random() * 100;

        console.log("Bu, ölü kodun bir parçasıdır: ", unusedVar);

        doğru döndür;

    } başka {

        Aşağıda daha fazla ölü kod

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

        if (fakeCondition) {

            console.log("Bu durum sahte ve alakasız");

        }

        false döndürün;

    }

    Ulaşılamayan ölü kod

    sabit x = 10;

    sabit y = 20;

    console.log("Bu asla yürütülmez ancak saldırganların kafasını karıştırır: ", x + y);

}

JS'deki hata ayıklama önleme tekniği benzersizdir ve kodu ve hata ayıklamayı engellemek için hata ayıklayıcı deyimlerini, konsol algılamayı ve zamanlama saldırılarını içerir.

setInterval(fonksiyon(){

    if (typeof console._commandLineAPI !== 'tanımsız') {

        alert("Hata ayıklayıcı algılandı!");

        window.location.href = "about:blank";

    }

}, 1000);

Aynı kod, JS gizleme aracı kullanılarak gizlenmiş bir sürüme dönüştürüldüğünde. Ek bir hata ayıklama önleme katmanı kullanarak anlamak ve analiz etmek daha zor hale geldi.

Gizlenmiş kod:

(fonksiyon () {

    var _0x3c87 = ['_commandLineAPI', 'tanımsız', 'hakkında:boş'];

    (fonksiyon (_0x4d1b99, _0x1ea782) {

        var _0x223b1b = fonksiyon (_0x234219) {

            iken (--_0x234219) {

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

            }

        };

        _0x223b1b(++_0x1ea782);

    }(_0x3c87, 0x18f));

    var _0x4a68 = fonksiyon (_0x4d1b99, _0x1ea782) {

        _0x4d1b99 = _0x4d1b99 - 0x0;

        var _0x223b1b = _0x3c87[_0x4d1b99];

        dönüş _0x223b1b;

    };

    setInterval(fonksiyon () {

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

            alert('Hata ayıklayıcı algılandı!');

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

        }

    }, 0x3e8);

})();

Bunlar, basit ve temel bir kod parçasının nasıl en yüksek zorluk seviyesine dönüştürülebileceğine dair basit adımlardan (tekniklerden) sadece birkaçıydı ve bu da onu bir şaşırtma aracı kullanarak çok gelişmiş ve karmaşık bir kod gibi görünmesini sağlıyordu.

JS'de gizlemenin en iyi uygulaması için, uygulamaya koymak için birkaç öneri vardır.

Sağlam dönüşümleri kaldırmak için JavaScript Obfuscator veya UglifyJS gibi güvenilir obfuscator'ların çalışması.  

Gizleme, savunmanın başlangıç katmanıdır. Titiz testler, güvenli kodlama uygulamaları vb. gibi farklı tekniklerle eşleştirmek, projenize kırılmaz bir koruma sağlayabilir.

Gelecekteki hata ayıklama için orijinal kodun ve kiralamanın net bir sürümünü kaydedin. Orijinal kodunuza erişmenizi sağlar, böylece değişiklik sürecini kolaylaştırır.

Ortaya çıkan tehditlerden haberdar olun ve gizleme taktiklerinizi buna göre değiştirin.

Gizleme fikri, projelerinizin siber saldırılara karşı etik olarak korunması duygusuyla ortaya çıktı. Bu nedenle, kötüye kullanımı aşağıdakiler gibi kötü durumlara yol açabilir:

Siber suçlular, tehlikeli komut dosyalarını veya sabıka kayıtlarını gizlemek için genellikle gizleme tekniğini kullanır.

Gizleme ayrıca kişinin gizliliğini, parça komut dosyalarını vb. istila edebilir. Bu tür tekniklerin doğru kullanımını göz önünde bulundurmak her zaman önemlidir. Bu tür şeyler arasında dengeyi korumak, gizleme gerçekleştirmenin ilk adımıdır.

Kodunuzu ve projelerinizi korumak için gizleme kullanmak çok faydalı olsa da kusursuz değildir. Kullanırken sizi rahatsız edebilecek bazı sınırlamaları vardır. Karşılanmamış boşluklarından bazıları aşağıda tartışılmaktadır:

Kodunuz gerekenden daha fazla gizlenirse, özellikle dinamik oluşturma veya yedekli kod yöntemleri kullanılıyorsa, kodunuzun çalışma zamanını olumsuz etkiler.

Uzman bilgisayar korsanları veya saldırganlar, zaten gizlenmiş kodunuz üzerinde gizleme kullanabilir ve sonunda kodunuz için hiçbir koruma bırakmaz.

Gizlenmiş kodun korunması için kullanılan gereksiz satırların eklenmesi nedeniyle hata ayıklaması, bakımı veya geliştirilmesi her zaman zordur. Orijinal kodun ve gizlenmiş kodun geliştirme ekibinin bir parçası olmayan programcılar için daha da zordur.

Belirli gizleme tekniklerine tüm tarayıcılarda veya ortamlarda erişilemez, bu nedenle kodun çıktısında veya çalışmasında teknik sorunların olasılığını artırır.

JavaScript gizleme, kişinin kodunu hırsızlığa, bilgisayar korsanlarına, saldırganlara, kurcalamaya ve tersine mühendisliğe karşı korumak için güçlü ve faydalı bir araçtır. Kodlama ile bilgisayarınıza kaydedilen hassas bilgileriniz ve fikri mülkiyetleriniz için bir koruma kalkanı olsa da, güvenlik için kalıcı veya yenilmez bir çözüm değildir.

 Geliştirici yalnızca şaşırtmaya güvenmemelidir. Geliştiriciler, tekniklerini, faydalarını ve sınırlamalarını anlayarak ve bunlar hakkında yeterli bilgi edinerek, kodunuzun nihai koruması için onu daha değerli ve etkili hale getirebilir.

Bazı faydaları, sınırlamaları ve bir sürecin veya tekniğin var olması için ihtiyaç duyduğu her şeye sahip olsa da, gerçek gücü, katmanlı bir savunma stratejisinin parçası olması gerçeğinde yatmaktadır; Sizin için herkesten daha etkili, yararlı ve üretken hale getirecek kadar pratik yapmanız gerekir. Sürekli gelişen dijital ortamda JavaScript kodunuzun bütünlüğünü, gizliliğini ve güvenilirliğini sağlamaya yardımcı olur. 

Kısacası, gizliliğinizi korumanıza yardımcı olacak ve bilgilerinizi korumanın daha etkili yollarını düşünmeye motive eden bir araçtır.

Web geliştirmenizi optimize etmek için daha fazla araç için şunlara göz atın:

Daha fazla güvenlik aracı için UrwaTools Güvenlik Bölümü'nü ziyaret edin.

UrwaTools Editorial

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

Bülten

En yeni araçlarımızdan haberdar olun.