我正在开发一个用于计量经济学课程的闪亮应用。服务器加载一个数据集,学生需要输入从中得出一些结果的代码。 this 和 shinyjs 包提供了这样的功能。这些实现的问题是安全风险。学生可以访问文件系统等。有没有办法避免这种情况?限制访问当前加载的数据集的解决方案?
考虑以下最小的工作示例(从 ShinyAce 包中稍加修改的示例):
library(shiny)
library(shinyAce)
init <- "lm(mpg ~ drat + vs, data = example_data)"
ui <- fluidPage(
fluidRow(
column(
6,
h2("Source Code"),
aceEditor("code", mode = "r", height = "200px", value = init),
actionButton("eval", "Evaluate")
),
column(
6,
h2("Output"),
verbatimTextOutput("output")
)
)
)
server <- function(input, output, session) {
example_data <- mtcars
output$output <- renderPrint({
input$eval
eval(parse(text = isolate(input$code)))
})
}
shinyApp(ui = ui, server = server)