İç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.
JavaScript gizleme nedir?
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.
JavaScript Gizleme neden kullanılır?
Gizleme, kullanıldığı için çeşitli amaçlara ve faydalara hizmet edebilir, bunlardan bazıları aşağıda verilmiştir:
1-Hırsızlığa Karşı Güvenlik
Gizleme, kodunuzu ve hassas bilgilerinizi siber hırsızlardan ve saldırganlardan koruyarak projenizin gizliliğini sağlar.
2-Öfke Önleme
Gizlenmiş kodlar, bilgisayar korsanlarının kötü amaçlarla kullanılabilmeleri için hata ayıklamasını zorlaştırabilir.
3-Ticari Çıkarların Korunması
Gizleme, kişinin taktik ve stratejilerinin benzersiz uygulamalarını koruyarak rekabet avantajı sağlayacaktır.
4-Hassas Bilgilerin Korunması
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.
JavaScript Gizleme Nasıl Çalışır?
JS gizlemenin çalışması aşağıda gösterilmiştir
Tüm süreç aşağıdaki gibi bazı adımları takip eder:
1-Değişken yeniden adlandırma
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);}
2 Dize ve Sayı Kodlaması
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";
3-Akış düzleştirmeyi kontrol edin
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.
4-Ölü Kod Ekleme
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);
}
5. Hata Ayıklama Önleme Teknikleri
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.
JavaScript'te Gizleme için Pratik Önerileri
JS'de gizlemenin en iyi uygulaması için, uygulamaya koymak için birkaç öneri vardır.
Güvenilir Araçların Seçimi
Sağlam dönüşümleri kaldırmak için JavaScript Obfuscator veya UglifyJS gibi güvenilir obfuscator'ların çalışması.
2-Diğer Güvenlik Önlemleri ile Gizleme
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.
3-Kod Belgeleri
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.
4-Aktiflik
Ortaya çıkan tehditlerden haberdar olun ve gizleme taktiklerinizi buna göre değiştirin.
Etik Hususlar
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:
1-Kötü Amaçlı Yazılım Dağıtma
Siber suçlular, tehlikeli komut dosyalarını veya sabıka kayıtlarını gizlemek için genellikle gizleme tekniğini kullanır.
2-Aldatıcı Uygulamalar
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.
Gizleme Sınırlamaları
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:
1-Performans Etkisi:
Kodunuz gerekenden daha fazla gizlenirse, özellikle dinamik oluşturma veya yedekli kod yöntemleri kullanılıyorsa, kodunuzun çalışma zamanını olumsuz etkiler.
2-Mutlak Güvenlik Eksikliği:
Uzman bilgisayar korsanları veya saldırganlar, zaten gizlenmiş kodunuz üzerinde gizleme kullanabilir ve sonunda kodunuz için hiçbir koruma bırakmaz.
3-Hata Ayıklama Zorlukları:
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.
4-Uyumluluk Sorunları:
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.
Son
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.