Por que exec () e eval () devem ser evitados?

Eu já vi isso várias vezes em vários lugares, mas nunca encontrei uma explicação satisfatória a respeito de por que esse deveria ser o caso.

Então, esperançosamente, um será apresentado aqui. Por que deveríamos (pelo menos, geralmente) não usarexec() eeval()?

EDIT: vejo que as pessoas estão assumindo que esta questão refere-se a servidores web - isso não acontece. Eu posso ver porque uma string não-ananizada foi passada paraexec poderia ser ruim. É ruim em aplicativos não-web?

questionAnswers(11)

yourAnswerToTheQuestion