Quando devo usar eval (tomando uma corda e executá-lo como código em tempo de execução)?

votos
2

Eu ouvi muitas vezes o argumento (em javascript, mas muitas línguas têm uma característica eval-like) que o uso de eval é mau. Os argumentos sendo que a maioria das coisas que você pensaria em usar eval para pode ser feito de outras maneiras, o fato de que eval é muito lento na maioria dos casos, e que pode permitir que os usuários de código de entrada para ser executado (se a devida precaução não foi tomada ). Sabemos que a maioria dos recursos não são apenas inerentemente ruim, mas permite, mas os holofotes sobre eval,

Quais são alguns dos usos válidos de eval? (Além de oferecer um bom recurso para desenvolvedores depuração do aplicativo)

Publicado 26/08/2009 em 23:20
fonte usuário
Em outras línguas...                            


7 respostas

votos
7

Um laço ler-eval-print normalmente ser implementado usando eval.

Respondeu 26/08/2009 em 23:24
fonte usuário

votos
6

eval () tem pontos bons e ruins. O pior aspecto da eval em qualquer língua que a sustenta é que ele abre as portas para falhas de segurança. Se um explorador pode descobrir como obter todo o código personalizado ele escreve em uma instrução eval em sua aplicação, em seguida, ele provavelmente tem a capacidade de fazer todos os tipos de coisas nefastas como roubar dados privados ou desativar serviços que o aplicativo oferece. Desempenho é outra preocupação que você já expressou.

Eval realmente brilha em áreas onde o seu código pode precisar para gerar dinamicamente outro código para executar uma tarefa complexa facilmente. Eu não posso pensar em um exemplo agora, mas qualquer caso em que você precisava fazer isso provavelmente não vai ser trivial. Eu recomendo fazer isso somente quando absolutamente necessário para minimizar o risco do ponto que eu fiz no parágrafo anterior embora. Se possível, nunca mais confiança entrada do usuário como seguro o suficiente para usar eval com.

Respondeu 26/08/2009 em 23:32
fonte usuário

votos
2

A armadilha de eval é o mesmo que vem com injeção de SQL. Se você está construindo a corda de forma dinâmica no seu código e chamar eval em que bem. Mas se o seu código é cegamente concatenação de entrada do usuário em uma string para ser eval'd então você está pedindo por isso. Há inúmeros casos em que eval pode ser útil, mas as pessoas tendem a evitá-lo, porque há outras maneiras de contornar a necessidade de um eval.

Respondeu 26/08/2009 em 23:28
fonte usuário

votos
1

Faz metaprogramming uma moleza. Grande se você quer analisar um programa de alguma forma (ou seja, para depuração ou para fins de criação de perfil).

Respondeu 26/08/2009 em 23:53
fonte usuário

votos
0

O único uso legítimo para evalé para a execução de código que você não tem controle sobre (o que você não deve nunca fazer a menos que você está fazendo um sandbox javascript ).

Respondeu 27/08/2009 em 04:03
fonte usuário

votos
0

Uma vez escrevi um script CGI perl cuja saída foi código perl, que foi recuperado por outro script em outra máquina e eval () 'd. Foi apenas seguro porque eu estava no controle de ambas as extremidades, mas certamente resolvido um problema que de outra forma teria me obrigado a inventar algum tipo de formato de serialização em uma época antes de XML foi amplamente conhecido.

Respondeu 26/08/2009 em 23:41
fonte usuário

votos
0

Decodificação JSON a partir de uma fonte confiável. Avaliando uma expressão introduzida pelo utilizador como em uma calculadora gráfica. Não consigo pensar em muita coisa, apesar de ter sido abusado um pouco de volta no final dos anos 90 por pessoas que não querem aprender as maneiras corretas para acessar os elementos da página.

Respondeu 26/08/2009 em 23:29
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more