РЕДАКТИРОВАТЬ 3 С тех пор, как я задал этот вопрос, произошли некоторые новые события. По сути, я не «видел вещи», и веб-приложения, написанные на Clojure, были признаны уязвимыми, что вызвало изменения в Clojure 1.5 и очень горячем обсуждении групп Clojure Google.
Вот цитата из Hacker News об изменениях в Clojure 1.5:
Еще одна немного интересная вещь - это внезапное улучшение
read-eval и EDN [2]. Это в основном из-за непогоды
Ruby / Rubygems участвовал в YAML-эксплойтах, что вызвало
обсуждение того, как читатель Clojure должен работать по умолчанию.
Отверстия были найдены, и уже слишком поздно, чтобы действительно исправить Clojure, поэтому read-eval по-прежнему будет поставляться по умолчанию с установленным значением true (потому что в противном случае это сломало бы слишком много вещей) , И любой, кто анализирует входные данные в Clojure, не должен использовать функции чтения по умолчанию, кроме функций EDN.
Так что я, конечно, ничего не видел, и людям не потребовалось много времени (даже 18 месяцев), чтобы найти способы атаковать обычные стеки веб-приложений Clojure.
РЕДАКТИРОВАТЬ 2 Я не знал этого, но мой вопрос - обман следующего вопроса (который был описан как «вопрос-убийца»): Безопасность / проверка данных Lisp
Если кому-то интересны ответы на этот вопрос, я бы предложил открыть этот вопрос и прочитать ответы гуру-лиспов, а не ответы типа , здесь ничего не видно, двигаться вперед, это как PHP или JavaScript ".
EDIT : Я хотел бы знать, если каким-то образом, поскольку это Лисп, злоумышленнику будет "проще" преобразовать "данные" (т. Е. "Созданный пользовательский ввод со злым умыслом"). ") в" код ". Например, мне нужно экранировать / заменить все круглые скобки в пользовательском вводе, прежде чем начинать "оценивать" / анализировать или что-то еще?
Оригинальный вопрос
Я все еще читаю о Лиспе, и вдруг мне стало интересно, что со всем этим «код - это данные» / «данные - это код», нужно ли Лисп выполнять очистку ввода для предотвращения атак?
Я специально думал о веб-приложениях, скажем, когда пользователь делает HTTP-пост.
Что если данные, которые он отправляет, содержат такие вещи:
This is some malicious (eval '(nasty-stuff (...)) or whatever.
(я не программист на Лиспе, это всего лишь пример того, что я имею в виду, это не означает, что на самом деле я имею в виду код)
Есть ли что-то особенное, о чем следует помнить из-за того, как работает Lisp? Например, если какой-то хакер темной стороны узнает, что какой-то веб-сервер работает на Clojure, может ли он использовать этот факт и затем ввести «код в скобках», который затем будет оцениваться на веб-сервере?
Это вообще проблема при получении / разборе пользовательских данных (и, следовательно, потенциально созданных данных) из Lisp?