闪亮的应用程序中的安全控制台

时间:2019-01-01 22:08:47

标签: r security shiny

我目前正在开发有光泽的应用程序,旨在通过交互式课程来教授R。为此,我已经处理了多项选择题和自由文本题。现在,我要解决的问题是应用程序的用户(学生)可以在文本字段中输入自己的R代码并运行它。

我当前的实现基本上是在观察者内部使用eval

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

此实现在安全性方面存在严重缺陷,因为用户可以在服务器上插入并运行任意代码。

  • 使控制台更安全的最佳实践是什么?
  • 评估期间应如何指定工作目录?

计划在某个时候发布此软件的开源版本。因此,我希望使用一种不依赖于平台且不会使应用程序的部署复杂化的解决方案。

1 个答案:

答案 0 :(得分:1)

对于评估任意代码,我喜欢白名单方法,在该方法中,您将所有已知和安全的函数放在一个空环境中进行评估。与黑名单函数或试图在R之外进行沙箱处理相比,我认为这是简单易用的解决方案。以下是示例的更好答案:Safely evaluating arithmetic expressions in R?

或者,这是一个采用黑名单方法的POC软件包:https://github.com/Rapporter/sandboxR

我能想到的所有其他沙箱方法都特定于Linux。有https://github.com/jeroen/RAppArmor,它使用AppArmor在操作系统级别上进行沙箱测试。然后使用Docker或Linux容器运行沙盒代码。

相关问题