Dokümantasyon
/

Bayt kodu dizisi kodlama anahtarı

Bytecode Dizisi Kodlama Anahtarını Dışarı Taşıma

Pro

vmBytecodeArrayEncodingKey ile kendi VM bytecode şifreleme anahtarınızı sağlayın ve çalışma zamanında bir anahtar getter aracılığıyla geri verin - pakete dahil edilmez, istemci deposundan okunur ya da arka ucunuzdan alınır.

Bu seçenekler ne yapar

vmBytecodeArrayEncoding VM bytecode dizisini şifreler, böylece çıktıda düz metin olarak yer almaz. Varsayılan olarak şifreleme anahtarı ortamdan türetilir ve istemcide yeniden oluşturulur, dolayısıyla onunla hiç uğraşmazsınız. Bu kullanışlıdır, ancak anahtar malzemesi yine de pakette bulunur.

İki seçenek, anahtarı paketten çıkarıp kendiniz kontrol etmenize olanak tanır:

  • vmBytecodeArrayEncodingKey - derleme zamanında sağladığınız anahtar. Ayarlandığında, varsayılan ortamdan türetilen anahtar yerine kullanılır ve obfuscate edilmiş çıktıya gömülmez.
  • vmBytecodeArrayEncodingKeyGetter - aynı anahtarı çalışma zamanında döndüren bir JavaScript ifadesi. Aynen gömülür ve obfuscate edilmiş kod yüklendiğinde tarayıcıda değerlendirilir.

Amaç ayrımdır: anahtar kodda olmadığından, paketin salt statik bir taraması onu geri elde edemez. Kodun çalışması için yine de çalışma zamanında mevcut olması gerekir, bu yüzden gerçekten gizli değildir - ancak nereden geldiğine ve kimin görebileceğine siz karar verirsiniz.

Bu iki seçenek bir çifttir. Getter olmadan vmBytecodeArrayEncodingKey, obfuscate edilmiş kodun anahtarı çalışma zamanında elde etmesinin hiçbir yolunu bırakmaz ve eşleşen bir derleme zamanı anahtarı olmayan bir getter'ın uyuşacağı bir şey yoktur. Her ikisini de vmBytecodeArrayEncoding: true ile birlikte ayarlayın.

İki anahtar nasıl birleşir

Anahtarınız hiçbir zaman tek başına kullanılmaz - her iki tarafta da obfuscator'ın kontrol ettiği dahili bir anahtarla karıştırılır:

  • Derleme zamanı. vmBytecodeArrayEncodingKey, obfuscator'ın türettiği dahili bir anahtarla birleştirilir ve bytecode dizisi ortaya çıkan karışık anahtarla kodlanır.
  • Çalışma zamanı. vmBytecodeArrayEncodingKeyGetter ifadenizin çözümlendiği değer, bytecode'u çözmek için istemcide çeşitli çalışma zamanı faktörlerinden yeniden oluşturulan aynı dahili anahtarla birleştirilir.

Her iki taraf da anahtarınızı dahili anahtarla karıştırdığı için, getter vmBytecodeArrayEncodingKey olarak ilettiğiniz tam olarak aynı dizeye çözümlenmelidir. Hiçbir parça tek başına yeterli değildir: dahili anahtar olmadan anahtarınız bytecode'u çözemez ve dahili anahtar sizinki olmadan işe yaramaz - bu yüzden anahtarınızı kimin aldığını kontrol etmek, kodu gerçekten koruyan şeydir.

Anahtarı çalışma zamanında sağlama

Varsayılan olarak getter eşzamanlıdır (senkron): ifade, obfuscate edilmiş kod yüklendiğinde anahtarı hemen döndürmelidir. Onu istemcide zaten mevcut olan herhangi bir kaynaktan okuyun - bir çerez, localStorage, bir global değişken ya da sunucu tarafından enjekte edilen bir DOM öğesi.

JavaScript

Anahtar, obfuscate edilmiş kod çalışmadan önce var olmalıdır:

JavaScript

Diğer senkron kaynaklar da aynı şekilde çalışır - uygulamanızın zaten doldurduğu hangisiyse onu seçin:

JavaScript

Anahtarı, obfuscate edilmiş kodla aynı dosya veya betikte tutmayın. Onu oraya satır içine almak tüm amacı boşa çıkarır - paketin statik bir taraması hem kodu hem de anahtarını geri elde eder. Onu ayrı bir kaynakta saklayın ve derleme zamanı vmBytecodeArrayEncodingKey değerini repoya işlemek yerine bir ortam değişkeninden veya secret'tan enjekte edin.

Anahtarı arka ucunuzdan alma (asenkron)

Gerektirir vmAsyncExecutor · v7.3.0+

Senkron bir getter yalnızca istemcide zaten var olanı okuyabilir. Anahtarı sunucunuzdan almak için - böylece onu kimlik doğrulamasının arkasına alıp iptal edebilirsiniz - getter'ın asenkron olması gerekir ve bu da vmAsyncExecutor gerektirir. Asenkron yürütücü etkinken getter bir Promise döndürebilir ve VM, çalışmadan önce onu bekler.

JavaScript

Promise döndüren bir getter vmAsyncExecutor gerektirir. Bu, derleme zamanında kontrol edilemez, bu nedenle vmAsyncExecutor kapalıyken Promise döndüren bir getter çalışma zamanında başarısız olur - çözücü, anahtar dizesi yerine Promise nesnesini alır.

Anahtarı doğrulanmış oturum ve gerekli lisans kontrolleriyle sağlayın. Origin veya Referer tek başına kimlik doğrulamaz; aynı kaynağa GET isteklerinde Origin bulunmayabilir. Yanıt önbelleğini kapatın. Anahtarları doğru derleme sürümüne bağlayın ve paketlerle birlikte dağıtın. Anahtarı alan istemci çalışma sırasında onu inceleyebilir.

JavaScript

Anahtar eşleşmediğinde

Obfuscate edilmiş kod yalnızca getter, obfuscate sırasında kullanılan anahtarın tam olarak aynısını döndürdüğünde çalışır. Anahtarlar farklıysa - ya da getter undefined, null veya boş bir dize döndürürse - şifre çözme yanlış bir anahtar akışı üretir ve kod çalışma zamanında çöp çıktı ya da sıradan bir çalışma zamanı hatasıyla başarısız olur.

Kasıtlı olarak, anahtara özgü ayrı bir hata mesajı yoktur: başarısız bir anahtar, herhangi bir başka çalışma zamanı arızasından ayırt edilemez. Bu nedenle, VM korumalı bir paket yalnızca bu seçenek devredeyken hata fırlatıyorsa, önce anahtar yolunu kontrol edin - getter'ın sayfada çözümlendiğini, boş olmayan bir dize döndürdüğünü ve derleme yaptığınız değerle aynı değeri döndürdüğünü.