безопасная консоль внутри блестящего приложения - PullRequest
0 голосов
/ 02 января 2019

В настоящее время я разрабатываю блестящие приложения, которые направлены на преподавание R с помощью интерактивных курсов.С этой целью я уже работал с вопросами с несколькими вариантами ответов и вопросами с произвольным текстом.Теперь я хочу заняться вопросами, когда пользователи приложения (студенты) могут ввести свой собственный R-код в текстовое поле и запустить его.

Моя текущая реализация в основном использует eval внутри наблюдателя.

## evaluate the users expression and store the results.
observeEvent(input$evluate, {
  reactives$result <- eval(parse(text = input$console_in))
})

Эта реализация имеет серьезные недостатки, когда речь заходит о безопасности, поскольку пользователи могут вставлять и запускать произвольные коды на сервере.

  • Как лучше всего сделать консоль более безопасной?
  • Как указать рабочий каталог во время оценки?

В какой-то момент планируется выпустить версию этого программного обеспечения с открытым исходным кодом.Поэтому я бы предпочел решение, не зависящее от платформы и не усложняющее развертывание приложения.

1 Ответ

0 голосов
/ 02 января 2019

Для оценки произвольного кода мне нравится подход белого списка, когда вы помещаете все известные и безопасные функции в пустую среду для оценки. Я думаю, что это простое и легкое решение по сравнению с черными списками функций или попыткой изолированной среды вне R.Вот гораздо лучший ответ с примерами: Безопасное вычисление арифметических выражений в R?

В качестве альтернативы, вот пакет POC, который использует подход черного списка: https://github.com/Rapporter/sandboxR

Все остальныеМетоды песочницы, о которых я могу думать, специфичны для Linux.Есть https://github.com/jeroen/RAppArmor, который использует AppArmor для песочницы на уровне ОС.А затем с помощью контейнеров Docker или Linux для запуска изолированного кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...