在闪亮的应用程序中安全地执行用户定义的代码输入

时间:2021-05-11 10:02:19

标签: r shiny shinyjs

我正在开发一个用于计量经济学课程的闪亮应用。服务器加载一个数据集,学生需要输入从中得出一些结果的代码。 thisshinyjs 包提供了这样的功能。这些实现的问题是安全风险。学生可以访问文件系统等。有没有办法避免这种情况?限制访问当前加载的数据集的解决方案?

考虑以下最小的工作示例(从 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)

0 个答案:

没有答案