Boas práticas
Como aplicar a ofuscação de forma eficaz: o que proteger, o que deixar como está e o que a ofuscação não pode fazer por você.
Recomendações
Ofusque apenas o seu próprio código.
Não aplique a ofuscação VM a scripts de terceiros, bibliotecas ou polyfills. Eles já vêm minificados, e a ofuscação só vai deixá-los mais lentos.
Use o modo comment para uma proteção cirúrgica.
Defina
vmTargetFunctionsModecomo'comment'e marque apenas as funções sensíveis com/* javascript-obfuscator:vm */, em vez de proteger tudo. Veja Selecionando funções específicas.Teste a fundo depois da ofuscação.
Sempre teste o código ofuscado no seu ambiente de destino. Algumas opções podem quebrar o código de formas sutis. As defesas de execução também reagem à automação de testes e aos depuradores; veja Testes e CI.
Exclua os caminhos frequentes da ofuscação VM.
Use
vmExcludeFunctionspara loops de animação, renderização em tempo real ou código chamado com frequência. Ela só corresponde a nomes de funções de nível raiz (com Async Executor, às funçõesasyncmais externas); para manter código frequente aninhado fora da VM, use o modo comment e marque apenas as funções que precisam de proteção.
Aviso crítico de segurança
Nunca armazene chaves de API, segredos ou credenciais em código JavaScript de frontend, nem mesmo com ofuscação.
A ofuscação aumenta o esforço necessário para entender e modificar o código, mas não é criptografia e não garante que a engenharia reversa seja impossível. O runtime continua observável em um ambiente controlado pelo atacante, então um atacante determinado sempre consegue extrair dados de código que roda no cliente. Mantenha segredos e decisões de segurança definitivas no servidor.
Na prática:
- Armazenar segredos no seu servidor de backend
- Usar variáveis de ambiente no servidor
- Encaminhar as chamadas de API pelo seu backend para esconder as chaves
- Usar tokens de curta duração emitidos pelo seu servidor
O que você deve proteger?
A ofuscação VM é ideal para:
- Algoritmos proprietários e lógica de negócio
- Código de validação de licença (verificações no cliente)
- Verificações antiadulteração e de integridade
- Lógica de jogos e mecanismos anticheat
- Implementações de recursos premium
- Lógica de cálculo de preços
Build e publicação
Ofusque a saída compilada e empacotada como a última etapa do build; veja em Compatibilidade de execução o pipeline de build. Meça o custo da predefinição escolhida no seu próprio código, como descrito em Escolhendo predefinições. Rode os testes funcionais em um build de testes e depois valide o artefato de produção separado que você realmente publica, como descrito em Testes e CI.
