2013-07-20 4 views
8

파일을 저장하기 전에 파일 업로드를 확인하려면 어떻게해야합니까?MVC3에서 바이러스 업로드 파일 확인

이전에이 주제를 읽었지 만 프로그래밍 방식으로 사용자에게 결과를 반환하려면 어떻게해야합니까? 어떤 종류의 사용자가 업로드 된 파일 문제를 방지하기 위해

가장 좋은 방법은 당신이 업로드 한 후 파일을 검사 에 사용하는 서버의 명령 줄 바이러스 스캐너를 가지고 입니다. 스캐너 결과가 긍정적 인 경우, 소포스 API를 살펴 보자 에게 파일 등

+0

안녕하세요, 저는이 작업을 어떻게 관리했는지, 그리고 어떤 솔루션을 사용하는 것이 가장 좋았는지 공유 할 수 있는지 궁금합니다. –

+1

IAttachmentExecute API를 사용할 수 있습니다. [이 대답은 당신을 도울 수 있습니다] (http://stackoverflow.com/a/35684198/1442180) – Fred

+0

IAttachmentExecute API를 사용할 수 있습니다. [이 대답은 당신을 도울 수 있습니다] (http : // stackoverflow.com/a/35684198/1442180) – Fred

답변

7

에 삭제 https://secure.sophos.com/partners/oem/integration/savdi.html

는 "SAV 동적 인터페이스 (SAVDI은) 쉬운 통합, 범용 인터페이스를 제공합니다 모든 언어로 작성된 프로그램이 맬웨어에 대한 파일 및 데이터를 검색 할 수있게 해주 며 특히 .NET 환경에서 실행되는 ISP/ASP에 널리 사용됩니다. "

또 다른 대안은 Process 클래스를 사용하여 서버에서 바이러스 백신 스캐너를 시작하고() 해당 결과를 구문 분석하는 것입니다. 예를 들어 AVG의 명령 줄 매개 변수 목록은 다음과 같습니다. http://www.avg.com/ww-en/faq.num-3604.

그런데 솔루션을 개발할 때 감염된 파일을 식별 할 수 있는지 테스트해야합니다. 그러나 실제 감염된 파일을 사용하는 것은 권장되지 않습니다. 그러나 아래 문자열로 텍스트 파일을 만들 수 있습니다. 이 문자열은 일반적으로 바이러스 백신 검색 프로그램에서 테스트 목적으로 감염된 파일로 식별됩니다 (자세한 내용은 EICAR 표준 안티 바이러스 테스트 파일 검색 참조).

* AP [4 \ PZX54 (P ^) 7CC) @ X5O!의 P %의 7} $ EICAR-STANDARD-ANTIVIRUS-TEST-FILE! $ H + H **

2

처럼 스캔 온라인 리소스를 시도 바이러스 총계 또는 유사. 또한 아시다시피 Kaspersky에는 온라인 스캐너가 있지만 일시적으로 사용할 수 없습니다. 당신이 당신의 인생을 더 쉽게하려면 바이러스 백신 소프트웨어를 설치하려면이 서버에 파일을 업로드를 스캔하여 대상 서버

+1

이 작업을 수행하는 경우 사이트의 서비스 약관을 확인하십시오. 그런 용도로 허용하지 않는 것이 좋습니다 (적어도 무료는 아니며 비용을 지불 할 수있는 상업 서비스가있을 수 있음) –

+0

이것은 좋은 옵션이지만 파일을 스캔하는 데 몇 시간이 걸리면 웹 사이트에서 양식을 제출하는 데 덜 효과적입니다 ... –

3

에 전송할 수있는 프록시 서버를 만들 수 있습니다보기의 응용 프로그램 관점에서

... Metascan Online을 확인하십시오. 그들은 무료 공개 API를 온라인으로 제공합니다. 앞으로 Metascan Online 공용 API를 사용하여 프로그래밍 방식으로이를 수행 할 수있는 방법을 설정할 수도 있습니다.

Sample Code(PHP) 

     // Config. 
     $api = 'https://api.metascan-online.com/v1/file'; 
     $apikey = 'E1D7-DG5E-4FE0-BFAE'; 
     $file = 'test.txt'; 

     // Build headers array. 
     $headers = array(
    'apikey: '.$apikey, 
    'filename: '.basename($file) 
    ); 

     // Build options array. 
     $options = array(
    CURLOPT_URL  => $api, 
    CURLOPT_HTTPHEADER => $headers, 
    CURLOPT_POST  => true, 
    CURLOPT_POSTFIELDS => file_get_contents($file), 
    CURLOPT_RETURNTRANSFER => true, 
    CURLOPT_SSL_VERIFYPEER => false 
    ); 

     // Init & execute API call. 
     $ch = curl_init(); 
     curl_setopt_array($ch, $options); 
     $response = json_decode(curl_exec($ch), true); 

     print_r($response); 

다중 검색을 중요시하는 엔진입니다. 또한 40 개가 넘는 엔진을 사용하여 파일을 검사합니다.

1

나는 매우 비슷한 문제를 해결하기 위해 찾고 있었고 메모리 스캐닝에서 많은 것을 발견하지 못했습니다. 필자가 발견 한 대부분의 예제는 파일을 디스크에 쓰고 일부 변수를 다른 프로세스에 전달하여 디스크의 파일을 검사하는 작업을 포함합니다.

그래서 솔루션에서 나는 단지 HttpPostedFileBase.InputStream을 사용하고이를 검색하기 위해 ClamAv로 보냅니다. MVC와 QED에서 작동하도록하는 코드는별로 없습니다. VirusScannerFactory의 구현이 AV 공급 업체에 적합하게 확장 할 수

/// Main controller 
public class HomeController : Controller { 

    /// Get the upload view 
    [HttpGet] 
    public ActionResult Index() { 
     return View(); 
    } 

    /// Handle the file upload 
    [HttpPost] 
    public ActionResult Index(UploadViewModel model, HttpPostedFileBase file) { 
     var scanner = VirusScannerFactory.GetVirusScanner(); 
     var result = scanner.ScanStream(file.InputStream); 

     if(result.IsVirusFree) { 
      // save to disk 
     } else { 
      // don't save to disk and tell user they uploaded a virus 
     } 

     return View(model); 
    } 
} 

:

그래서 당신의 MVC 컨트롤러에서, 다음과 같이해야합니다.

public class VirusScannerFactory { 
    public static IScanViruses GetVirusScanner() { 
     //Currently we only have one Antivirus implementation, 
     //but later we want to include AVG, SOPHOS and metascan 
     return new ClamAvScanner(); 
    } 
} 

public interface IScanViruses { 

    ScanResult ScanFile(string fullPath); 

    ScanResult ScanBytes(byte[] bytes); 

    ScanResult ScanStream(Stream stream); 
} 

예를 들어 nClam 및 ClamAv를 사용했습니다. 전체 ClamAV를 구현 found on github 될 수 있지만, 당신이 메모리 작업하는 스트림을 얻는 방법의 조각은 내가 ClamAV를 사용하여이 작업을 수행하는 방법에 대한 자세한 내용과 함께 blog post을 만들어

public class ClamAvScanner : IScanViruses{ 
    ... snip ... 
    /// Scans your data stream for virus 
    public ScanResult ScanStream(Stream stream) { 
     var clam = new ClamClient("localhost", 3310); 
     return MapScanResult(clam.SendAndScanFile(stream)); 
    } 
    ...snip ... 
    /// helper method to map scan result 
    private ScanResult MapScanResult(ClamScanResult scanResult) { 
     var result = new ScanResult(); 
     switch (scanResult.Result) { 
      case ClamScanResults.Unknown: 
       result.Message = "Could not scan file"; 
       result.IsVirusFree = false; 
      break; 
      case ClamScanResults.Clean: 
       result.Message = "No Virus found"; 
       result.IsVirusFree = true; 
       break; 
      case ClamScanResults.VirusDetected: 
       result.Message = "Virus found: " + scanResult.InfectedFiles.First().VirusName; 
       result.IsVirusFree = false; 
       break; 
      case ClamScanResults.Error: 
       result.Message = string.Format("VIRUS SCAN ERROR! {0}", scanResult.RawResult); 
       result.IsVirusFree = false; 
       break; 
      } 
     return result; 
    } 
} 

이하입니다.

+3

URL이 이동하거나 죽으면 유용하지 않게되므로 다른 사이트에 대한 링크는 주로 사용하지 마십시오. /기타. 블로그에서 발췌 한 일부 발췌 내용을 답변으로 편집 할 수 있습니까? –

1

여기에 요약,이 주제의 연구를 좀했다. (I Windows를 사용하고 같은 그것은, Windows 및 C#을 위해 주로 우리가 시만텍 안티 바이러스 소프트웨어를 사용하는)

  1. 시만텍 제품 :

    a. Systemtec 스캔 엔진. : 바이러스 백신 서비스 인 과 같으며 시스템에 통합 할 수있는 SDK를 제공합니다.

    b. Doscan.exe : 회사 시스템에서 찾을 수있는 명령 줄 도구입니다. 우리는 파일을 스캔 할 새 프로세스를 만들어 코드에서 사용할 수 있습니다. 은 Symantec 스캐너와 동일한 스캔 프로세스를 사용합니다. 따라서 소프트웨어가 장시간 스캔을 수행 할 때 차단되는 것은 입니다.

  2. AntiVirusscanner이

    이 라이브러리 안티 바이러스 소프트웨어 제품의 래퍼입니다 (예 : "마이크로 소프트 시큐리티 에센셜 (Windows Defender는)")를 가 윈도우 OS에 설치되어 있어야합니다. 내 컴퓨터에서 시만텍의 실시간 검사를 중지 할 수 없으므로 제대로 작동하는지 몰라. 사용자가 작동하지 않는다고 말했지만 확인하지 않았습니다.

  3. Windows Defender를 :

    그것은 안티 바이러스 소프트웨어 빌드 - 윈도우 시스템입니다. 그리고 그것은 commend line tool (mpcmdrun.exe)을 가지고 있다고하지만, 내 컴퓨터에서 찾을 수 없습니다. 시만텍을 사용하면서 장애가되었습니다. 당신은 그것을 가지고 시도해 볼 수 있습니다.

  4. 오픈 소스 안티 바이러스 제품

    ClamAV의 인기입니다. 일부 제품을 시스템에 통합 할 수 있습니다. 그리고 그것은 C# API를 가지고 있으므로 도 사설 클라우드 검색 엔진을 만들 수 있습니다.

  5. 상업용 스캔 엔진 공개 API : Virustotal 및 Sophos.