2016-07-25 246 views
6

我有一些應用程序。用戶可以上傳文件,將其保存在磁盤上,並在用戶需要時將其返回。我需要爲病毒上傳的文件實施一些保護。 我發現這個問題的解決方案3:檢查上傳的文件是否有病毒

  1. 使用在線防病毒軟件
  2. 我的服務器上安裝防病毒軟件,並從命令行來檢查上傳的文件
  3. 通過SDK或API集成的防病毒。

我不喜歡第一個解決方案,因爲我發送我的文件和私人信息給其他服務器。 第二種解決方案,我認爲是最好的,但我不知道如何正確實施它。 最後的解決方案很好,但我找不到任何好的和着名的防病毒軟件,誰擁有java api。

請給我一些方向解決這個問題。 Mb一些建議或文獻。 什麼是解決它的最好方法?

+1

標記爲這主要是基於觀點的,但我建議選項#2,從你的應用程序作爲一個孩子推出AV過程,然後檢查一下孩子的退出代碼報告(如:'0' =乾淨,'1' =受感染的或其他的 - 檢查文檔)等等。 – ray

+0

@ray我發現這個建議:「從應用的角度來看,你可以創建一個代理服務器,在那裏你可以安裝殺毒軟件,上傳文件到該服務器,掃描,並傳送到目標服務器」 但是,爲什麼我們需要使用一些新的服務器? – zam

+0

我想你能做到這一點,如果你有基礎設施和知識來正確設置它,但如果你在你的服務器上安裝的AV,應用程序可以對新文件作爲子進程啓動AV。這看起來不簡單嗎? – ray

回答

2

首先,你要檢查什麼樣的API並已安裝的防病毒軟件提供。

如果沒有提供(如AVG API),那麼你必須如下使用任何Java 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應用

希望這有助於防病毒文件掃描你。