У нас есть приложение asp.net, которое позволяет пользователям загружать файлы, файлы сохраняются во временную папку на диске, а затем присоединяются к записи и сохраняются в БД.
Мой вопрос касается вопросов безопасности и / или вирусов. Есть ли дыры в безопасности в этом подходе? Может ли вирус причинить вред, если он никогда не выполняется (файл сохраняется, затем открывается с использованием файлового потока, преобразуется в байтовый массив и сохраняется в БД.
Позже, когда файл понадобится, мы передадим файл обратно пользователю.
Файлы сохраняются в папке на веб-сервере следующим образом:
context.Request.Files[0].SaveAs();
(папка находится в папке app_data / files)
позже, когда тот же пользователь создает запись, мы берем файл с диска и сохраняем его в БД следующим образом:
FileStream fileStream = File.OpenRead(currentFilePath);
byte[] ba = new byte[fileStream.Length];
int len = fileStream.Read(ba, 0, ba.Length);
//ba saved to DB here as varbinary(max)
Мы ограничиваем количество файлов, которые могут быть загружены в этот список:
List<string> supportedExtensions = new List<string>(10) {".txt", ".xls", ".xlsx", ".doc", ".docx", ".eps", ".jpg", ".jpeg", ".gif", ".png", ".bmp", ".rar", ".zip", ".rtf", ".csv", ".psd", ".pdf" };
Файл передается обратно в веб-браузер пользователя следующим образом:
//emA = entity object loaded from DB
context.Response.AppendHeader("Content-Disposition", "inline; filename=\"" + emA.FileName + "\"");
context.Response.AddHeader("Content-Type", emA.ContentType);
context.Response.BinaryWrite(emA.FileContent);