Это смертельный вопрос, и я подумал о том же, когда читал про Лисп. Хотя я не сделал ничего значимого в LISP, поэтому мой ответ очень ограничен.
То, что я могу вам сказать, это то, что eval()
противно . Есть поговорка, которая мне нравится: «Если eval - это ответ, значит, вы задаете не тот вопрос». --Unknown.
Если злоумышленник может контролировать данные, которые затем оцениваются, у вас есть очень серьезная уязвимость при удаленном выполнении кода. Это можно смягчить, и я покажу вам пример с PHP, потому что это то, что я знаю:
$id=addslashes($_GET['id']);
eval('$test="$id";');
Если вы не выполняете добавление косой черты, злоумышленник может получить удаленное выполнение кода, выполнив следующее:
http://localhost?evil_eval.php?id="; phpinfo();/*
Но косые черты добавления превратят "
в \"
, таким образом не давая злоумышленнику "вырваться" из "данных" и иметь возможность выполнять код. Что очень похоже на инъекцию sql.