我目前正在开发闪亮的应用程序,旨在通过交互式课程教授R。为此,我已经处理了多项选择题和自由文本题。现在,我要解决的问题是应用程序的用户(学生)可以在文本字段中输入他们自己的R代码并运行它。
我当前的实现基本上eval
在观察者内部使用。
## evaluate the users expression and store the results.
observeEvent(input$evluate, {
reactives$result <- eval(parse(text = input$console_in))
})
由于用户可以在服务器上插入并运行任意代码,因此此实现在安全性方面存在严重缺陷。
计划在某个时候发布该软件的开源版本。因此,我更喜欢一个不依赖平台且不会使应用程序部署复杂化的解决方案。
对于评估任意代码,我喜欢白名单方法,在此方法中,您将所有已知和安全的函数放在一个空环境中进行评估。我认为这是简单易用的解决方案,而不是将函数列入黑名单或尝试在R之外进行沙箱测试。用示例提供更好的答案:安全地评估R中的算术表达式?
另外,这是一个采用黑名单方法的POC软件包:https : //github.com/Rapporter/sandboxR
我能想到的所有其他沙盒方法都是特定于Linux的。有一个https://github.com/jeroen/RAppArmor,它使用AppArmor在操作系统级别进行沙箱测试。然后使用Docker或Linux容器运行沙盒代码。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句