Моя проблема
В настоящее время я пишу REST-API, который должен принимать запросы JSON и работать с используемой нами библиотекой-интерном. Основное использование будет состоять в том, чтобы либо запустить сервер с веб-интерфейсом, либо использовать другой язык для работы с API, поскольку Clojure не распространен в других местах.
Чтобы достичь этого, запрос JSON содержит данные и имя функции, которые запускаются с разрешением, поскольку я должен сделать это так, чтобы нам не приходилось каждый раз менять функциюдобавлен / удален
Теперь актуальный вопрос: как я могу убедиться, что функция, которую я запускаю в сочетании с аргументом, не уничтожает все это?
Итак, что я уже пробовал?
Так вот, я до сих пор говорил только половину правды: я не использую разрешение, я использую ns-разрешение. Моя первая интуиция состояла в том, чтобы создать отдельный файл, который будет загружаться во все пространства имен из библиотеки, с этим вы ничего не поделаете. Проблема в том, что мне нужны только эти функции, и я не знаю ни одного способа удаления функций clojure.core. Я мог бы сделать черный список для тех, но белый список был бы намного легче. Не говоря уже о том, что я никогда не смогу найти все основные функции, которые на самом деле должны быть в черном списке.
Другая вещь - это ввод. Опять же, у меня есть основная идея, заключающаяся в том, чтобы очистить входные данные, чтобы заменить все виды скобок, просто чтобы убедиться, что входные данные не являются другим кодом замыкания, который просто обошел бы ограничение пространства имен сверху. Но будет ли этого на самом деле достаточно? У меня не так много опыта взлома вещей.
Еще одна проблема, которую я слышал, заключается в том, что некоторые функции могут запускать ввод в качестве аргумента задолго до того, как предполагалось. Сервер работает с кольцом и его расширением JSON. JSON должен давать только строки, числа, логические значения и nil как атомарные типы данных. Я пришел к выводу, что каждый возможный злонамеренный ввод должен быть строкой на моем конце - помимо решения, есть ли какая-либо функция, которая может иметь побочный эффект от запуска такого ввода? Поскольку они строковые: есть ли какая-то проблема с данными вообще?