Wenn Sie exec und eval brauchen, ja, dann brauchen Sie sie wirklich.
Der Großteil der Verwendung dieser Funktionen (und ähnlicher Konstrukte in anderen Skriptsprachen) in der freien Wildbahn ist jedoch völlig unangemessen und könnte durch andere, einfachere Konstrukte ersetzt werden, die schneller und sicherer sind und weniger Bugs aufweisen.
Sie kann mit korrektem Escaping und Filterung, sichere Verwendung von exec und eval. Aber die Art von Programmierer, die direkt auf exec/eval zurückgreift, um ein Problem zu lösen (weil sie die anderen Möglichkeiten, die die Sprache zur Verfügung stellt, nicht verstehen), ist nicht die Art von Programmierer, die in der Lage sein wird, diese Verarbeitung richtig hinzubekommen; es wird jemand sein, der die String-Verarbeitung nicht versteht und einfach blind Teilstrings verkettet, was zu fragilem, unsicherem Code führt.
Das ist die Verlockung der Strings. Das Herumwerfen von Saitensegmenten siehe einfach und gaukelt naiven Programmierern vor, dass sie wissen, was sie tun. Aber die Erfahrung zeigt, dass die Ergebnisse fast immer in irgendeiner Ecke (oder auch nicht) falsch sind, oft mit potenziellen Sicherheitsauswirkungen. Deshalb sagen wir, eval ist böse. Deshalb sagen wir, dass regex-for-HTML böse ist. Aus diesem Grund fordern wir die SQL-Parametrisierung. Ja, Sie kann all diese Dinge bei der manuellen Verarbeitung von Zeichenketten richtig zu machen... aber wenn Sie nicht bereits verstehen, warum wir diese Dinge sagen, stehen die Chancen gut, dass Sie wird nicht .
1 Stimmen
Können Sie einige Zitate von "mehreren Stellen" anführen, um zu klären, auf welche Bemerkungen Sie sich stützen? Es ist wichtig zu wissen, was Sie gelesen haben, um zu dem Schluss zu kommen, dass sie gemieden werden sollten. Das ist kein einfaches Thema, und Sie müssen Ihre Informationsquelle angeben, um Ihre Frage zu klären.
0 Stimmen
Soweit ich mich erinnere (da ich diese Orte im Laufe der Jahre nicht mit Lesezeichen versehen habe), haben die Warnungen in der Regel die Form von "Natürlich könnten wir
eval()
um dieses Problem zu lösen, aber das wäre unanständig."0 Stimmen
Das jüngste Beispiel war wohl die Verwendung von
exec()
als Mittel zum Kontrollfluss innerhalb des Programms.1 Stimmen
Ähnlich: stackoverflow.com/questions/637421/is-eval-supposed-to-be-nasty/
0 Stimmen
Kommentare der Art "Benutze einfach nicht `eval" sind überall zu finden, und ich stoße täglich auf sie. Hier ist einer: stackoverflow.com/questions/8294618/