Hallo,
Nochmal: Ich wüsste nicht, warum eval() an der hier diskutierten Stelle problematisch ist.
Ich auch nicht wirklich. Felix schrieb genau, was Crockford meistens sagt, und du fragtest, warum. Ich denke, eben gerade weil Crockford es sagt. Die Frage ist eigentlich, warum genau bringt Crockford das so plakativ (s.u.)?
Und eine Alternative zum Nachladen von Code habe ich auch genannt.
Ist klar. Es gibt Alternativen.
Felix' starre Ablehnung von eval() halte ich für unbegründet und völlig allgemeine Dogmata sind m.M.n. unbrauchbar, auch wenn sie von einer Autorität stammen.
Da wäre ich mir nicht so sicher. Das Problem ist, dass wenn man "eval is evil" genau begründet, damit automatisch auch eine Anleitung zum Missbrauch gegeben wird. Sicher ist, dass es dabei um Sicherheitsrisiken geht, und wenn man nicht gerade eine Hackeranleitung schreiben will, muss man sich eben auf Aussagen wie "eval is evil. Don´t use it!" beschränken.
eval() ist meistens einfach unnötig und wird benutzt, wenn die elegantere und JavaScript-typische Lösungsweise unbekannt ist.
Das stimmt, ist aber m.E. kein hinreichender Grund zur Verteufelung von eval(). Crockford empfiehlt z.B. auch, auf das with-Statement komplett zu verzichten, ohne aber zu sagen, with sei böse. Es führt nur zu manchmal uneindeutigem Code. "evil" meint aber mehr als nur "unnötig, es geht auch anders", es meint wirklich "böse, schädlich".
[...] nur zwei Alternativen, von der ich i.d.R. das Einbinden eines script-Elements präferieren würde. [...] Und die Same Origin Policy wirkt nicht [...].
Das ist leider auch ein Sicherheitsrisiko. Zum dynamischen Nachladen via script-Tag, dem sogenannten "Script Tag Hack", meint Crockford: "[...] is not secure and should be avoided."
Seinem Link folgend findet man dann in roter Schrift "Be extremely cautious in your own use, and even more cautious in teaching it outside. The unrestricted script tag hack is the last big security hole in browsers. It cannot be easily fixed because the whole advertising infrastructure depends on the hole. Be very cautious." (Dieses Zitat ist nicht von Crockford)
Man fragt sich natürlich, was dann überhaupt noch als sicher angesehen werden kann, wenn man JavaScript einsetzt. Ich habe dazu einmal einen Thread eröffnet, und der Tenor der Antworten war sinngemäß "kein Problem, alles im grünen Bereich". Naja, kommt wohl darauf an, welchen Anspruch man bzgl. Sicherheit hat...
Gruß, Don P