Compatibilité d'exécution
Choisissez target selon l'environnement d'exécution réel. Les builds Browser et Node peuvent contenir des défenses différentes ; une cible Browser ne remplace pas Node.
target
browser- Chrome, Firefox, Safari, Edge.browser-no-eval- identique àbrowser, mais la sortie n'utilise paseval(). À utiliser lorsque la page cible a une Content Security Policy qui interditeval/unsafe-eval.node- environnement Node.js. Les options propres au navigateur sont désactivées (elles nécessitentwindow/documentet seraient sans effet ou lèveraient une exception dans Node). Certaines défenses devmSelfDefendingqui reposent sur des API propres au navigateur - détection des navigateurs headless, récupération d'un realm sain via une iframe, vérifications anti-inspecteur et DOM - ne sont pas émises pour cette cible.service-worker- contexte de Service Worker. Pas dewindow, pas dedocument, et une globaleselfdifférente.userscript- bac à sable d'un gestionnaire de scripts utilisateur (par exemple Tampermonkey). Les défenses devmSelfDefendingsont adaptées en conséquence. Nécessite VM Obfuscation (ou Parse HTML) et l'obfuscateur v6.9.0+.bytenode- pour du code qui sera compilé en.jscavec bytenode. Nécessite VM Obfuscation (ou Parse HTML) et l'obfuscateur v6.13.0+.
Environnement navigateur et domaines
Les déclarations sur l'endroit où le code s'exécute doivent correspondre au déploiement réel. browserEnvironment doit décrire la manière dont le build est réellement servi (voir Browser Environment), et VM Domain Lock doit lister chaque domaine qui le sert (voir VM Domain Lock). Les outils d'automatisation et les débogueurs peuvent déclencher les défenses avancées ; voir Tests et CI.
JavaScript
Les noms de fonctions et le texte source des fonctions peuvent changer avec l'obfuscation. N'utilisez pas .name ni .toString() comme données applicatives stables ; utilisez plutôt des identifiants explicites. Les globales publiques peuvent rester visibles lorsque vos réglages l'exigent.
strictMode
Avec strictMode: null et strictMode: false, les directives explicites, les modules ES et les méthodes de classe sont toujours reconnus comme stricts. strictMode: true traite toute l'entrée comme stricte. Faites correspondre le contexte d'exécution final ; un bundler qui ajoute le mode strict après l'obfuscation peut modifier le comportement.
Chaîne de build
Compilez le TypeScript ou le JSX et générez le bundle de votre application avant l'étape finale d'obfuscation. Conservez les commentaires /* javascript-obfuscator:vm */ tout au long de ce build pour que le mode comment puisse encore les trouver. Ne minifiez pas, ne reformatez pas et ne réécrivez d'aucune autre façon la sortie protégée par Self Defending ou VM Self Defending par la suite. Les source maps ne sont pas disponibles pour l'obfuscation VM et HTML.
