O Eval é complementar à compilação, que é usada na modelagem do código. Por modelo, quero dizer que você escreve um gerador de modelos simplificado que gera código de modelo útil que aumenta a velocidade de desenvolvimento.
Eu escrevi uma estrutura em que os desenvolvedores não usam EVAL, mas eles usam nossa estrutura e, por sua vez, essa estrutura precisa usar EVAL para gerar modelos.
O desempenho de EVAL pode ser aumentado usando o seguinte método; em vez de executar o script, você deve retornar uma função.
var a = eval("3 + 5");
Deve ser organizado como
var f = eval("(function(a,b) { return a + b; })");
var a = f(3,5);
O armazenamento em cache f certamente melhorará a velocidade.
Além disso, o Chrome permite a depuração de tais funções com muita facilidade.
Em relação à segurança, usar eval ou não dificilmente fará diferença,
- Primeiro de tudo, o navegador chama o script inteiro em uma caixa de areia.
- Qualquer código que é mau no EVAL, é mau no próprio navegador. O invasor ou qualquer pessoa pode injetar facilmente um nó de script no DOM e fazer qualquer coisa se puder avaliar alguma coisa. Não usar EVAL não fará nenhuma diferença.
- A maior parte da segurança do lado do servidor é prejudicial. A validação incorreta de cookies ou a implementação incorreta da ACL no servidor causam a maioria dos ataques.
- Uma vulnerabilidade recente do Java etc. estava presente no código nativo do Java. O JavaScript foi e foi projetado para ser executado em uma caixa de proteção, enquanto os applets foram projetados para serem executados fora de uma caixa de proteção com certificados etc., que levam a vulnerabilidades e muitas outras coisas.
- Escrever código para imitar um navegador não é difícil. Tudo o que você precisa fazer é fazer uma solicitação HTTP para o servidor com sua string de agente de usuário favorita. Todas as ferramentas de teste zombam dos navegadores de qualquer maneira; se um invasor quiser prejudicá-lo, EVAL é seu último recurso. Eles têm muitas outras maneiras de lidar com a segurança do servidor.
- O DOM do navegador não tem acesso a arquivos e nem um nome de usuário. De fato, nada na máquina a que avaliação pode dar acesso.
Se a segurança do servidor for sólida o suficiente para qualquer um atacar de qualquer lugar, não se preocupe com o EVAL. Como mencionei, se o EVAL não existir, os invasores terão muitas ferramentas para invadir seu servidor, independentemente da capacidade de EVAL do seu navegador.
O Eval é bom apenas para gerar alguns modelos para executar um processamento complexo de strings com base em algo que não é usado previamente. Por exemplo, eu vou preferir
"FirstName + ' ' + LastName"
Ao contrário de
"LastName + ' ' + FirstName"
Como meu nome de exibição, que pode vir de um banco de dados e que não é codificado.