Questão:
Ofuscando o JavaScript com caracteres de largura zero - prós e contras?
James Donnelly
2013-03-20 17:06:39 UTC
view on stackexchange narkive permalink

Isso vem de comentários sobre uma pergunta no StackOverflow sobre variáveis ​​JavaScript: Por que ◎ ܫ ◎ e ☺ nomes de variáveis ​​JavaScript não são válidos?

JavaScript aceita caracteres de largura zero como nomes de variáveis ​​válidos, por exemplo, todas as três variáveis ​​têm nomes diferentes, mas são visualmente idênticas:

  var ab, / * ab * / a‍b, / * a‍ b * / a‌b; / * a‌ b * /  

Aqui está um JSFiddle exemplo das três variáveis ​​acima em uso.

Quais são os prós e contras de fazer isso como uma técnica de ofuscação para JavaScript (e outras linguagens de suporte)?

Quatro respostas:
WPrecht
2013-03-20 17:19:59 UTC
view on stackexchange narkive permalink

Bem, em seus próprios programas, provavelmente não há problema. Mas em um ambiente corporativo é um pesadelo de manutenção sem documentação extremamente boa e / ou continuidade da equipe. Nada disso parece tão comum na minha experiência.

Acho que uma pergunta mais geral poderia ser: "as técnicas de ofuscação são realmente úteis?" Eu posso entender o Minify para fins de carregamento de página. Mas esconder a fonte não parece fazer sentido. Ou você está pensando que tem algum algoritmo inteligente, nunca feito antes. Se for esse o caso, talvez JS não seja o idioma para isso, pois realmente não há como escondê-lo completamente. Ou você está tentando ser trixoso e tentar alguma segurança através da obscuridade, geralmente uma má ideia.

Michael Anderson
2013-03-20 19:25:04 UTC
view on stackexchange narkive permalink

Um grande problema é colocado nas seguintes questões:

  • Quais intérpretes de JavaScript quebram quando confrontados com esse código?
  • Isso é aceitável?

Um Obfuscator normal simples deve produzir código aceitavelmente obtuso sem quebrar alguns interpretadores de JavaScript.

Se alguém realmente quiser trabalhar com caracteres de largura zero em nomes de variáveis, ele será incluído no Processo de ofuscação de código (o arquivo js resultante só deve ser carregado após uma verificação de versão do navegador). Dessa forma, o desenvolvedor não precisa lidar com caracteres de largura zero no código-fonte original.

Gilles 'SO- stop being evil'
2013-03-21 00:10:37 UTC
view on stackexchange narkive permalink

Desofuscar nomes de variáveis ​​com caracteres de largura zero é tão fácil quanto renomear variáveis. Isso é algo que você faria de qualquer maneira como parte do processo de desofuscação, ao inferir a intenção por trás das variáveis ​​e dar-lhes nomes significativos. Portanto, essa técnica pode, no máximo, levar o leitor a fazer uma passagem inicial de renomeação. O custo adicional de desofuscação é insignificante. Não vale a pena, não há vantagem para a , b , c ,…

George V. Williams
2013-03-21 02:36:51 UTC
view on stackexchange narkive permalink

Isso também quebra alguns aspectos mais bonitos (mas não todos). Por exemplo, executando seu código por meio do JS Beautifier:

  var ab = "Hello, world!", A‍ b = "String completamente diferente!", A‌ b = "Mais uma string completamente diferente! "; document.getElementById ('result1'). innerHTML = ab; document.getElementById ('result2'). innerHTML = a‍ b; document.getElementById ('result3'). innerHTML = a‌ b;  

(Observe os espaços entre "a" e "b".)

Você pode argumentar que isso é um prós e um contra. Dependendo de como você confunde exatamente o código, pode ser ainda mais confuso ver espaços aleatórios sendo injetados. Por outro lado, também alerta o leitor de que algo está definitivamente errado.



Estas perguntas e respostas foram traduzidas automaticamente do idioma inglês.O conteúdo original está disponível em stackexchange, que agradecemos pela licença cc by-sa 3.0 sob a qual é distribuído.
Loading...