【发布时间】:2020-02-05 13:00:06
【问题描述】:
这是我用来将文件写入 app_data 文件夹的代码:
var filename = Server.MapPath("~/App_Data") + "/" thefilename;
var ms = new MemoryStream();
file.InputStream.CopyTo(ms);
file.InputStream.Position = 0;
byte[] contents = ms.ToArray();
var fileStream = new System.IO.FileStream(filename, System.IO.FileMode.Create,
System.IO.FileAccess.ReadWrite);
fileStream.Write(contents, 0, contents.Length);
fileStream.Close();
这可以很好地写入文件。但是,如果上面有病毒,Bitdefender 不会删除这个文件,除非我在 IIS 上手动尝试打开/移动文件。如果我这样做,那么它会立即被删除。
如果我直接将测试病毒文件复制并粘贴到 app_data 文件夹中,Bitdefender 会立即将其删除。
我尝试使用各种方法来读取/移动带有System.IO.File.Move/Open/ReadAllLines 的文件。然而,没有什么会触发位防御者删除文件。
我唯一要做的就是创建一个新进程来打开文件。但是,我不想在服务器上这样做。我正在寻找不同的解决方案。这是我用来打开文件的代码,它确实会导致 Bitdefender 扫描并删除受感染的文件:
Process cmd = new Process();
cmd.StartInfo.FileName = filename;
cmd.Start();
在这种情况下,System.IO.File.Open 的解决方案最适合我,但我不知道为什么它不起作用。或者,触发 Bitdefender 立即扫描文件的方法也是一种可行的解决方案。
【问题讨论】:
-
它不起作用,因为 BitDefender 没有挂钩到 IIS 进程。但是,它确实与启动进程的本机 Windows 代码挂钩。但是我不明白您要在这里解决什么问题-包含病毒的文件本质上并不危险,除非有人尝试执行它,否则任何防病毒软件都已捕获。这感觉像是一个 X-Y 问题——你到底想在这里实现什么?
-
我认为 OP 正在尝试检测并阻止病毒上传到他的服务器
-
@IanKemp 我的应用程序允许用户上传文件,所以我首先将它们上传到 app_data 以检查病毒,然后将它们存储在其他地方。
标签: c# .net filestream antivirus appdata