Имеет ли этот R-Shiny с функцией загрузки CSV уязвимости в безопасности? - PullRequest
1 голос
/ 09 апреля 2020

У меня есть простое приложение 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. Но у меня мало опыта в сфере безопасности, поэтому я могу ошибаться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...