检查上传的文件是否含有病毒

14

我有一个应用程序。用户可以上传文件,我将其保存在磁盘上,并在用户需要时返回。我需要为上传的文件实现一些防病毒保护。

我找到了3种解决方案:

  1. 使用在线杀毒软件
  2. 在我的服务器上安装杀毒软件,并从命令行检查上传的文件
  3. 通过SDK或API集成杀毒软件

我不喜欢第一种解决方案,因为我会将我的文件和私人信息发送到其他服务器。 我认为第二种解决方案是最好的,但我不知道如何正确地实施它。 最后一种解决方案很好,但我找不到任何具有Java API的好的著名杀毒软件。

请给我一些解决此问题的方向。也许有些建议或文献。 哪种方法是最佳的?


1
虽然这个问题基本上是基于观点的,但我建议选择方案#2,即将杀毒进程作为子进程从您的应用程序中启动,然后检查子进程通过其退出代码报告的内容(例如0表示干净,1表示感染,或其他情况-请查阅文档),等等。 - code_dredd
@ray 我找到了这个建议: “从应用程序的角度来看,您可以创建一个代理服务器,在该服务器上安装防病毒软件,将文件上传到该服务器上进行扫描,然后传输到目标服务器。” 但是为什么我们需要使用一些新的服务器呢? - zam
如果您有基础设施和正确设置的知识,我想您可以这样做,但是如果您在服务器上安装AV,则应用程序可以作为子进程启动AV来检测新文件。这不是更简单吗? - code_dredd
2个回答

4

首先,您需要检查您已安装的防病毒软件提供了哪种类型的API。

如果提供了任何Java API(例如AVG API),则必须按以下方式使用:

public void scanFile(byte[] fileBytes, String fileName)
   throws IOException, Exception {
   if (scan) {
      AVClient avc = new AVClient(avServer, avPort, avMode);
      if (avc.scanfile(fileName, fileBytes) == -1) {
         throw new VirusException("WARNING: A virus was detected in
            your attachment: " + fileName + "<br>Please scan
            your system with the latest antivirus software with
            updated virus definitions and try again.");
      }
   }
}

如果已安装的防病毒软件没有提供Java API,则仍可以使用命令行调用它,如下所示:

String[] commands =  new String[5];
                  commands[0] = "cmd";
                  commands[1] = "/c";
                  commands[2] = "C:\\Program Files\\AVG\\AVG10\\avgscanx.exe";
                  commands[3] = "/scan=" + filename;
                  commands[4] = "/report=" + virusoutput;


                 Runtime rt = Runtime.getRuntime();
                 Process proc = rt.exec(commands);

这里有一篇有趣的文章供您参考:在JEE应用程序中实现反病毒文件扫描。

希望这可以帮助您。


3
在线反病毒软件ClamAV:https://github.com/cdarras/clamav-client是一个不错的选择。
如果你使用Linux/Mac系统,这款在线反病毒软件就足够了。 如果你使用Windows系统,你也应该在服务器上安装杀毒软件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接