我们有一个 asp.net 应用程序,允许用户上传文件,文件保存到临时磁盘位置,然后附加到记录并保存在数据库中。
我的问题与安全和/或病毒问题有关。这种方法是否存在任何安全漏洞?如果从不执行病毒是否会造成危害(文件被保存,然后使用文件流打开,转换为字节数组并保存到 DB。
稍后,当需要该文件时,我们将文件流式传输回给用户。
文件保存到 Web 服务器上的文件夹中,如下所示:
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);