İçeriğe geç
Favoriler

JavaScript Karıştırıcı (eval)

Güncellendi:

Kod alanına JavaScript kodunu yapıştırın ve eval tabanlı paketlenmiş bir sürüm oluşturun. Elde edilen kodu Karıştırılmış Kod alanından kopyalayın.

Eval Tabanlı JavaScript Karıştırma Aracı

Giriş alanları
Etkinleştirilirse, herhangi bir değeri değiştirdiğinizde sonuç otomatik olarak güncellenir.

JavaScript Karıştırıcı (eval) Formülü

Formül
\[O=\operatorname{Packer.pack}(S,\mathrm{true},\mathrm{true})\]

Burada:

  • \(S\) — giriş alanına girilen JavaScript kodudur.
  • \(O\) — sonuç olarak gösterilen paketlenmiş JavaScript kodudur.
  • İlk \(\mathrm{true}\) değeri base-62 token kodlamasını etkinleştirir; ikincisi değişken daraltmayı etkinleştirir.

Paketleyici, eval tabanlı bir sarmalayıcı üretmeden önce girdiyi küçültür (minify eder). Base-62 token kodlaması Base64 veya onaltılık (hexadecimal) kodlama değildir.

JavaScript Karıştırıcı (eval) – Hesaplama Örneği

Örnek: Karıştırılacak JavaScript Kodu alanında varsayılan alert('Hello, world!'); ifadesini bırakın.

\[S=\texttt{alert('Hello, world!');},\qquad O=\operatorname{Packer.pack}(S,\mathrm{true},\mathrm{true})\]

Sonuç: Karıştırılmış Kod alanında paketlenmiş, eval tabanlı bir JavaScript parçası yer alır. eval() izin veren bir ortamda çalıştırıldığında, orijinal alert çalışır ve “Hello, world!” mesajı görüntülenir. Sonuç alanında alert mesajının kendisi değil, kod bulunur.

Hesaplayıcı nasıl kullanılır

  1. Betiğinizi Karıştırılacak JavaScript Kodu alanına girin veya yapıştırın. Alan başlangıçta hızlı bir test için kullanabileceğiniz alert('Hello, world!'); ifadesini içerir.
  2. Kodu işlemek için hesaplayıcıyı çalıştırın. Alan boşsa, sonuç yerine “Kod girin” mesajını görürsünüz.
  3. Oluşturulan betiği Karıştırılmış Kod alanından kopyalayın ve kullanmayı planladığınız yerde test edin.

HTML <script> etiketleri yerine JavaScript kodu yapıştırın. Seçilecek kodlama, sıkıştırma veya güvenlik düzeyi ayarı yoktur: araç, paketleyiciyi mevcut her iki seçenek etkin şekilde çağırır.

Eval tabanlı karıştırma ne yapar

Bu araç, JavaScript kaynağını, kodu yeniden yapılandırıp eval() aracılığıyla çalıştıran paketlenmiş bir betiğe dönüştürür. Amacı, kaynağın rastgele bir inceleme sırasında hemen okunabilir olmasını zorlaştırmaktır. Geleneksel bir hesaplamadan farklı olarak sayısal bir yanıt üretmez: Karıştırılmış Kod, girdinin işini yapmak üzere tasarlanmış başka bir JavaScript programıdır.

Paketleyici betiği küçültür, dönüşümü izin verdiği ölçüde değişkenleri daraltır ve tokenları daha kısa base-62 temsilleriyle değiştirir. Ortaya çıkan sarmalayıcı, çalıştığında paketlenmiş kodu geri yükler. Base-62, bu paketleme yaklaşımında kullanılan token alfabesini tanımlar; tüm betiğin bir Base64 dizisine dönüştürüldüğü anlamına gelmez. Araç kodlama seçeneği sunmaz.

Karıştırma (obfuscation) şifreleme değildir. Sonucu çalıştırabilen veya inceleyebilen herkes, açma adımını inceleyerek de dahil olmak üzere temeldeki koda ulaşmaya çalışabilir. Bu yaklaşımı rastgele okumayı caydırmak için kullanın; parolaları, API gizli anahtarlarını, lisans kontrollerini veya gizli kalması gereken diğer bilgileri korumak için değil. Paketlenmiş kodun daha okunabilir bir sürümü için JavaScript Eval Decode aracını deneyin.

Paketlemeyi ayrıca dosya boyutu optimizasyonundan ayırt edin. Küçültme gereksiz kaynak metni ortadan kaldırsa da, açma sarmalayıcısı kendi kodunu ekler; bu yüzden kısa bir betik daha büyük hale gelebilir. Asıl kaygınız indirme boyutuysa, sonucu bunun yerine JavaScript Compress aracıyla karşılaştırın.

