В настоящее время я пишу приложение, которое принимает серию форм Clojure, и когда они оцениваются, результаты возвращаются в виде списка
так, например, ввод будет
(data "abc" :identifier)
(data "gee" :identifier)
(content "def" :identifier [1 2 3 4 5])
Функции в бэкэнде просто превращают их в карты Clojure, например,
(defn data [text id]
{:text text :id id})
(defn content [text id cont]
{:text text :id id :cont cont})
Проблема в том, что способ, которым я сейчас обрабатываю код, заключается в принятии ввода с помощью (-> input read-string eval)
и получении содержимого соответственно. Это плохо, потому что любой может просто добавить хитрый (System/exit 1)
на вход и выключить JVM
Существует ли какой-либо способ «внесения в белый список» форм Clojure, которые можно выполнить на этом шаге, и внесения в черный список всего неприятного? Или я слишком наивен, чтобы использовать формы Clojure в качестве механизма ввода данных?