r - 这款带有 csv 上传功能的 R-Shiny 是否存在安全漏洞?
问题描述
我有一个简单的 Shiny 应用程序,允许上传一个简单的 csv 文件。
它期望 csv 文件在每行中有 5 个逗号分隔的数字。
然后它将这个文件显示给用户。
这是代码:
library(shiny)
ui <- fluidPage(
fluidRow(
column(
2, wellPanel(
fileInput("file1", "Choose csv file:",
multiple = FALSE,
accept = c("text/csv",
"text/comma-separated-values,text/plain",
".csv")
)
)
)
),
fluidRow(
column(
2, tableOutput(outputId = "contents")
)
)
)
server <- function(input, output, session) {
uploaded <- reactive({
req(input$file1)
df <- read.csv(input$file1$datapath,
header = FALSE,
col.names = c("a", "b", "c", "d", "e"),
colClasses = rep("numeric", 5))
return(df)
})
output$contents <- renderTable({
uploaded()
})
}
shinyApp(ui = ui, server = server)
如您所见,没有错误处理。如果用户上传的文件与应用程序期望的不同,这可能会导致意外结果。我同意 - 我希望用户在使用这个应用程序时会表现得很好。
这会导致某种安全漏洞吗?我的想法是,因为read.csv()
需要 5 个数字列,所以任何不是 5 个数字列的东西都将只是一堆无用的NA
. 但是,我在安全方面几乎没有经验,所以我可能对此非常错误。
解决方案
推荐阅读
- angular - 角度自定义管道以获取复选框中的项目数
- dictionary - d3-geo-voronoi d3-tile 多边形填充问题
- r - 如何在条形图的条内显示列的值
- java - 为什么变量需要在finally块中是静态的
- maven - 是否可以使用静态网站制作 Maven 存储库?
- ios - 从主线程 iOS 上的子类创建自定义 UIView
- javascript - 内容可编辑的正则表达式空格不起作用
- c# - 如何从 azure 函数执行我的 docker 容器
- c - 使用字节数组我得到一个“从 char* 到字节的无效转换”
- java - 没有使用 JUnit @Rule 删除 TemporaryFolder