2013-07-20 13 views
8

Virüs için dosya yüklemeden önce nasıl kontrol edebilirim?MVC3 virüsü için dosya yükleme dosyasını kontrol edin

Daha önce bu konuyu okudum, ancak nasıl programatik ve kullanıcı için sonuç döndürme yapabilirim? Her türlü kullanıcı yüklenen dosyaları ile sorunları önlemek için

en iyi yolu yüklemeden sonra dosyaları taramak için kullandığınız sunucuda bir komut satırı virüs tarayıcı, sahip olmak olduğunu. Tarayıcı sonucunun olumlu çıkması halinde, Sophos API bir göz atın dosyası ve böylece

+0

Merhaba, bu çalışmayı nasıl başardığınızı ve en iyi bulduğunuz çözümü nasıl bulabileceğinizi merak ediyordum. –

+1

IAttachmentExecute API'sini kullanabilirsiniz. [Bu yanıt size yardımcı olabilir] (http://stackoverflow.com/a/35684198/1442180) – Fred

+0

IAttachmentExecute API'sini kullanabilirsiniz. [Bu cevap size yardımcı olabilir] (http: // stackoverflow.com/a/35684198/1442180) – Fred

cevap

7

üzerinde silme https://secure.sophos.com/partners/oem/integration/savdi.html

"SAV Dinamik Arabirimi (SAVDI) bir kolay entegre, genel amaçlı arayüz sağlar Sophos algılama motoruna, herhangi bir dilde yazılmış programların, kötü amaçlı yazılımlara karşı dosyaları ve verileri taramasını sağlar ve özellikle .NET ortamında çalışan ISS'ler/ASP'lerle birlikte kullanılır. " Başka bir alternatif ise, sunucuda bir anti-virüs tarayıcısını (http://www.dotnetperls.com/process-start) başlatmak ve sonuçlarını ayrıştırmak için Process sınıfını kullanmaktır. Örneğin, burada AVG için komut satırı parametrelerinin listesi: http://www.avg.com/ww-en/faq.num-3604. Bu arada, çözümünüzü geliştirirken, virüslü bir dosyayı tespit edip edemeyeceğinizi test etmeniz gerekecektir. Ancak, virüs bulaşmış bir dosyayı kullanmanız önerilmez. Ancak, aşağıdaki dizeyle bir metin dosyası oluşturabilirsiniz. Bu dize, virüsten korunma tarayıcıları tarafından genellikle virüs bulaşmış bir sınama amaçlı olarak tanımlanır (daha fazla bilgi için, EICAR Standard Anti-Virus Test Dosyası'nı arayın).

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

2

gibi taramaya çevrimiçi kaynakları denemek virusTotal veya benzeri. Kaspersky'nin çevrimiçi bir tarayıcıya sahip olduğunu bildiğim gibi, ancak geçici olarak kullanılamıyor. Eğer hayatınızı daha kolaylaştırmak için antivirüs yazılımı yüklemek bu sunucuya dosya yüklemek, tarayın ve hedefinizi sunucusuna

+1

Bunu yaparsanız, sitenin TOS'unu kontrol ettiğinizden emin olun, bunun gibi kullanıma izin vermezler (en azından ücretsiz değil, ödeyebileceğiniz bir ticari hizmet alabilirler) –

+0

Bu güzel bir seçenek, ancak dosyaları taramak için birkaç saat alıyor, bir web sitesinde sunulan formda daha az etkilidir ... –

3

aktarabilirsiniz bir proxy sunucusu oluşturabilir bakış uygulama açısından

... Metascan Online'a bak. Çevrimiçi ücretsiz bir genel API sunarlar. Gelecekte, Metascan Online public API ile programatik olarak bunu yapmanın bir yolunu da oluşturabilirsiniz.

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); 

Bu, çoklu tarama konusunda ciddi iseniz kullanmak istediğiniz motordur. Ayrıca dosyaları taramak için 40'tan fazla motor kullanırlar.

1

Çok benzer bir sorunu çözmeye çalışıyordum ve bellek taramasında fazla bir şey bulamadım. Bulduğum çoğu örnek dosyayı diske yazmayı ve sonra da dosyayı diskte taramak için başka bir işleme geçirerek bazı değişkenleri taramaktır.

Kullandığım çözümde sadece HttpPostedFileBase.InputStream kullanın ve taramak için bunu ClamAv'a gönderin. MVC ve QED'de çalışmak için çok fazla kod yok. VirusScannerFactory Uygulanması AV satıcısına uygun uzatılabilir

/// 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); 
    } 
} 

:

Yani MVC denetleyicisi, böyle bir şey olacak.

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); 
} 

Örnek olarak nClam ve ClamAv kullandım. Tam ClamAv uygulanması found on github olabilir, ama bunun bellek için çalışma akışları almak nasıl bir pasajı ben Clamav ile bunun nasıl yapılacağı tam detayları ile blog post oluşturulan

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; 
    } 
} 

altındadır.

+3

URL hareket/ölürse daha az kullanışlı hale geldiklerinden, lütfen öncelikle diğer sitelere bağlantılar olan yanıtlardan kaçının. /vb. Blogunuzdan alakalı bazı alıntıları cevabınıza göre düzenleyebilir misiniz? –

1

burada özetidir, bu konunun biraz araştırma yaptım. (I Windows'u kullanıyorum gibi Windows ve C# için esas olduğunu ve Symantec anti-virüs yazılımı kullanıyorsanız)

  1. Symantec ürün:

    a. Systemtec Tarama Motoru. : Özel bir antivirüs servisine benziyor ve sisteminize entegre edilmek üzere SDK sağlıyor.

    b. Doscan.exe: firmamızın sisteminde bulabileceğimiz bir komut satırı aracıdır. Bir dosya taramak için yeni bir süreç oluşturarak kodumuzda kullanabiliriz. , Symantec tarayıcısının aynı tarama işlemini kullanır. Böylece, yazılım uzun bir zaman tarama yaparken bloke edilecektir.

  2. AntiVirusscanner

    Bu kütüphane, anti virüs yazılımı ürününün bir sarıcı (örneğin "Microsoft Security Essentials (Windows Defender)") Eğer Windows işletim yüklü. Symantec'in makinemdeki gerçek zamanlı taramasını durduramayacağından, çalışıp çalışmadığını bilmiyorum. Bir kullanıcının işe yaramadığını söyledim ama kontrol etmedim.

  3. Windows Defender:

    bir anti-virüs yazılımı yap-Windows Sistem olduğunu. Ve bir commend satırı aracı (mpcmdrun.exe) sahip olduğu söylenir, ancak makinemde bulunamıyor. Ve Symantec'i kullandığımız için devre dışı bırakıldı. Eğer varsa, bunu deneyebilirsiniz.

  4. Açık Kaynak Anti-virüs ürünü

    ClamAV popüler bir tanesidir. Bazı ürünü, sisteminize entegre eder. Ve C# API var, bu yüzden özel bir bulut tarama motoru yapmak için da kullanılabilir.

  5. Ticari Tarama-Motor Açık API gibi: VirusTotal ve Sophos.

İlgili konular