У меня есть простое приложение 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 числовых c столбцов, все, что не является 5 числовыми c столбцами, будет просто бесполезной связкой NA
. Но у меня мало опыта в сфере безопасности, поэтому я могу ошибаться.