Bytecode Dizisi Kodlama Anahtarını Dışarı Taşıma
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ı.
vmBytecodeArrayEncodingKeyGetterifadenizin çö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.
Anahtar, obfuscate edilmiş kod çalışmadan önce var olmalıdır:
Diğer senkron kaynaklar da aynı şekilde çalışır - uygulamanızın zaten doldurduğu hangisiyse onu seçin:
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.
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.
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ü.