Varsayımlar ve pratik sınırlamalar

  • Yürütme politikası önemlidir. eval() izin vermeyen bir Content Security Policy, paketlenmiş betiğin çalışmasını engelleyebilir. Bir site, politikasını zayıflatmak yerine paketlenmemiş bir betik kullanmak zorunda kalabilir.
  • Gerçek sonucu test edin. Değişken daraltma ve paketleme, kaynak metne, değişken adlarına veya belirli kapsam davranışına bağımlı kodu etkileyebilir. Çalışan kodun yerine koymadan önce oluşturulan betiği hedeflediğiniz JavaScript motoru ve test paketiyle denetleyin.
  • Çıktı, okunamaz görünüyor diye güvenli kabul etmeyin. Paketlenmiş JavaScript, orijinal kodunun gerçekleştirdiği her eylemi yine de gerçekleştirebilir. Güvenilmeyen girdiyi çalıştırmadan önce inceleyin.
  • Orijinal kaynağı saklayın. Paketlenmiş çıktının düzenlenmesi ve hata ayıklaması daha zordur. Değişiklikler, hata incelemeleri ve gelecekteki yapılar için okunabilir sürümünüzü elinizde tutun.

En iyi denetim yan yana testtir: orijinal ve paketlenmiş betikleri aynı koşullar altında çalıştırın, gözlemlenebilir davranışlarını karşılaştırın ve dağıtım ortamınızın dinamik değerlendirmeye izin verdiğini doğrulayın.

Sıkça Sorulan Sorular

Eval tabanlı bir JavaScript paketleyiciyi elle nasıl yapabilirim?

Önce küçük bir betiği küçültün, ardından yinelenen tokenların bir sözlüğünü oluşturun ve bunları kısa tanımlayıcılarla değiştirin. Son olarak, yeniden yapılandırılan betiği eval() öğesine geçirmeden önce bu tokenları geri yükleyen bir sarmalayıcı yazın. Tırnak işaretlerini, ters eğik çizgileri ve değiştirme tokenlarını doğru şekilde kaçırmak (escape) zordur; bu yüzden elle yapılan paketleyiciler üretim araçları değil, deneyler olarak görülmelidir.

Paketlenmiş kod JavaScript modülleriyle çalışır mı?

Zorunlu değil. Statik import ve export bildirimleri modül sözdizimi gerektirir ve doğrudan bir eval() çağrısının içine yerleştirilemez. Kaynağınız bunları kullanıyorsa, kodu ancak uygun bir yapı adımı modülleri paketledikten veya dönüştürdükten sonra paketleyin. Sonucu, dağıtım için kullanacağınız tarayıcı veya çalışma zamanı yapılandırmasında test edin.

Bu karıştırıcı modern JavaScript sözdizimini destekliyor mu?

Destek, yalnızca tarayıcınızın kaynağı anlayıp anlamamasına değil, paketleyicinin çözümleyicisine ve dönüşüm kurallarına bağlıdır. Şablon dizeleri (template literals), isteğe bağlı zincirleme (optional chaining) veya daha yeni sınıf sözdizimi gibi özellikler, eski bir paketleyicinin başarısız olmasına veya davranışı değiştirmesine neden olabilir. Daha büyük bir projeyi işlemeden önce temsil eden bir örnek deneyin ve sonuçlarını orijinaliyle karşılaştırın.

Eval tabanlı paketleme JavaScript'i yavaşlatır mı?

Yavaşlatabilir; çünkü sarmalayıcının, eval() yürütmeden önce betiği yeniden yapılandırması gerekir. Etki betik boyutuna, çalışma sıklığına ve JavaScript motoruna bağlıdır; açıldıktan sonra tekrar tekrar yürütülen kodda fark çok az olabilir. Daha küçük görünen bir betiğin daha hızlı olduğunu varsaymak yerine, yükleme ve yürütme sürelerini hedef ortamınızda ölçün.

Paketlenmiş çıktıda özel karakterler neden farklı görünüyor?

Sarmalayıcı, tırnak işaretlerini, ters eğik çizgileri, satır sonlarını veya ASCII dışı karakterleri, oluşturulan JavaScript içinde güvenle temsil edilebilmeleri için kaçış (escape) edebilir. Farklı görünen bir kaynak, mutlaka farklı bir dize değeri değildir. Özellikle emojiler, aksanlı karakterler, normal ifadeler (regex) ve ters eğik çizgi içeren dizeler için, çalışma zamanında üretilen değeri denetleyin.

Karıştırmanın iyi olup olmadığını nasıl anlarım?

Bu tür bir paketleme için standart bir puan veya ideal bir çıktı uzunluğu yoktur. Faydalı bir sonuç, hâlâ orijinal betik gibi davranır ve rastgele kaynak incelemesini daha az kolaylaştırır. Yalnızca görünüşe göre değerlendirilmemelidir: kararlı bir okuyucu, çalışmak için açılması gereken kodu yeniden yapılandırabilir; bu yüzden hassas verileri istemci tarafı JavaScript'te tutmayın.

Paketlenmiş JavaScript'teki bir hatayı nasıl ayıklayabilirim?

Hatayı önce satır numaralarının ve değişken adlarının daha yararlı olduğu orijinal kaynakla yeniden üretin. Yalnızca paketlemeden sonra ortaya çıkıyorsa, girdiyi hâlâ başarısız olan en küçük betiğe indirin ve her iki sürümü aynı ortamda karşılaştırın. eval() sarmalayıcısı içinde bildirilen hatalar, orijinal dosyanızdaki ilgili satırı göstermeyebilir.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir