如果文件包含病毒,如何让 Bitdefender(防病毒)扫描文件并将其删除?
Posted
技术标签:
【中文标题】如果文件包含病毒,如何让 Bitdefender(防病毒)扫描文件并将其删除?【英文标题】:How can I get Bitdefender (antivirus) to scan a file and delete it if the file contains a virus? 【发布时间】: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 以检查病毒,然后将它们存储在其他地方。 【参考方案1】:我在@sheavens 和以下代码的帮助下解决了这个问题:
Process cmd = new Process();
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.FileName = @"C:\Program Files\Bitdefender\Endpoint Security\product.console.exe";
var args = String.Format("/c FileScan.OnDemand.RunScanTask custom path=\"0\" infectedAction1=delete", filename);
startInfo.Arguments = args;
cmd.StartInfo = startInfo;
cmd.StartInfo.UseShellExecute = false;
cmd.StartInfo.RedirectStandardOutput = true;
cmd.StartInfo.RedirectStandardError = true;
var result = cmd.Start();
这将创建一个新进程并查找 bitdefender exe,然后运行命令以扫描提供的路径中的文件。
【讨论】:
可以先扫描文件再存储吗?我的意思是扫描例如文件流? 这是一年多前发布的,我记得这是唯一有效的解决方案。因此,要回答您的问题,不,我认为这是不可能的。但是,如果您找到一种方法,请在此处发布! :) @sicknote 我看到您正在使用 Endpoint Security。免费版有命令行支持吗? @Joshua 不幸的是:(我使用了免费试用版,然后不得不付费以上是关于如果文件包含病毒,如何让 Bitdefender(防病毒)扫描文件并将其删除?的主要内容,如果未能解决你的问题,请参考以下文章
Bitdefender 将我的控制台应用程序检测为 Gen:Variant.Ursu.56053 [关闭]
Postgresql 8.4 和 BitDefender 11